在C#中,是否可以执行两个32位整数的和而不使用if..else,循环等?
也就是说,可以仅使用按位运算符OR(|
),AND(&
),XOR(^
),NOT(!
),左移(<<
)和右移(>>
)完成吗?
最佳答案
这是您娱乐的例子
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
,下一次迭代就不会更改任何内容。关于c# - 仅使用按位运算符将两个整数相加?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4068033/