python 位運算實現加減乘除四則運算

2021-09-12 18:43:38 字數 1803 閱讀 8148

寫在前面:加法在測試時遇到了乙個問題,用python在算-4+8時,會無限迴圈

我列印了每一次的sum和carry,原來是carry會越來越大

到後面會非常大

但是我試了下c++發現是可以計算的,它溢位後會變成4+0

1、加法

def

add(a, b)

:# 遞迴

if b==0:

return a

sum= a ^ b # 異或得到兩數之和

carry =

(a & b)

<<

1# 與得到進製,左移後與sum相加

return add(

sum, carry)

defadd

(a, b)

:# 非遞迴

sum=

0 carry =

0while b:

sum= a ^ b

carry =

(a & b)

<<

1 a =

sum b = carry

return a

2、減法

def

sub(a, b)

:return add(a, add(

~b,1

))

3、乘法

def

mul(a, b)

: flag =

true

if(a^b)

>=

0else

false

# 同號時flag為true

if a<0:

a = add(

~a,1

)if b<0:

b = add(

~b,1

) res =

0while b:

if b&1:

res = add(res, a)

a <<=1

b >>=1

return res if flag else add(

~res,

1)

4、除法

def

div(a, b)

: flag =

true

if(a^b)

>=

0else

false

# 同號時flag為true

if a<0:

a = add(

~a,1

)if b<0:

b = add(

~b,1

) res =

0for i in

range(31

,-1,

-1):

if a>=

(b<

: res = add(res,

1<

a = sub(a, b<

return res if flag else add(

~res,

1)

位運算實現加減乘除

include include 加法運算 int add int a,int b 補碼中正數轉負數的原理 int negative int a 減法運算 int sub int a,int b 判斷正負 bool isnegative int a 僅計算正數乘法 int multi help int...

位運算實現加減乘除

關於邏輯右移和算術右移 vs中,對於unsigned型別,是邏輯右移,對於signed,算術右移 加法器的實現 對於不考慮進製的加法 0 0 0 1 0 1 0 1 1 1 1 0 即是異或運算 考慮進製 0 0 1 0 0 0 1 0 1 1 1 即是與運算 以下程式,a即不考慮進製部分,b為進製...

位運算實現加減乘除

位運算的思想可以應用到很多地方,這裡簡單的總結一下用位運算來實現整數的四則運算。1.整數加法 cpp view plain copy intadd inta,intb return a 我的思路主要是利用a 1的位運算就是最左端 從第0位開始向左 連續的1變為0,原先a中為0的位置最低那一位變為1。...