负数强转成无符号数,一定比所有有符号数大?

今天看到一个结论:负数强转成无符号数,一定比所有有符号数大

我们来看这个结论是怎么来的:
首先搞清楚负数在二进制中是怎么存储的
其次搞清楚负数强转成无符号数是怎么转换的。
搞清楚这两个问题就得出结论了。

首先搞清楚负数在二进制中是怎么存储的

负数在二进制中是以正数的补码形式保存的。

符号位

符号位为每个字节的最高位,最高位为1表示负数,为0表示正数。

负数的计算

计算方式:原码>反码>补码
例如十进制 -8
原码:1 000 1000 (符号位=1,负数)
反码:1 111 0111 (符号位不变,数值位分别“按位取反”)
补码:1 111 1000 (反码的末位+1)
因此-8 在 8位机器中用 1111 1000表示

负数强转无符号数的过程

先说正数,就像正数的反码补码都是它本身一样,3 = 0b 011
无符号数就是原码依然是它本身,且最高位也不表示符号位。和正数的区别就是多了一个最高位的有效数位。

例如:0b011 = 3 和 0b110 = 6 (如果是有符号的话 = -1)
可以看到所有的负数补码最高位都是1,那么强转的话,计算机直接将二进制码看做无符号数,最高位 =1 的数肯定 > 所有正数(最高位 = 0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注