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

在C#中,是否有可能执行两个32位整数的总和而不使用像if,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语句

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

 public static int getSum(int p, int q) { int carry=0, result =0; for(int i=0; i<32; i++) { int n1 = (p & (1<<(i)))>>(i); //find the nth bit of p int n2 = (q & (1<<(i)))>>(i); //find the nth bit of q int s = n1 ^ n2 ^ carry; //sum of bits carry = (carry==0) ? (n1&n2): (n1 | n2); //calculate the carry for next step result = result | (s<<(i)); //calculate resultant bit } return result; } 

以32位作为int需要32位。 谢谢!!!

 static int binaryadd(int x, int y) { while (x != 0) { int c = y & x; y = y ^ x; x = c << 1; } return y; } 
  int b = 25; for (int t = 128; t > 0; t = t / 2) { if ((b & t) != 0) Console.Write("1 "); if ((b & t) == 0) Console.Write("0 "); } Console.WriteLine(); //b = (sbyte)~b; int e = 22; for (int t = 128; t > 0; t = t / 2) { if ((e & t) != 0) Console.Write("1 "); if ((e & t) == 0) Console.Write("0 "); } Console.WriteLine(); int c = b | e; for (int t = 128; t > 0; t = t / 2) { if ((c & t) != 0) Console.Write("1 "); if ((c & t) == 0) Console.Write("0 "); }