C++中数据的表示
一、整数类型
1、无符号整数
无符号整数的取值范围:0x00000000 ~ 0xFFFFFFFF。
2、有符号整数
有符号整数的最高位为符号位,取值范围:0x80000000 ~ 0x7FFFFFFF
转换成二进制,分别为:
0x80000000 = 1000 0000 0000 0000 0000 0000 0000 0000 0x7FFFFFFF = 0111 1111 1111 1111 1111 1111 1111 1111
正数的表示区间为:0x00000000 ~ 0x7FFFFFFF
负数的表示区间为:0x80000000 ~ 0xFFFFFFFF
负数在内存中都是以补码的形式存放的,补码的规则是用0减去这个数的绝对值,也可以表示为,对这个数取反加1。例如,对于-3,可以表达为0-3,而 0xFFFFFFFD + 3 等于0 (进位丢失),所以-3的补码也就是0xFFFFFFFD了。
为了计算方便,通常采用取反加1的方式来获得补码,因为对于任何4字节的数值,都有x + x(反)= 0xFFFFFFFF,于是 x + x(反) + 1 = 0
对于4字节的补码,0x80000000所表达的意义,可以是负数0 ,也可以是0x80000001 减 1,由于0的正负值是相等的,因此没有必要还来个负数0,因此将这个值的意义规定为:0x8000000 - 1,这样,0x80000000也就成了4字节负数的最小值,负数区间总是比正数区间多一个最小值的原因了。

浙公网安备 33010602011771号