问题
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析
假设两个整数a=5和b=17,对应的二进制位101和10001。
1. 首先将a和b进行异或运算(作用是,忽视进位),a^b = 10100
2. 然后将a和b进行与运算,并将结果向左移一位,(a&b)<<1=00010
3. 当没有进位时,结束循环
代码
1 public static int add(int x, int y){ 2 int a = x^y, b = (x&y)<<1; 3 while(b!=0){ 4 x = a^b; 5 y = (a&b)<<1; 6 7 a = x; 8 b = y; 9 } 10 return a; 11 }