题意
题目所示
知识
-
原反补码
正数原反补相同
负数:- 反码是原码除符号位之外取反
- 补码是反码加一
-
符号位
高位为符号位:1为负数 -
位运算
- 按位& ^ | 涉及负数都转化为补码
-
位运算在加法模拟中的应用/使用技巧
- 用& 和 <<一位 代表进位结果
- 用^求无进位结果
思路
用& 和 <<一位代表进位
用^求无进位结果
循环直至进位为0
public class Solution {
public int Add(int num1,int num2) {
int result = 0;
int carry = 0;
do{
result = num1 ^ num2; //不带进位的加法
carry = (num1 & num2) << 1; //进位
num1 = result;
num2 = carry;
}while(carry != 0); // 进位不为0则继续执行加法处理进位
return result;
}
}