位运算模拟加法的核心是将加法拆解为异或得不进位结果、按位与后左移得进位,再递归或循环处理直至进位为0。

可以用位运算模拟加法过程,核心是把加法拆解为“不进位加法”和“进位”两部分,再递归或循环处理进位,直到进位为 0。
原理:异或与与运算结合左移
两个二进制位相加时:
- 异或(^) 得到不考虑进位的结果(0+0=0,0+1=1,1+0=1,1+1=0)
- 按位与(&) 得到哪些位会产生进位(只有 1 & 1 = 1),再左移一位(,就把进位放到正确位置
- 把不进位结果和进位结果再相加——这又是一个加法,所以重复上述过程
递归写法(简洁清晰)
当进位为 0 时,不进位和就是最终结果:
public static int add(int a, int b) {
if (b == 0) return a;
int sum = a ^ b; // 不进位加法
int carry = (a & b)
迭代写法(避免栈溢出)
用 while 循环替代递归,更安全,尤其对大数或深度进位场景:
public static int add(int a, int b) {
while (b != 0) {
int sum = a ^ b;
int carry = (a & b)
注意边界与负数
Java 中 int 是补码表示,上述位运算天然支持负数——因为异或、与、左移在补码下仍保持加法逻辑。但需注意:
- 左移可能造成符号位变化(如 0x40000000
- 溢出(如 Integer.MAX_VALUE + 1)会自动回绕,符合 Java 整数运算规则
- 无需额外判断正负,位运算是对整数二进制形式操作,通用有效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











