位运算-Java
记得以前用大数运算的时候也是位运算实现的,现在用位运算实现加减乘除
- 加法运算
a + b
//a + b的和等于异或 +进位,进位为0就说明运算结束了
whlie(b != 0){
int carry = (a & b) << 1;
a ^= b;
b = c;
}
- 减法运算
a - b
b = ~(b - 1); //补码
a + b;
- 乘法运行(需要考虑符号, a ^ b < 0即异号)
a * b;
int ans;
while (b > 0){
//不仅可以判断奇数偶数,也可以判断尾数
if((b & 1) == 1){
ans += a;
}
a <<= 1;
b >>= 1;
}
- 除法运行(就是不断相减即可,同样也要考虑符号问题)剑指Offer66题里面不能用除法,因为遇到0的话就全是0了
a / b;
int ans = 0;
while(a >= b){
a -= b;
ans++;
}