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 int
。carry
になると0
、次の反復では何も変更されません。