购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 二进制数的算术运算

二进制数加、减、乘、除四则运算,在数字系统中是经常遇到的,下面介绍无符号二进制数和有符号二进制数的算术运算。

1.3.1 无符号二进制数的算术运算

无符号二进制数算术运算规则与十进制数很相似,唯一的区别在于二进制数是“逢二进一,借一当二”,而不是十进制数的“逢十进一,借一当十”,其运算规则如下:

1)加法规则:0+0=0;0+1=1+0=1;1+1=[1]0(方括号中的1是进位位,表示两个1相加“逢二进一”)。

2)减法规则:0-0=1-1=0;1-0=1;0-1=[-1]1(方括号中的-1是借位位,表示0减1时不够减,向高位借位,“借一当二”)。

3)乘法规则:0×0=0;0×1=1×0=0;1×1=1。

4)除法规则:0÷1=0;1÷1=1。

多位数二进制数加、减、乘、除四则运算列竖式的计算过程如下:

可见,二进制数乘法运算可归结为“移位与加法”。二进制数除法运算可归结为“移位与减法”。在无符号二进制数减法运算中无法表示负数,故要求被减数必须大于减数。但在计算机中为了节省设备和简化运算,一般只有加法器而无减法器,这就需要将减法运算转化为加法运算,从而使得算术运算只需要加法和移位两种操作。如果使用有符号的二进制数,那么二进制数减法运算也可以转换为加法运算。因此,二进制数的算术运算可以统一为加法运算的形式,这为电路的简化带来了极大的方便。

1.3.2 有符号二进制数的算术运算

1.原码、反码和补码

数字系统只能识别和处理用0和1表示的二进制形式的数码。有符号二进制数包含符号和数值信息,符号位一般放在最高位,用0和1分别表示这个数是正数还是负数,数值位则表示该数的大小。用“+”“-”符号表示出来的数称为真值。将数的“+”“-”符号和数值数码化后的二进制数称为机器数。机器数表示形式有三种:原码、反码和补码。

计算机中实际用8位二进制代码表示一个字符,称为一个字节。若计算机的寄存器为8位(一个字节),则数的存储格式如图1-6所示。最高位(MSB)为符号位,若此符号位为0,则该数为正(+);若符号位为1,则该数为负(-)。剩下的7位表示该数的绝对值大小。这种自然表示机器数的形式称为原码。原码表示简单、直观,但用原码进行减法运算时,首先需要比较两个数绝对值的大小,然后用绝对值大的数减去绝对值小的数求出差值,并以绝对值大的数的符号作为差值的符号。这个操作过程比较麻烦,还需使用数值比较电路和减法运算电路,不容易实现。计算机等数字系统均采用补码进行有符号二进制数的减法运算。为了计算减法方便,因此引入了反码和补码。

图1-6 有符号二进制数在8位寄存器中的存储格式

正数的原码、反码和补码完全相同。

负数的原码、反码和补码符号位都为1,反码的数值位是原码的逐位求反(即1变0,0变1),反码也因此而得名。补码数值位为其反码加1得到,或简称“逐位求反加1”。

例如:[+6] 原码 =[+6] 反码 =[+6] 补码 =0 0110

[-6] 原码 =1 0110[-6] 反码 =1 1001[-6] 补码 =1 1010

特殊:[+0] 原码 =[+0] 反码 =[+0] 补码 =0 0000000

[-0] 原码 =1 0000000[-0] 反码 =1 1111111

[-0] 补码 =1 1111111+1=0 0000000

所以有:[+0] 补码 =[-0] 补码 =0 0000000

例1-7 】求二进制数 x =+1011, y =-1011在八位存储器中的原码、反码和补码的表示形式。

:无论是原码、反码和补码形式,八位存储器的最高位为符号位,其他位则是数值部分的编码表示。在数值部分中,对于正数,原码、反码和补码按位相同,而对于负数,反码是原码的逐位求反,补码则是原码的逐位求反加1。所以,二进制数 x y 的原码、反码和补码分别表示如下:

