澄清添加两个数字而不使用任何算术运算符

时间:2011-08-07 10:42:23

标签: bit-manipulation recurrence

我理解这个解决方案是如何运作的。

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
}

但作者对此问题的评论为:

  

“我们在这些问题上的第一直觉应该是我们将不得不使用比特。为什么?因为当你带走+符号时,我们还有什么其他选择?另外,这是怎么回事电脑就这么做。“

作者试图暗示什么?

2 个答案:

答案 0 :(得分:3)

他的意思很简单 - 如果你没有+操作,你需要在整数的位级复制行为。您发布的代码与ALU本身的+操作大致相同(算法逻辑单元,即在CPU中进行计算的位置)。

答案 1 :(得分:1)