题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/、四则运算符号。
5+17分成三步,5对应的二进制101,17的二进制是10001:
1)各位相加但不计进位,得到的结果10100(最后一位两个数都是1,相加的结果是二进制的10,这一步不计进位,因此结果仍然是0)。
2)记下进位,例子相加产生的进位是二进制10
3)前两步的结果相加,得到的结果是10110,转成二进制正好是22。
代码实现:
public class Solution{ public static int add(int num1,int num2){ int sum=0; int carry=0; do{ sum=num1^num2; carry=(num1&num2)<<1; num1=sum; num2=carry; }while(num2!=0); return sum; } public static void main(String[] args){ int sum=add(17,5); System.out.println(sum); } }
posted on
浙公网安备 33010602011771号