数字电路与逻辑设计
上QQ阅读APP看书,第一时间看更新

1.4 二进制算数运算

1.4.1 二进制算术运算的特点

二进制数的加、减、乘、除四则运算,在数字系统中是经常遇到的,它们的运算规则与十进制数很相似。加法运算是最基本的一种运算。在计算机中,引入补码表示后,加上一些控制逻辑,利用加法就可以实现二进制的减法、乘法和除法运算。

1.二进制的加法运算

二进制加法运算法则:0+0=0;0+1=1+0=1;1+1=10(逢2进1)。

例1-1】求(1011011)2+(1010.11)2

(1011011)2+(1010.11)2=(1100101.11)2

2.二进制数的减法运算

二进制减法运算法则为:0-0=1-1=0;0-1=1(借1当2);1-0=1。

【例1-2】求(1010110)2-(1101.11)2

(1010110)2-(1101.11)2=(1001000.01)2

3.二进制数的乘法运算

二进制乘法运算法则为:0×0=0;0×1=1×0=0;1×1=1。

【例1-3】求(1011.01)2×(101)2

(1011.01)2×(101)2=(111000.01)2

可见,二进制乘法运算可归结为“移位与加法”。

4.二进制数的除法运算

二进制除法运算法则为:0÷0=0;0÷1=0;1÷1=1。

【例1-4】求(100100.01)2÷(101)2=?

(100100.01)2÷(101)2=(111.01)2

可见,二进制除法运算可归结为“减法与移位”。

1.4.2 原码、反码、补码和补码运算

1.原码

正数的符号位为0,负数的符号位为1,其他位按照一般的方法数的绝对值来表示就构成了原码。

【例1-5】求当机器字长为8位二进制数的原码。

X=+1011011   Y=-1011011

解:

[X]原码=01011011  [Y]原码=11011011

2.反码

对于有效数字(不包括符号位)为n位的二进制数N的反码(N)INV是这样定义的

具体来说,对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。

【例1-6】求机器字长为8位二进制数的反码。

X=+1011011 Y=-1011011

解:

[X]原码=01011011 [X]反码=01011011

[Y]原码=11011011 [Y]反码=10100100

负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。

3.补码

引入补码以后,计算机中的加减运算都可以统一化为补码的加法运算,其符号位也参与运算。为了说明补码运算的原理,我们先来讨论一个生活中常见的事例。例如,你在 6 点钟的时候发观自己的手表停在9点上了,因而必须把表针拨回到6点。由图1-3可以看出,这时有两种拨法:第一种拨法是往回拨3格,9-3=6,拨回到了6点;另一种拨法是往前拨9格,9+9 =18。由于表盘的最大数只有12,超过 12以后的“进位”将自动消失,于是就只剩下减去 12 以后的余数了,即18-12=6,也将表针拨回到了6点。这个例子说明,9-3 的减法运算可以用9+9的加法运算代替。因为3和9相加正好等于产生进位的模数12,所以我们称9为-3对模12的补数,也称为补码(Complement)。

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

从这个例子中可以得出一个结论,就是在舍弃进位的条件下,减去某个数可以用加上它的补码来代替。这个结论同样适用于二进制数的运算。一个 4 位二进制数的模为 16。例如:0111(7)是-1001(9)对模16的补码。

基于上述原理,对于有效数字(不包括符号位)为n位的二进制数N,它的补码(N)COMP表示方法为

由式1-7可知,正数(当符号位为0时)的补码与原码相同,负数(当符号位为1时)的补码等于(N)INV+1=2n−N,即负数的补码为其反码加1。

【例1-7】写出二进制数的补码:(1)X=+1011011(2)Y=-1011011。

:(1)根据定义有:[X]原码=01011011 [X]补码=01011011

(2)根据定义有:[Y]原码=11011011 [Y]反码=10100100

        [Y]补码=10100101

补码表示的整数范围是−2n−1~2n−1−1,其中n为机器字长 8。位二进制补码表示的整数范围是-128~+127(-128 表示为10000000,无对应的原码和反码)。16 位二进制补码表示的整数范围是-32768~+32767。当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。

4.补码加、减运算规则

(1)运算规则

[X+Y]=[X]+[Y]

[X-Y]=[X]+[-Y]

(2)溢出判断,一般用双符号位进行判断

符号位00表示正数;11表示负数;结果的符号位为01时,称为上溢;为10时,称为下溢。

【例1-8】设x=+1101,y=-0111,符号位为双符号位用补码求x+y,x-y。

解:

[x]+[y]=00 1101+11 1001=00 0110

[x-y]=[x]+[-y]=00 1101+00 0111=01 0100。

上溢出,结果错误。