剑指offer,不用加减乘除做加法,python
剑指offer有一道题:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
出题人应该 是想用位运算,但是python对位运算不是很友好,看到一个人用python写了程序,运行没有问题,但是对位运算一直比较懵,谁能帮忙解释以下:
1.0xffffffff=0,用来判断符号吗?为什么第五行不加& 0xFFFFFFFF,运行时间就超长
2. a<=0x7FFFFFFF应该是判断它是不是超过了max_int吧,但是如果a超过了max_int,后面的~(a^0xFFFFFFFF)是什么意思呢?
链接:https://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215
来源:牛客网
来源:牛客网
# -*- coding:utf-8-*-
classSolution:
def Add(self, a, b):
while(b):
a,b = (a^b) &0xFFFFFFFF,((a&b)<<1) &0xFFFFFFFF
returnaifa<=0x7FFFFFFFelse~(a^0xFFFFFFFF)