int a = 0x7fffffff,++a,求a的值?

1. 由int可知a可表示的最大位数为32位,0x7fffffff这是16进制数。


2.将a由16进制转为2进制。

0x7fffffff(16进制)= 0111 1111 1111 1111 1111 1111 1111 1111(2进制)

3.++a,表示a=a+1,则:

a= 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000

因为第一位代表符号位,所以可知a其为-0。我们知道,byte类型(8位)的范围为-128(-2^7)~127(2^7-1)。-128代表-0,同理可得:int类型(32位)的范围应为-2147483648(-2^31)~2147483647(2^31-1),所以a的值应为-2147483648

为什么这么算,大家可以看看下面摘自网上的解释。

-128是人为规定的。
因为8位2进制中,存在 “-0”(1000 0000)和"0"(0000 0000),虽然“-0”也是“0”,但根据正、反、补码体系,“-0”的补码和“+0”是不同的,这样就出现两个补码代表一个数值的情况。为了将补码与数字一一对应,所以人为规定“0”一律用“+0”代表。同时为了充分利用资源,就将原来本应该表示“-0”的补码规定为代表-128。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值