C++基础---整型

1. 整型

1.1 整数的表示方式

  • 通常的计算机语言在计算机内部都是以二进制补码形式表示整数的。
  • 首先,将十进制正整数转换成二进制补码形式的整数。转换方法采用”除2取余法“,即对被转换的十进制整数除以2,取其余数,并将商再除以2,再取余,直到商为0。
  • 每次除下来的余数按先后构成了从低位到高位的二进制整数
    如:35 = 100011(2),如果该整数是short型的话,short型是2个字节即16位,若“除2取余法”得到的结果不足16位需要在前面补0。
    ——————————————————
    35 % 2 = 17……1
    17 % 2 = 8……1
    8 % 2 = 4……0
    4 % 2 = 2……0
    2 % 2 = 1……0
    1 % 2 = 0……1
    =>35 = 0000000000100011(2)。
    ——————————————————

1.2 整数的加法运算

  • 加法运算:逢二进一
    如:35 + 12= 47
    ——————————————————
    35 = 00100011(2)
    +
    12 = 00001100(2)
    —————————
    47 = 00101111(2)
    ——————————————————

1.3 负整数的表示方式

  • 一个十进制负整数,表示成二进制补码形式的整数时,该负整数的对应正整数先转换成二进制数,然后”取补(取反加1)“
    如:- 15 = - 00001111(2)
    取反加1  =   11110001(2) (取补:取反加1)
    注:用二进制补码表示的数中,以最高位是否为0来表示是否正数。如 01111110—正数;10000001—负数;

1.4 整数的减法运算

  • 减法运算:在二进制补码的运算中,减法相当于“取补”后相加,如果相加后在最高位有进位,则简单地弃之了事
    如:3 - 5= - 2
    ————————————————————————
    3 - 5 = 00000011(2) - 00000101(2)
    3 =  00000011(2)
    +
    - 5 =  11111011(2)
    ——————————————
    - 2 =  11111110(2)
    - 2 =- 00000010(2) (取补:取反加1)
    ————————————————————————

1.5 整数的乘法运算

  • 乘法运算:在二进制补码的运算中,有一种很有用的移位操作,8位二进制码的左移1位操作就是将最高位挤出,最低位补0
    如:2 * 7= 14
    ———————————————————————————————
    2 * 7 = 00000010(2) * 00000111(2)
       =00000010(2)*00000001(2)+00000010(2)*00000010(2)+00000010(2)*00000100(2)
       =00000010(2)左移0位 + 00000010(2)左移1位 +00000010(2)左移2位
       = 00001110
       =14
    ———————————————————————————————

1.6 整数的除法运算

  • 除法运算:在二进制补码的运算中,有一种很有用的移位操作,8位二进制码的右移1位操作就是将最低位挤出,最高位补0
    如:13 / 3= 4……1
    ———————————————————————————————
    13 / 3 = 00001101(2) % 00000011(2)
       =(00001100(2)+00000001(2))/00000011(2)
       =00001100(2)/00000011(2)+00000001(2)/00000011(2)
       = 00000100余00000001
       =4
    ———————————————————————————————

1.7 各种整型占用字节数

  • 各种整型占用字节数列表

    数据类型字节数位数上限下限计算公式
    short216-3276832767-2^15~(2^15 - 1)
    unsigned short2160655350~(2^16 - 1)
    int432-21474836482147483647-2^31~(2^31 - 1)
    unsigned int432042949672950~(2^32 - 1)
    long(32位编译器)432-21474836482147483647-2^31~(2^31 - 1)
    unsigned long(32位编译器)432042949672950~(2^32 - 1)
    long(64位编译器)864…………-2^63~(2^63 - 1)
    unsigned long(64位编译器)8640……0~(2^64 - 1)
    long long864…………-2^63~(2^63 - 1)
    unsigned long long8640……0~(2^64 - 1)

    注:有符号整型的最高位要用来表示符号位(1:负;0:正)

1.8 整型数据的溢出

  • 代码示例:Error demonstration

    include  <iostream>
    using namespace std;
    int main()
    {
        short int a,b;
        a = 32767;
        b = a+1;
        cout<<"a="<<a<<“\t<<"b="<<b<<endl; 
        return 0;
    }
    =>a=32767   b=-32768
    解: 
    a   0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1         32767
    b   1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0         -32768  

参考文献 :
[1]《C++全方位学习》范磊——第四章
[2]《C++程序设计教程(第二版)》钱能——第三章
[3] 百度搜索关键字:C++数据类型、整型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值