只使用按位运算符添加两个整数?
在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?