剑指Offer 47 不用加减乘除做加法 题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路 依靠位运算,其实真的很巧妙对于+运算,难点其实就在进位运算;(101+10001)不考虑进位就是=10100;就是异或运算,只有一个1一个0才等于1;然后考虑进位,两个都是1才可能产生进位;也就是与运算;然后在左移一位即可; 代码12345678910111213static public int Add1(int num1,int num2){ int sum; int carry; while (num2!= 0) { sum =num1 ^num2 ; //异或,不算进位的结果 carry = (num1 & num2) <<1; //两个都是1就会进位,然后右移一位; num1 = sum; num2 = carry; //进位如果不是零就可以跳出了 } return num1;} 收获 奇特的加法运算; 2017-04-08 剑指Offer算法