-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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值