defadd(a,b):# 32 bits integer maxMAX=0x7FFFFFFF# 32 bits interger minMIN=0x80000000# mask to get last 32 bitsmask=0xFFFFFFFFifb==0:# a + 0 = areturnaifa<=MAXelse~(a^mask)s=a^bc=(a&b)<<1a=s&maskb=c&maskreturnadd(a,b)print(add(1,-1))
繰り返しで書くと次の通り.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
defadd(a,b):# 32 bits integer maxMAX=0x7FFFFFFF# 32 bits interger minMIN=0x80000000# mask to get last 32 bitsmask=0xFFFFFFFFwhileb:s=a^bc=(a&b)<<1a=s&maskb=c&maskreturnaifa<=MAXelse~(a^mask)print(add(1,-1))