ビット演算子のみを使用して 2 つの整数を加算しますか? 質問する

ビット演算子のみを使用して 2 つの整数を加算しますか? 質問する

C# では、if..else やループなどを使用せずに 2 つの 32 ビット整数の合計を計算することは可能ですか?

つまり、ビット演算 OR ( |)、AND ( &)、XOR ( ^)、NOT ( !)、左シフト ( <<)、右シフト ( >>) のみを使用して実行できるでしょうか?

ベストアンサー1

ここにあなたの楽しみのための例があります

unsigned int myAdd(unsigned int a, unsigned int b)
{
    unsigned int carry = a & b;
    unsigned int result = a ^ b;
    while(carry != 0)
    {
        unsigned int shiftedcarry = carry << 1;
        carry = result & shiftedcarry;
        result ^= shiftedcarry;
    }
    return result;
}

ループは展開できます。 実行回数はオペランドに設定されているビット数によって決まりますが、 の幅を超えることはありませんunsigned intcarryになると0、次の反復では何も変更されません。

おすすめ記事