binary - 仅使用逻辑运算符的两个 int 之和
问题描述
到目前为止,我找到了获取两位和一个进位之和的进位的方法:int carry = a&b|a&c|b&c
;
我找到了获得两位和一位进位之和的最终输出的方法int output = a^b^c
:
我还找到了一种方法来获取 int 的总和并添加一个:addOne(2) = 3
例如。
我知道我需要使用这三种方法(carry(a,b,c)、outpout(a,b,c)、addOne(x))来获得两位的总和。
解决方案
对于一位(c0
是进位):
s0= a0^b0^c0;
cout0 = (a0&b0)|(c0&(a0^b0));
将两个全加器链接在一起(cout 到 cin)以获得 2 位数字:
c0 = 0;
s0 = a0^b0^c0;
cout0 = (a0&b0)|(c0&(a0^b0));
s1 = a1^b1^cout0;
cout1 = (a1&b1)|(cout0&(a1^b1));
我将把简化作为练习留给读者(什么是A XOR 0
,A AND 0
等?)。
您还可以查看进位超前加法器的逻辑,但由全加器组成的波纹进位加法器是最容易掌握的。