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 各种整型占用字节数
各种整型占用字节数列表
数据类型 字节数 位数 上限 下限 计算公式 short 2 16 -32768 32767 -2^15~(2^15 - 1) unsigned short 2 16 0 65535 0~(2^16 - 1) int 4 32 -2147483648 2147483647 -2^31~(2^31 - 1) unsigned int 4 32 0 4294967295 0~(2^32 - 1) long(32位编译器) 4 32 -2147483648 2147483647 -2^31~(2^31 - 1) unsigned long(32位编译器) 4 32 0 4294967295 0~(2^32 - 1) long(64位编译器) 8 64 …… …… -2^63~(2^63 - 1) unsigned long(64位编译器) 8 64 0 …… 0~(2^64 - 1) long long 8 64 …… …… -2^63~(2^63 - 1) unsigned long long 8 64 0 …… 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++数据类型、整型
5917

被折叠的 条评论
为什么被折叠?



