上图是一个典型的全加器。
什么是全加器?
全加器就是考虑进位的加法运算器。
一位全加器有Ci-1,Ai,Bi,Si,Ci。
输入端有Ci-1,Ai,Bi。
Ci-1:前一次运算后是否有进位,有进位则为1,无进位则为0.
Ai:被加数
Bi:加数
输出端:Si,Ci
Si:输出结果
Ci:输出本次运算的进位
一开始的运算Ci-1=0,因为之前的运算没有产生进位,直至Ai=Bi=1时产生进位。
即:
0+0输出结果Si=0,没有进位,所以Ci=0.
1+0输出结果Si=1,没有进位,所以Ci=0.
1+1,根据二进制运算法则,进位,Ci=1,进位后输出结果清零,Si=0
以此规则按照上图进行运算。
Si=Ai⊕Bi⊕Ci-1
我在这边用十位进制给大家验算一遍,可能大家会更清楚一些。
首先明确以下几点:
输入的Ci是指上一步有没有进位
输出的Ci是相加后有没有进位
以45+55为例进行展开
注意a、b必须是同等级的位,个位、十位、百位,而不是a=45,b=55
也就是说个位时a=5,b=5
十位时a=4,b=5
大多数人来问我主要是输入输出的Ci不知道是怎么参加运算的。
从最低位个位算起,个位的计算是Ci-1=0,a=5,b=5,得到Si=0,Ci=1
因为一开始就只有被加数a=5和加数b=5,相加得10,十进制进位,结果为0,进位为1
这个个位运算结果Si变成了结果的个位(S个),Ci由于不是0,要参与下一位的计算
十位Ci-1=1,a=4,b=5,Ci-1+a+b=1+4+5=10,Si=0,Ci=1
十位计算时被加数a=4和加数b=5,由于个位计算有进位,相加得10,十进制进位,结果为0,进位为1
十位的运算结果Si变成了结果的十位(S十),Ci由于不是0,要参与下一位的计算
虽然下一位百位的a,b都是0,但由于Ci-1不是0,还要继续运算百位
Ci-1=1,a=0,b=0,Ci-1+a+b=1,Si=1,Ci=0
百位计算时被加数a=0和加数b=0,由于十位计算有进位,相加得1,十进制不进位,结果S百=1,进位标记Ci=0
由于后面位都是0,Ci=0,停止运算。得到最终结果 S百S十S个 = 100
二进制也是同样的计算,只是逢二进一而不是10进制