首页 > 代码库 > 关于原码、补码、反码的理解

关于原码、补码、反码的理解

补下基础 -- 

原码、补码、反码

-- 正数补码、反码都和原码一样, 符号位为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】

关于原码、补码、反码的理解