1

我了解此解决方案的工作原理。

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
}

但是作者对这个问题的评论是:

“对于此类问题,我们的第一直觉应该是我们将不得不使用位。为什么?因为当你去掉 + 号时,我们还有什么其他选择?另外,这就是计算机的工作方式。”

作者试图暗示什么?

4

2 回答 2

3

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

于 2011-08-07T10:46:31.923 回答
1

是的,这就是使用的 - http://en.wikipedia.org/wiki/Adder_%28electronics%29

于 2011-08-07T11:57:25.397 回答