-
原码
正数的符号位用0表示,负数用1表示,其余位为数值,这种表示方法称为原码。
X=+105,[X]原=0110 1001
Y=-105,[Y]原=1110 1001
原码简单易懂,与真值的换算也很方便,但若要进行两个异号数相加或者两个同号数相减的运算,就要做减法操作。然而在一般的计算机中是没有减法运算部件的,减法运算也要用加法部件实现,所以要引进反码和补码。
-
反码
正数的反码与原码相同,最高位为符号位,用0表示,其余位为数值。
[X]反=0110 1001
负数的反码为它的正数按位取反,即连同符号位一同取反。
[Y]反=1001 0110
所以,8位二进制数表示的反码范围为-127~+127。当带符号数用反码表示时,最高位为符号位,当它为正数时,后7位为真正的值,当它为负数时,后7位要取反后才能得到真正的值。
-
补码
正数的补码表示与原码相同,最高位为符号位,用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。