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


 

一哥們去筆試,回來后跟我說了一通面試題,其中有一道題讓我很感興趣:

不使用+號實現加法運算

 

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

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

 

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

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

|---位或運算符,有一個為真時則真

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

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

<<---位左移運算符,向左移動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))

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM