計算a似袁,b之和低飒。但不能使用 + 或者 -
考點,bit運算符
http://www.reibang.com/p/7e00102bf8ad
http://blog.gainlo.co/index.php/2016/07/19/3sum/
”或“運算 |
int a = 2 //10;
int b = 3 //11;
int c = a|b;
System.out.println(c); //result is : 3 /11
“與”運算 &
int a = 2; //10
int b = 3; //11
int c = a&b;
System.out.println(c); //result is : 2 //10
“異或”運算a^b
int a = 2; //10
int b = 3; //11
int c = a^b;
System.out.println(c); //result is : 1 //01
def getSum(a, b):
return a if b == 0 else getSum(a ^ b, (a & b) << 1)
int add(int a , int b)
{
int sum = a;
/*直到進(jìn)位的結(jié)果為0*/
while(b != 0)
{
sum = a ^ b; /*不考慮進(jìn)位的和藤滥,用異或運算求和蠢络;*/
b = (a & b) << 1; /*只考慮進(jìn)位的產(chǎn)生值*/
a = sum;
}//while
return sum;
}
正常101011 - 100001
101011 ^ 100001 = 001010
101011 & 100001 =100001
101011
- 100001
= 001010(不考慮進(jìn)位)
(101011 & 100001) = 100001(表明有兩個位置有進(jìn)位)
左移一位表示進(jìn)位。000010效览,然后一直加直到完全沒有進(jìn)位无切。
不用額外變量交換兩個整數(shù)的值
a = 101
b = 110
a = a^b = 011
b = a^b = 101
a = a^b = 110