在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/

10-09 20:44