全加器进位Si,Ci表达式的理解
第i位上的和:SI=Ai⊕Bi⊕Ci-1
第I位上的进位:CI=AiBI+(Ai⊕Bi)Ci-1
Si
两个二进制数相加,某一位上和的结果有两种1和0;那么在什么样的情况下是0,什么样的情况下是1呢?
上图中的两个二进制数11001100
和10101010
竖式计算时,可有如下步骤:
再结合十进制数相加辅助理解,某一位上的数值=两个数对应位置上的数字相加,再加上进位,进位可能0,可能1;
那么,同样的二进制中,某一位上的数值也是=两个数对应位置上的数字相异或
,再与进位异或
,进位可能0,可能1;
异或的结果=奇数个1的话,就为1;偶数个1的话,就为0;满足竖式计算时的思路。
Ci
两个二进制数相加,某一位上产生进位的结果有两种1和0;那么在什么样的情况下是0,什么样的情况下是1呢?也就是说,什么样的情况下会产生进位呢?
同样结合十进制数相加思考,产生的进位有两种情况, ①本位相加已经大于等于10;②本位相加未超出10,加上来自于低位的进位1后,大于等于10;
所以来看CI=AiBI+(Ai⊕Bi)Ci-1这个表达式;
AiBI:只有AI、BI均为1
时,该项才为1;类似于十进制中的本位相加大于等于10的情况,在这里二进制就是大于等于2;
Ai⊕BI:当AI、BI有且只有一个为1
时,该项才为1;
也就是说+两边的表达式,AiBI和(Ai⊕Bi)Ci-1不会同时为1;
AiBI=1时,(Ai⊕Bi)Ci-1一定0,此时因为本位相加大于等于2,所以产生进位;
AiBI=0时,Ai⊕BI=1,若Ci-1=1,那么(Ai⊕Bi)Ci-1=1,此时对应着本位相加未超出2,加上来自于低位的进位1后,大于等于2的情况;若Ci-1=0,那么此位就没有向高位产生进位,CI=0;
所以CI的表达式含义就是本位相加大于等于2
或本位相加为1,加上来自低位的进位后大于等于2
;
简单点,进位CI=(Ai+BI+CI-1)mod 2