我相信计算机必须借助于带有按位左移操作符的异或来实现它。对吗?
这是java
中的实现public class TestAddWithoutPlus {
public static void main(String[] args) {
int result = addNumberWithoutPlus(6, 5);
System.out.println("result is " + result);
}
public static int addNumberWithoutPlus(int a, int b) {
if (a == 0) {
return b;
} else if (b == 0) {
return a;
}
int result = 0;
int carry = 0;
while (b != 0) {
result = a^b; // SUM of two bits is A XOR B
carry = (a&b); // CARRY is AND of two bits
carry = carry << 1; // shifts carry to 1 bit to calculate sum
a=result;
b=carry;
}
return result;
}
}
答案 0 :(得分:2)
我将回答一个典型的位并行处理器,如个人计算机,微控制器等所示。这不适用于bit-serial architecture,这在某些类型的特殊情况下更常见DSP和某些FPGA设计。
通常情况并非如此,因为对于窄宽度(如32或64位),adder circuit比显示的串行加法更有效,因为它可以异步完成添加,而不是多个时钟周期。
然而,基本纹波进位加法器的原理是相同的 - 最低有效位的加法器计算结果的一位和进位位,进位到对应于下一位的全加器作为进位等,如图所示:
来源:Wikimedia Commons,用户cburnett,在Creative Commons 3.0 Share-like
然而,实际上,来自LSB加法器的进位可能需要一直传播到MSB加法器这一事实对性能造成了限制(由于传播延迟),因此可以使用各种先行方案。 p>