2011-08-07 11 views
1

このソリューションの仕組みを理解しました。算術演算子を使用せずに2つの数値を追加する際の説明

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 
} 

しかし、この問題を超える著者のコメント:。

「このような問題で私たちの最初の本能は、我々はビットで動作する必要があるとしているということであるべき理由ので、ときあなたは? +記号を取り除いて、他に何を持っているのだろうか?さらに、それがコンピュータのやり方だ」

著者は何を暗示しようとしていますか?

答えて

3

彼が意味することは非常に簡単です。+操作をしていない場合は、整数のビットレベルで動作を複製する必要があります。投稿したコードは、+操作がネイティブにALU(アルゴリズム論理ユニット、CPUで計算が行われる場所)で実行されるものとほぼ同じです。

+0

ありがとう –

関連する問題