2个整数之和(剑指offer)

题目描述

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

def Add(num1, num2):
#    python的位运算比较坑
    while num2:
        sum1 = num1 ^ num2
        carry = (num1 & num2) << 1
        num1 = sum1
        num2 = carry
    return num1

思想是这样的,但是代码通过不了,python的位运算有些坑啊

思路:

举个例子:a=5,b=17

转为二进制

1.各位相加不记位(异或)

b   1 0 0 0 1

a         1 0 1

     1 0 1 0 0

2. 记位(与运算后左移一1位)

当0与0,0 与1,1与0是均为0

1 与 1 时,为10

b   1 0 0 0 1

a         1 0 1

     0 0 0 0 1

左移一位后得到10

3.将上2步的结果相加(异或)

1 0 1 0 0

         1 0

1 0 1 1 0

转为十进制即为22

你可能感兴趣的:(python,面试笔试)