python2.7
没有加法运算符的加法实现, 没有减法运算符实现减法运算
思路:5+17
101 + 10001
步骤一:无进位加法
101+10001 = 10100 (相当于101^10001)
步骤二:只记录进位
101+10001 = 10 (相当于101&10001,再右移一位)
步骤三:10100+10 = 10110 (相当于前两步结果相加)
减法思路:a-b 相当于a+(-b),其中一个数n的负数表示为这个数取反后加1 (~n+1== -n)
#coding:utf-8
def plus(a,b):
if a==0:
return b
if b ==0:
return a
#无进位
no_carry = a ^ b
#进位
carry = (a&b)<<1
c = plus(no_carry,carry)
return c
"""
一个数n 将n取反后加1得到这个数的负数
"""
#a+b ----> a+(-b)
def reduce_t(a,b):
if a == b:
return 0
#得到-b
b = plus(~b,1)
return (plus(a,b))
print(plus(2,3))
print(reduce_t(3,4))