补下基础 --
原码、补码、反码
-- 正数补码、反码都和原码一样, 符号位为0
-- 负数原码 符号位为1,其他位为 绝对值表示的二进制数
反码 原码符号位不变、其他位按位取反
补码 反码 + 1
反码的问题是 00000000 为0, 反码为 00000000
10000000 也为0, 反码为 11111111
这样0就有两个反码, 11111111 -127反码为 1000000
补码 反码 + 1 所以
10000000为0 反码为11111111 补码为反码+1 => 00000000
00000000为0 反码为00000000 补码为00000000
这样 0 的补码和反码是一样的,
而反码中 被0占用的 10000000
假设在补码中,10000000 被一个数占用了, 即10000000 如果是补码,则反码为01111111,
因为反码和原码的符号位相同,则该反码对应一个正数, 而正数对应的补码和原码一样,所以这里矛盾了,
10000000 这个补码被空出来的,不可能被【-127,127】之间的数占用,
故在补码中 把10000000 这个补码给了-128使用。
由此 补码的表示范围扩大了一个数 【-128, 127】