位运算练习
此题可以在脑中模拟加法竖式运算,原位相加,需要进位的前一位继续相加
此题使用位运算
异或:原位相加(想一下异或的运算规则,不管是0与0相加还是1与1相加在原位上此位都为0)
(a&b)<<1:进位相加 (进位规则,两个1相加,右移一位)
例如:3+5
3的二进制为011
5的二进制为101
第一步进行一次异或得到结果110
进位运算得到010
继续使用这两个数按照如上规则运算
110与010的异或结果为100
110与010的进位运算结果为100
100与100的异或结果为0000
100与100的进位运算结果为1000
1000的十进制为8,即为结果
int getResult(int a, int b) {
if(a==0)
return b;
if(b==0)
return a;
int x1 = a^b; //(原位相加)
int x2 = (a&b)<<1; //(进位相加)
return getResult(x1,x2);
}