-1在计算机中的存储

int a = -1;
在内存中的存储状态为:(0x0012FF70为 a 的地址)
0x0012FF70:FF FF FF FF
unsigned int b = 4294967295;四字节最大整数
在内存中的存储状态为:(0x0012FF6C为 b 的地址)
0x0012FF6C:FF FF FF FF
可见-1 和 4294967295 在内存中都以 FF FF FF FF表示 
如果 变量类型是 signed int 那么  FF FF FF FF 代表的就是 -1
如果 变量类型是 unsigned int 那么 FF FF FF FF代表的就是最大四字节整数:4294967295
其它类型,按其所占字节大小决定 FF 的个数,比如 char 占一个字节 所以 -1 即为 FF 

下面再讨论一下类型转换问题,比如
char  ch = -1;------------------------1_1
signed int  a =  ch;-----------------1_2
unsigned int  b = ch;--------------1_3
由 1_1 可知,ch在内存中的存储状态为 FF 占 1 个字节
由 1_2 可知,相当于 signed int a = (signed int ) ch;
a 占 4个字节 而 ch只占 1个字节 所以只能填充 a 的 低位的一个字节,其余高位字节将由 ch  的符号位(1)来填充
即最终 a 为 :FF FF FF FF 。前三个是由符号位填充 最后一个才是 ch
由 1_3 可知,相当于 unsigned int b = (unsigned int ) ch ;
原理同 a 一样最终 b 为:FF FF FF FF
虽然 a 和 b 最都是 FF FF FF FF,但他们的表现不一样,一个是 -1  一个是 4294967295

你可能感兴趣的:(C++相关)