371 Sum of Two Integers

2017-11-14  本文已影响0人  crazydane

计算a,b之和。但不能使用 + 或者 -

考点,bit运算符
http://www.jianshu.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;
    
    /*直到进位的结果为0*/
    while(b != 0)
    {
        sum = a ^ b; /*不考虑进位的和,用异或运算求和;*/
        b = (a & b) << 1; /*只考虑进位的产生值*/
        a = sum;
    }//while
    return sum;
}

正常101011 - 100001
101011 ^ 100001 = 001010
101011 & 100001 =100001

101011

不用额外变量交换两个整数的值

a = 101
b = 110
a = a^b = 011
b = a^b = 101
a = a^b = 110

上一篇下一篇

猜你喜欢

热点阅读