用到的位运算符
1. &运算
二进制每一位全1为1,否则为0
2. ^运算
二进制每一位不同为1,相同为0
代码实现
public static int bitAdd(int a,int b) {
int sum = 0;
while(b != 0) {
sum = a ^ b;
b = (a & b) << 1;
a = sum;
}
return sum;
}
public static void main(String[] args) {
System.out.println(bitAdd(1,2));
}
详解:
(a ^ b
):此操作用于计算 a
和 b
相同位置上位元不同(即相异)的位置,并将结果存入 sum
。这一步相当于进行“无进位”加法。
(a & b
):此操作用于找出 a
和 b
相同位置上位元都为 1 的位置。
((a & b) << 1
):将上述找到的相同位置为 1 的位元向左移动一位,相当于将它们对应的值相加时产生的进位。