原码、反码和补码

  1. 原码

正数的符号位用0表示,负数用1表示,其余位为数值,这种表示方法称为原码。

X=+105,[X]=0110 1001

Y=-105,[Y]=1110 1001

原码简单易懂,与真值的换算也很方便,但若要进行两个异号数相加或者两个同号数相减的运算,就要做减法操作。然而在一般的计算机中是没有减法运算部件的,减法运算也要用加法部件实现,所以要引进反码和补码。

  1. 反码

正数的反码与原码相同,最高位为符号位,用0表示,其余位为数值。

[X]=0110 1001

负数的反码为它的正数按位取反,即连同符号位一同取反。

[Y]=1001 0110

所以,8位二进制数表示的反码范围为-127+127。当带符号数用反码表示时,最高位为符号位,当它为正数时,后7位为真正的值,当它为负数时,后7位要取反后才能得到真正的值。

  1. 补码

正数的补码表示与原码相同,最高位为符号位,用0表示,其余位为真值,负数的补码最高位为1,数值部分则由它的反码再加1形成。

[X]=0110 1001

[Y]=1001 0111

8位二进制数能表示的补码范围为-128+127,可以推算出16位二进制数能表示的二进制补码的范围为-32768+32767。当带符号数用补码表示时,最高位是符号位,当符号位是0时,表示正数,后7位为其真正的数;当符号位是1时,表示负数,要将后7位的最低为减1,求得反码,再按位取反,才能得到真正的数(真数)。


任何一个数用补码表示后,都可以看成“连同符号位的数”。符号位也一起参加运算,一个数要减去另一个数时,只要加上其补码即可。

做减法运算,求7-19=?可以用7+[-19]来完成。

[7]= 0000 0111

[+19]=0001 0011

[-19]=1110 1101


0000 0111 [7]

+ 1110 1101 [-19]

1111 0100

所以,和的补码=1111 0100

和的反码=1111 0011

和的原码=1000 1100 其真值为-12

原文地址:https://www.cnblogs.com/MichaelBin/p/4472565.html