不使用+號實現加法運算
剛聽到後,一臉懵逼,不使用+號怎麼算?
問了朋友他也沒做這題,不過仔細想了下,不使用+號,是否可以使用其他運算子?比如位運算子
既然說到這,就看下位運算子有哪些,實現是什麼:
&---位與運算子,都為真時才真
|---位或運算子,有乙個為真時則真
^---位異或運算子,不同時為真時則真
~---位反運算子,取反
<<---位左移運算子,向左移動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運算子 描...