数字电路与系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

*1.7 带符号二进制数的表示法

一个二进制数可以表示为正数或者负数,方法是在二进制数最高位之前加一个符号位,用0表示正数,1表示负数,通常用逗号将符号位隔开。

1.7.1 二进制正数表示法

正数的原码表示法、反码表示法和补码表示法相同,均为符号位0加二进制数本身(即原码)。例如,(+37)10=0,100101。

1.7.2 二进制负数表示法

二进制负数的三种表示方法各有不同,规则如下。

原码表示法:符号位1加原码。

反码表示法:符号位1加反码。

补码表示法:符号位1加补码。

例如,(37)10的二进制数为100101,(-37)10的三种二进制表示法分别如下。

原码表示法:1,100101

反码表示法:1,011010

补码表示法:1,011011

1.7.3 带符号二进制数的运算

在数字电路系统中,为了简化运算电路,减法运算用补码相加来完成,乘法运算用加法和移位来实现,除法运算用减法和移位来完成。因此,加法运算是数字电路的基本运算单元。例1.12~例1.14说明了如何利用补码运算将减法化为加法来完成计算。

【例1.12】用二进制补码运算求(1101)2-(1010)2

解:采用补码运算,首先化为带符号数相加的形式

(1101)2-(1010)2=(0,1101)2+(1,1010)2

对两数求补

[(0,1101)2]=0,1101 [(1,1010)2]=1,0110

然后两个补码相加并舍去进位

0,1101+1,0110=(1) 0,0011=0,0011

这仍是计算结果的补码形式。对此结果再求一次补,得到计算结果的原码

(0,0011)=0,0011

所以(1101)2-(1010)2=(0,0011)2

【例1.13】用二进制补码运算求(13)10-(25)10

解:(13)10表示成补码为(0,01101)2,(-25)10表示成补码为(1,00111)2

将两个补码相加,(0,01101)2+(1,00111)2=(1,10100)2

这仍是计算结果的补码形式。对此结果再求一次补,得到计算结果的原码

(1,10100)=(1,01100)2=(-12)10

【例1.14】用二进制补码运算求(-13)10-(25)10

解:(-13)10表示成补码为(1,10011)2,(-25)10表示成补码为(1,00111)2

将两个补码相加,(1,10011)2+(1,00111)2=(10,11010)2。由于两个被加数都是6位的(包括符号位),运算结果也应该是6位的。所以,(10,11010)2的最高位溢出,运算结果为(0,11010)2。此数是一个正数,显然运算结果是错误的。

(-13)10-(25)10的运算结果应该是(-38)10。用二进制表示至少用7位数字(包括符号位)。可见,出错的原因是参与运算的字长不足。解决办法是增加字长,在两个被加数的原码最高位加一个0,再按相同方法继续运算,过程如下。

用7位数字表示(-13)10,原码为(1,001101)2,补码为(1,110011)2。同理,(-25)10的原码为(1,011001)2,补码为(1,100111)2。两个补码相加,(1,110011)2+(1,100111)2=(11,011010)2,高位溢出后为(1,011010)2

这仍是计算结果的补码形式。对此结果再求一次补,得到计算结果的原码

[(1,011010)2]=(1,100110)2=(-38)10