x 原码 =0 0001011,[ x 反码 =0 0001011,[ x 补码 =0 0001011

y 原码 =1 0001011,[ y 反码 =1 1110100,[ y 补码 =1 1110101

表1-4列出了带符号的3位二进制数原码、反码、补码对应关系。

对于 n 位有符号的二进制数的原码、反码及补码所表示的二进制数的范围分别为

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

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

3)补码:-2 n -1 ~+(2 n -1 -1)。

表1-4 3位二进制数的原码、反码、补码对照

2.补码运算

补码的原理可以用时钟调整来说明。如图1-7所示,如果要将时钟从9点拨到4点,可以向后拨5个格,9-5=4,也可以向前拨7个格,9+7=16。由于时钟是一个十二进制的计数体制,一个计数系统的计数基数称为“模”,超过模12以后的“进位”将自动消失,舍去进位(溢出)后,剩下的余数即为需要的结果,即16-12=4,也将表针拨回到了4点。这个例子说明,9-5的减法运算可以用9+7的加法运算代替。所以称7为-5对模12的补数,也称为补码(Complement)。

图1-7 说明补码运算原理的例子

在数字系统中,有符号二进制数一律用补码进行存储和计算。通过引入补码,减法运算可以变为加法运算(减去一个正数相当于加上一个负数)。补码加、减运算规则如下:

X + Y =[ X +[ Y

X-Y =[ X +( -Y )] =[ X +[ -Y

{[ X ± Y } =[ X ± Y

例1-8 】试用4位二进制补码计算6-2。

:因为(6-2) =(6) +(-2)

=0110+1110

=0100

由计算过程可得:6-2=4。

进行二进制补码运算时,被加数和加数的补码的位数要相同,因此两个二进制数的补码采用相同的位数表示,即让两个二进制数的补码的符号位对齐。两个二进制数的补码相加时,方括号中的1是进位,在计算时自动舍去,因为上述运算是以4位二进制补码表示的,计算结果仍然保留4位。

例1-9 】试用4位二进制补码计算7+4。

:因为(7+4) =(7) +(4)

=0111+0100

=1011

计算结果补码1011表示-5,而实际正确的结果应该为11。错误产生的原因在于4位二进制补码中,有3位是数值位,它所表示的范围为-8~+7,而本题的结果需要4位数值位表示,因而产生溢出。

解决溢出的方法:进行位扩展,即用5位以上的二进制数补码表示,就不会产生溢出了。

即(7+4) =(7) +(4)

=00111+00100

=01011

计算结果01011表示+11,而实际正确的结果也是11。

3.溢出的判别

溢出的判别对有符号数的运算是非常重要的,它表明结果是否超出范围。“溢出”仅发生在两个同符号的数(两个正数或者两个负数)相加的情况下。如果两个正数相加的结果大于机器数所能表示的最大正数,称为正溢出;如果两个负数相加的结果小于机器数所能表示的最小负数,称为负溢出。

溢出判别的简便规则如下:

1)符号判断法:同符号数相加可能溢出,异符号数相加不会溢出。

2)进位判断法:若进位位和数的符号位取值相同,则运算没有产生溢出,否则发生溢出。

通过图1-8所示的实例来说明两个同符号的数溢出判别问题。

图1-8 溢出的判别

对于两个符号相同的数做加法运算,若进位位和数的符号位取值相同,则运算没有产生溢出,结果是正确的,如图1-8a、b所示;若进位位和数的符号位取值相反,则其运算产生了溢出,结果是错误的,如图1-8c、d所示。错误产生的原因在于4位二进制补码中有3位是数值位,所表示的范围为-8~+7。而图1-8c、d的计算结果分别为+9(1001为-7的补码)和-9(0111为+7的补码),均超过了该表示范围,因而产生了溢出。当产生溢出时,可通过扩展二进制数的位数来保证计算结果的正确性。

思考与练习

1.3-1 为什么说二进制数的加法运算是算术运算的基础?

1.3-2 二进制数的减法运算过程有什么规律?

1.3-3 说明反码与补码之间的关系。

1.3-4 说明溢出产生的原因。 qUIkd9WnPYtVw5JJtm0rNVyHZzWrVIVpJozwQlNIjXuUO9Ym2tJufEC+AQ/723yW

点击中间区域
呼出菜单
上一章
目录
下一章
×