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。