原码反码补码
前置知识:计算机只有0和1;1字节等于8位
符号位约定:最高位是0表示正数,1表示负数
原码:由符号位和数值位组成,最高位即符号位,数值位直接写二进制
反码:正数的反码和原码相同
负数的反码:符号位不变,其余全部取反
补码:正数的补码和原码相同
负数补码在反码的基础上加1
注:正数的原码反码补码一致
如果给出负数补码求原码,符号位不变,其余各位取反,然后末位加1即可
计算机内部进行计算时,使用的是补码,所以我们在计算时,要先统一转成补码,然后用补码运算,最后结果看符号位,如果是正数,直接读,如果是负数,要转回原码再读
为什么最终选了补码计算?
1.零的表示唯一,在原码和反码中,0都有两种表示(+0和-0),这会给程序逻辑带来麻烦,而补码中0只有一种表示形式,消除了歧义
2.统一加减法,有了补码,减法就可以变成加法(A-B等价于A+(-B)的补码),这样CPU只需要一个加法器就能搞定
3.符号位参与运算,在补码运算中符号位和数值位一起参与运算,不需要像原码那样先判断符号
4.多一个负数(对于8位二进制),因为在补码中0的表示唯一,省下来的那个编码就用来表示-128,所以补码比原码和反码多表示一个最小负数

浙公网安备 33010602011771号