知识点:数学;位运算函数
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。code
输入: a = 1, b = 1 输出: 2
不能用四则运算,那其实能够用的只要逻辑运算和位运算了,这里很明显要用位运算。关键怎么用呢。leetcode
咱们列一张表其实就能够发现,两个元素若是没有进位也就是否是对应位都是1的时候,相加就和异或运算的结果是同样的;若是有进位,也就是两位上都是1的时候,相加就是二者相与而后左移一位;因此咱们就能够作了。get
能够依次获得两个数的异或结果和与结果;
sum=a+b=sum+carry;可是求得这两个后仍是要加,因为不能用加法,因此能够再求这两个结果的与结果和异或结果。直到最后进位的为0,sum就是答案了。数学
class Solution { public int add(int a, int b) { int sum = a^b; //无进位的; int carry = (a&b) << 1; //有进位的; while(carry != 0){ //进位为0的时候返回sum; a = sum; b = carry; sum = a^b; carry = (a & b) << 1; } return sum; } }