int
- 请先理解数学上mod的含义(取模运算)如 5(mod 5) = 0(mod 5) = 20(mod 5)
有符号数—共32位:1位符号位,31位数值位。
设有正数x
;相反数 -x
;
补码表示 -x
= (1) 0000 0000 0000 0000 - x
即 2 ^ n - x,当然也可用传统的计算方法:x全部取反加1
x
加上 -x
=0,在计算机中是这样实现的:
$$ x + [(1)\ 0000\ 0000\ 0000\ 0000 - x]\quad(mod 2^{32}) \quad = 0(mod 2^{32}) $$
从这里继续思考:
数值位共31位,我们发现用2^31 - x,
同样可以得到 -x
补码的数值位部分。为什么用2^32去减x?
那么显然用2^32去减x,是为了制造符号位1,因为刚好符号那里的‘1’数值上 = 2^31 = (2^32 - 2^31)
也就是说 负数补码从数值上看-x
:
-x
与x
关于2^31对称。大于 2^31(可理解为unsigned int的上半区),
自然有:
$$
x + - x=2*2^{31}(mod 2^{32}) \quad = 0(mod 2^{32})
$$