题目:给定两个整数a和b,要求不能使用+、-、*、/四则运算求两个数的和
方案:1. 四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算
2. 假设两个数的二进制位00101 和 10001,两个数相加的过程就是
第一步:先把二进制的各位相加但不进位,10100;
第二步:记下进位,00010
第三步:把前两步的结果相加,得到10110
3. 分析上述三个过程发现
第一步实际上就是两个数的异或结果,0+0 = 0,0+1 = 1+0 = 1,1+1 = 0;
第二步进位就是两个数&的结果再左移一位:(00101 & 10001) << 1 = 00010
第三步是两数相加,和要求的一样可以递归进行,直到第二个数为0为止。
//循环求两个数的和 int GetSum(int num1, int num2){ while(num2 != 0){ int sum = num1^num2; int carry = (num1&num2)<<1; num1 = sum; num2 = carry; } return num1; } //递归求两个数的和 int GetSum(int num1, int num2){ if(num2 == 0){ return num1; } int sum = num1^num2; int carry = (num1&num2)<<1; return GetSum2(sum, carry); }