371. Sum of Two Integers(位操作)

Calculate the sum of two integers a and b, but you are not allowed to use the operator+and-


1.位操作符
  • 与 &:两个位都为1,结果才为1
  • 或 | :两个位都为0,结果才为0
  • 异或 ^:两个位相同为0,相异为1
  • 取反 ~: 0变1,1变0
  • 左移 <<:左移若干位,高位丢弃,低位补0
  • 右移 >>:右移若干位,对于无符号数 高位补0;有符号数分为算数右移(补符号位)和逻辑右移(补零)

位操作只用于整形数据

2.算法
class Solution{
public:
  int add (int a,  int b)  { 
    while(a!=0 && b!=0){ 
       int temp = a; 
        a = temp & b; 
        b = b ^ temp; 
        a = a << 1; 
    }  
    return a == 0?b:a; 
  } 
};

你可能感兴趣的:(371. Sum of Two Integers(位操作))