只使用按位运算符添加两个整数?

在C#中,是否有可能执行两个32位整数的总和而不使用ifs,elses,loops等东西?

也就是说,只能使用按位运算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 ,下一次迭代不会改变任何东西。


尝试这个:

    private int add(int a, int b) {
        if(b == 0)
            return a;

        return add( a ^ b, (a & b) << 1);
    }

编辑:更正if语句


想想如何一点一滴地发生。 移动这些值以依次获取每个操作数的每一位,然后查看这两个位的四个可能值,并计算出结果位应该是什么以及是否需要担心一个进位位。 然后看看如何使用按位运算来计算结果和进位。

链接地址: http://www.djcxy.com/p/57569.html

上一篇: Add two integers using only bitwise operators?

下一篇: How do I use UIPageViewController to load separate XIBs?