题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:不用四则运算,那就只能用位运算了。
- 首先先想一下普通加法的思路:
- 首先是各个对应位相加,不进位
- 计算各个位的进位
- 然后重复计算前两部得到的结果,直达没有进位产生
- 二进制下的位运算的思路
- 不考虑进位,对每一位相加(相当于二进制的异或)。0加0、1加1都是0;0加1、1加0都是1.
2.进位,0加0 、0加1、1加0都不会产生进位,只有1加1会产生进位,所以相当于二进制下的与运算,然后在左移一位。(1加1:与运算得到1,在左移一位得到10) - 把前两步的结果相加,该相加的过程依然是重复前面两步,直到不产生进位为止。
# -*- coding:utf-8 -*-
class Solution:
def Add(self, num1, num2):
# write code here
while num2:
sum = num1 ^ num2
carry = 0xFFFFFFFF&(num1 & num2)<<1
carry = -(~(carry - 1) & 0xFFFFFFFF) if carry > 0x7FFFFFFF else carry
num1 = sum
num2 = carry
return num1
s = Solution()
print s.Add(-1,2)