什么是补码,小数补码与整数补码的定义介绍。
补码的含义:用补码表示带符号的二进制数时,符号位与原码、反码相同,即用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 |