使用全加器实现补码的加减运算

引言:

我们都知道,在计算机中的加减运算都是由补码来实现的,那么,计算机是如何运用电路来实现补码的加减的呢?在计算机中,所有的加减运算其实都变成了加法后来参与运算的,那么仅需要一个加法器就可以实现了。请看下面内容。

(一)全加器的构成

1.什么是全加器

全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

(1)一位全加器逻辑电路图如下

全加器逻辑电路图

该一位全加器的求和部分Si由两个异或门组成,进位部分Ci+1由与非门组成。

(2)简单的直观表示

全加器由两个二进制数字Ai,Bi和一个进位输入Ci相加,产生一个和输出Si,以及一个进位输出Ci+1。

下表中列出一位全加器进行加法运算的输入输出真值表。

全加器真值表

(3)逻辑表达式

根据所示的真值表,三个输入端和两个输入端可按如下逻辑方程进行联系:

Si=Ai⊕Bi⊕Ci
Ci+1=AiBi+BiCi+CiAi

看到这里你想起了什么?是不是补码运算的相加、进位、判断溢出?


(二)补码运算的二进制加法/减法器的逻辑结构

1.补码加减运算法则

(1)对于定点数的加法

定点小数:[X]补+[Y]补=[X+Y]补     (mod 2)
定点整数:[X]补+[Y]补=[X+Y]补 	(mod 2^n+1)

(2)对于定点数的减法

定点小数: [X-Y]补=[X]补+[-Y]补	(mod 2)
定点整数: [X-Y]补=[X]补+[-Y]补	(mod 2^n+1)

可以看出,在补码运算中,减法都变成了了加上该补码负数的形式。

扫描二维码关注公众号,回复: 3738552 查看本文章

(3)补码取负数:

即[X]补包括符号位在内的各位取反,末位加一后变成[-X]补

那么如何使用电路实现?如下

2.多位全加器实现补码加减运算

在这里插入图片描述

(1)图中字母代表含义

字母 含义
M 方向控制 (即控制做加\减法运算)
An 输入的 [X]补
Bn 输入的 [Y]补
Cn 进位输入\输出
Sn 结果输出

(2)实现加减

1.加法运算

当时加法运算时,我们的控制输入M就会起到相应的作用,当M=0时,他与Bn相连,做异或处理,此时可见结果就等于Bn本身,此时Bn输入到一位的全加器中,与An输入相加,在n=0处还加上了M的0,对结果无影响。

2.减法运算

而当M=1时,进行减法运算,此时的Bn与M=1进行异或,得到的就是Bn的反码,而最低位的M=1做一个加数进入到运算中就是:An+(Bn+1),此时的1在最低位。那么就可以看到,其实这时的M作用一就是将[Y]补转换成[-Y]补,使整个电路做补码的减法运算。


(三)判断溢出

而在这里,就是采用的单符号位法来判断是否溢出

(1)单符号位判断法

1.当最高数值位产生进位而符号位不产生进位时,产生上溢;
2. 当最高数值位不产生进位而符号位产生进位时,产生下溢。

简单来讲也就是:

总:只要最高数值位与符号位 “都产生进位或都不产生进位(同号)” 时不溢出,否则溢出。

那么我们从电路图中就可以看出:

1.若Cn与Cn-1同号,则经过异或门结果为0,不溢出;
1.若Cn与Cn-1异号,则经过异或门结果为1,溢出;

Cn我们在前面说过,就是输出的进位。

(2)实例图

实例图
如图所示,这次做的为:(+8) + (+12) = 20 即 001000 + 001100 = 010100 没有溢出

—The End—

猜你喜欢

转载自blog.csdn.net/weixin_41174072/article/details/83270761