
LeetCode 371. 两整数之和题意不使用运算符 和 -计算两个整数 a、b 之和。思路位运算模拟加法加法的两个部分无进位相加a ^ b异或相同为 0不同为 1进位(a b) 1与运算后左移一位不断将「无进位和」与「进位」相加直到进位为 0。Java 的 int 是 32 位补码溢出会自动截断因此负数同样适用。Java 实现classSolution{publicintgetSum(inta,intb){while(b!0){intcarry(ab)1;// 计算进位aa^b;// 无进位相加bcarry;// 把进位加到下一轮}returna;}}示例以 a 1, b 2 为例轮次 a b carry初始 1 2 -1 1 ^ 2 3 (1 2) 1 0 0b 0返回 3。以 a -1, b 1 为例循环若干轮后进位也会变为 0最终返回 0。复杂度维度 复杂度时间 O(1)最多循环 32 次空间 O(1)递归写法可选classSolution{publicintgetSum(inta,intb){if(b0)returna;returngetSum(a^b,(ab)1);}}注意点· 1 后可能溢出但 Java 的 int 会自动丢弃高位正好符合补码加法。· 循环条件用 b ! 0不要写成 b 0否则负数进位会出错。