我理解这个解决方案是如何运作的。
int add_no_arithm(int a, int b) {
if (b == 0) return a;
int sum = a ^ b; // add without carrying
int carry = (a & b) << 1; // carry, but don’t add
return add_no_arithm(sum, carry); // recurse
}
但作者对此问题的评论为:
“我们在这些问题上的第一直觉应该是我们将不得不使用比特。为什么?因为当你带走+符号时,我们还有什么其他选择?另外,这是怎么回事电脑就这么做。“
作者试图暗示什么?
答案 0 :(得分:3)
他的意思很简单 - 如果你没有+
操作,你需要在整数的位级复制行为。您发布的代码与ALU本身的+
操作大致相同(算法逻辑单元,即在CPU中进行计算的位置)。
答案 1 :(得分:1)