什么是补码



什么是补码,小数补码与整数补码的定义介绍。

补码的含义:用补码表示带符号的二进制数时,符号位与原码、反码相同,即用0表示正,用1表示负;数值位与符号位相关,正数补码的数值位与原码、反码相同。而负数补码的数值位是真值的数值位按位变反,并在最低位加1。最简单的说法是:

反码等于原码各位取反,就是0变1,1变0;补码等于反码加一

1.小数补码的定义
设二进制小数X=±0.X-1X-2…X-m,则其补码定义为:

例如,X= + 0.1011时,根据以上公式可得[X]补= 0.1011;X = – 0.1011时, 根据以上公式可得[X]补 = 2 + X = 10.0000 – 0.1011 = 1.0101。
小数“0”的补码只有一种表示形式,即0.0…0。
2.整数补码表示法
设二进制整数X=±Xn-1Xn-2…X0,则其补码定义为:

 例如,X = +1010时,根据以上公式可得[X]补 = 01010;X =–1010时,根据以上公式可得[X]补 = 25 + X = 100000–1010 = 10110。
同样,整数“0”的补码也只有一种表示形式,即00…0。
采用补码进行加、减运算时,可以将加、减运算均通过加法实现,运算规则如下:
[X1 + X2]补 =[X1]补 +[X2]补
[X1–X2]补 =[X1]补 +[–X2]补
运算时,符号位和数值位一样参加运算,若符号位有进位产生,则应将进位丢掉后才得到正确结果。
例如,若X1 =–1001,X2 = +0011,则采用补码求X1–X2的运算如下:
[X1–X2]补=[X1]补+[–X2]补= 10111+11101
即:[X1–X2]补= 10100
由于结果的符号位为1,表示是负数,故X1–X2 = –1100。
综合比较原码、反码和补码的运算方法可以得出采用补码进行加、减运算最方便。
已知一个数的补码,求原码的操作分两种情况:
 如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
 如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1;其余各位取反,然后再整个数加1。
例如,已知一个补码为11111001,它的第一位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,最终得到该数的原码为10000111(–7)。


引入补码后,将减法运算转化为易于实现的加法运算,且符号位也当作数据相加,从而可简化运算器的结构,提高运算速度。因此,在微型计算机中,有符号数通常都用补码表示,得到的是补码表示的结果。但当字长由8位扩展到16位时,对于用补码表示的数,正数的符号扩展应该在前面补0,而负数的符号扩展应该在前面补1。如机器字长为8位,[+46]补=00101110B,[-46] 补=11010010B,从8位扩展到16位后,[+46]补= 0000 0000 0010 1110B=002EH,[-46]补= 1111 1111 1101 0010B=FFD2H
表2-2是8位二进制数的原码、反码和补码对照表。
表2-2   8位二进制数的原码、反码和补码对照表

二进制数码

无 符 号 数

原    码

反    码

补    码

00000000 0 +0 +0 +0
00000001 1 +1 +1 +1
00000010 2 +2 +2 +2
      : : : : :
01111110 126 +126 +126 +126
01111111 127 +127 +127 +127
10000000 128 – 0 -127 -128
10000001 129 -1 -126 -127
10000010 130 -2 -125 -126
      : : : : :
11111110 254 -126 -1 -2
11111111 255 -127 -0 -1