在学习过程中碰到这个问题,所以记下来。
0x7fffffff 是16进制数,转化为2进制数为:(7=> 0111 f=>1111)
0111 1111 1111 1111 1111 1111 1111 1111
所以,二者对位相加,满2进1.
0111 1111 1111 1111 1111 1111 1111 1111
+ 0111 1111 1111 1111 1111 1111 1111 1111
------------------------------------------
1111 1111 1111 1111 1111 1111 1111 1110
此时,结果为1111 1111 1111 1111 1111 1111 1111 1110。又因为,此二进制数为负数,负数在二进制中以补码的形式存储,将其转化为原码。
类别 | 原码 | 反码 | 补码 |
---|---|---|---|
正数 | 本身 | 本身 | 本身 |
负数 | 本身 | 除符号位取反 | 除符号位取反+1 |
所以,补码-1,在除符号位取反:
补码-1:
1111 1111 1111 1111 1111 1111 1111 1110
- 0000 0000 0000 0000 0000 0000 0000 0001
----------------------------------------
1111 1111 1111 1111 1111 1111 1111 1101
除符号位取反
1111 1111 1111 1111 1111 1111 1111 1101
取反
---------------------------------------
1000 0000 0000 0000 0000 0000 0000 0010
转换为10进制,就是-2