/*
* 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
* 思路:不能使用四则运算,就只剩下位运算了。例如17+5
* 17转化成二进制10001,5转化成二进制0101。
* 首先不考虑进位,则1+1=0,1+0=1,0+1=1,0+0=0
* 可以看出这是位^运算(异或),这一步的结果是10100.
*
* 接下来考虑是否产生进位,则1+1=1,0+1=0,1+0=0,0+0=0
* 可以看出这是位&运算(与),这一步的结果是00001,
* 考虑进位要加在前面一位上,所以将结果左移00010
*
* 最后10100^00010=10110,转化为十进制为22
* 注:与&、非~、或|、异或^
*/
public class Add {
public int add(int num1,int num2) {
while(num2 != 0) { //迭代终止条件:进位为0
//不考虑进位
int temp1 = num1 ^ num2;
//获取进位
int temp2 = (num1 & num2) << 1;
num1 = temp1;
num2 = temp2;
}
return num1;
}
public static void main(String[] args) {
System.out.println(new Add().add(5, 17));
}
}