题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
先介绍一下运算符吧
&:按位与。仅有同为1时,结果为1。1&1 = 1,其他结果均为0。
^:按位异或。0 ^ 1 = 1, 1 ^ 1 = 0。
&&:逻辑与。
思路:先对两个数求异或,再将两个数按位与的结果左移一位(补0)。
public int Add(int num1,int num2) {
while(num2 != 0){
int t = num1 ^ num2;
num2 = (num1 & num2) << 1; // 括号不可少
num1 = t;
}
return num1;
}
例:
3 的二进制为 11;2 的二进制为 10;
t = (0011) ^ (0010) = 0001;num2 = ((0011)&(0010)) <<1 = 0100;
t = (0001) ^ (0100) = 0101;num2 = ((01)&(10)) <<1 = 0000;
因此最终结果为101,即5