数字电子技术基础(微课版)
上QQ阅读APP看书,第一时间看更新

1.3.2 有符号二进制数的表示

前面只考虑了无符号二进制数,当算术运算涉及正、负数时,就需要用有符号的二进制数。在日常生活中,我们通常在一个数的前面用“+”表示正数,用“−”表示负数。但数字系统只能识别01,那么,在数字系统中如何表示正、负数呢?

数字系统中通常正、负号也用01来表示,即将数的符号数值化,如图1.3.1所示。左边的最高位为符号位(通常用0表示“+”,用1 表示“−”),其余位为数值位。根据数值位的编码方式,有符号数又分为原码、反码和补码等不同的表示方法,其中补码是数字系统中使用最多的一种编码。下面分别进行介绍。

图1.3.1 有符号整数的表示方法

1.原码

在原码表示中,数值用其绝对值的二进制数形式表示。这种表示方法又称为符号—数值(Sign-Magnitude)表示法。例如:

X1=+105=+(110 1001)B,(X1)=(0110 1001)B

X2=-105=-(110 1001)B,(X2)=(1110 1001)B

可见,用原码表示时,+105和−105的数值位相同,而符号位相反。

数0有两种不同的原码表示:

(+0)= (0000 0000)B,(-0)= (1000 0000)B

原码表示简单易懂,而且转换为十进制数很方便,实现加、减运算却比较麻烦。例如,两个同符号数进行减法运算时,需要根据两数的大小确定被减数和减数,以及运算结果的符号。为了简化运算器的结构,把减法运算转换为加法运算,补码的概念被引入。补码与反码之间有一定的运算关系,我们先介绍反码。

2.反码

国外教材常将反码称为“1的补码”(1's Complement)。在反码表示中,正数的反码和原码相同,而负数反码的符号位为1,数值位为其绝对值按位取反(即将1翻转成0,将0翻转成1)。例如:

X1=+105=+(110 1001)B,(X1)=(0110 1001)B

X2=-105=-(110 1001)B,(X2)=(1001 0110)B

可见,正数的反码和原码相同。

数0也有两种不同的反码表示:

(+0)= (0000 0000)B,(-0)= (1111 1111)B

3.补码

国外教材常将补码称为“2的补码”(2's Complement),也称为“基数补码”。在补码表示中,正数的补码和原码相同,而负数补码的符号位为1,数值位为其绝对值按位取反,并在最低位加1。或者说,负数的补码为其反码加1。例如:

X1=+105=+(110 1001)B,(X1)=(0110 1001)B

X2=-105=-(110 1001)B,(X2)=(1001 0111)B

二进制数的补码

补码解决了原码和反码中数0的编码不唯一的问题。0的补码表示是唯一的,即(+0)=(-0)= (0000 0000)B

求负数补码的另一种简便方法:先求出负数的原码,再从右边的最低位向左边的最高位扫描,保留直到第一个“1”的所有位不变,之后数值位的各位按位取反,保留符号位不变。

例1.3.5 求-90的8位二进制补码。

+90的原码为(0101 1010)B,将最高位即符号位改为1,得到-90的原码:(1101 1010)B

再求-90的补码。从右向左扫描,保留右边的两位(10)不变,对其左边的数值位按位取反,并保留符号位不变。最后结果为

(-90)= (1010 0110)B

如果按照前面的方法,求出(-90)= (1010 0101)B,反码加1就得到补码,即(-90)=(1010 0110)B,可见,结果相同。

例1.3.6 求-1的8位二进制补码,然后对-1的补码再次求补。

因为(-1)= (1000 0001)B,使用从右向左扫描的方法,保留最低位的1不变,对其左边的数值位按位取反,并保留符号位不变。得到:

(-1)= (1111 1111)B

((-1))= (1111 1111)= (1000 0001)B= (-1)

可见,对一个整数的补码再次求补,得到该整数的原码。

4位有符号二进制数的原码、反码和补码对照表如表1.3.1所示。对于-0和+0,原码和反码是不同的4位二进制数,而补码则是相同的。因此,它们表示的数值范围分别为原码-7~+7、反码-7~+7、补码-8~+7。

一般来说,n位有符号二进制数的原码、反码和补码都有一位用来表示符号,剩余的(n - 1)位表示数值。因此,它们表示的数值范围分别为

原码 -(2n-1- 1)~ + (2n-1- 1)

反码 -(2n-1- 1)~ + (2n-1- 1)

补码 -2n-1~ + (2n-1- 1)

表1.3.1 4位有符号二进制数原码、反码、补码对照表