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 に答える