python之使用位運算子實現加法運算

2022-08-15 22:18:10 字數 1173 閱讀 8529

不使用+號實現加法運算

剛聽到後,一臉懵逼,不使用+號怎麼算?

問了朋友他也沒做這題,不過仔細想了下,不使用+號,是否可以使用其他運算子?比如位運算子

既然說到這,就看下位運算子有哪些,實現是什麼:

&---位與運算子,都為真時才真

|---位或運算子,有乙個為真時則真

^---位異或運算子,不同時為真時則真

~---位反運算子,取反

<<---位左移運算子,向左移動n位

>>---位右移運算子,向右移動n位

上面這些是針對二進位制來運算,針對加法運算,我們需要知道倆件事情:

1、倆個數對應的二進位制位相加應該有如下演算法

0+0=0

0+1=1

1+1=0

1+0=1

這個對應異或運算子^

但這裡又有個問題,這麼向前進一位?這就是第二件事

2、什麼數相加需要進一位?

演算法如下:

0+0=0

0+1=0

1+1=1

1+0=0

也就是在二進位制下,當同時為1時需要進一位

這個可以使用位運算子&,然後在向左移動一位即可實現

這樣1和2分別計算出了位相加和位移的結果,然後這倆個再通過位相加和位運算,直到不能位移了,最後位相加的數才是最後的倆個數相加的值。

具體**如下:

def plusnosignal(x,y):

ex_or = x ^ y

an_mo = (x & y)<<1

while(an_mo):

ex_or_temp = ex_or

an_mo_temp = an_mo

ex_or = ex_or_temp ^ an_mo_temp

an_mo = (ex_or_temp & an_mo_temp)<<1

return ex_or

if __name__ = "__main__":

input_numbers = input("please input two numbers separate by ',':")

x = int(input_numbers.split(',')[0])

y = int(input_numbers.split(',')[1])

print(plusnosignal(x,y))

python運算子 之位運算子

支援的資料型別有數字 集合 set 僅支援 交集 並集 不同集 其他型別都不支援位運算。按位運算子是把數字看作二進位制來計算的。位運算子作用於所有的位上,並且按位運算。python中按位運算法則如下 假設a 60,b 13 操作符描述例項 按位與運算子,當且僅當兩個運算元的某一位都非0時,該位的結果...

運算子之位運算子

右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...

Python位運算子

按位運算子是把數字看作二進位制來進行計算的。python中的按位運算法則如下 下表中變數 a 為 60,b 為 13,二進位制格式如下 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 1101 a b 0011 0001 a 1100 0011運算子 描...