剑指Offer(五)——位运算

1、(JZ48)不用加减乘除做加法

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

#位运算
# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        a, b = num1, num2
        while b != 0:
            a, b = a ^ b, (a & b) << 1
            a &= 0xFFFFFFFF
        return a if a >> 31 <= 0 else a ^ (~0xFFFFFFFF)
# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        a, b = num1, num2
        while b != 0:
            a,b = (a^b) & 0xFFFFFFFF,((a&b)<<1) & 0xFFFFFFFF
        return a if a<=0x7FFFFFFF else ~(a^0xFFFFFFFF)

思路:位运算

(1)两个数异或:相当于每一位相加,而不考虑进位

(2)两个数相与,并左移一位:相当于求得进位;

(3)将上述两步的结果相加

python需要越界检查。

猜你喜欢

转载自blog.csdn.net/caicai0001000/article/details/114415018