Python實現(xiàn)不用加減乘除做加法

題目描述:

寫一個函數(shù),求兩個整數(shù)之和,要求在函數(shù)體內(nèi)不得使用+、-、*、/四則運算符號。

本豬豬看見題目是毫無頭緒的,故在此記錄一下大佬們清晰的解題思路(說實話看答案都看了好久才看懂),確實不熟悉二進制的按位運算,本題思路很典型,可以在多個場景下借鑒:

鏈接:https://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215

來源:??途W(wǎng)

首先看十進制是如何做的:5+7=12,三步走

第一步:相加各位的值,不算進位,得到2。

第二步:計算進位值,得到10. 如果這一步的進位值為0,那么第一步得到的值就是最終結(jié)果。

第三步:重復(fù)上述兩步,只是相加的值變成上述兩步的得到的結(jié)果2和10,得到12。

同樣我們可以用三步走的方式計算二進制值相加:5-101,7-111?

第一步:相加各位的值,不算進位,得到010,二進制每位相加就相當(dāng)于各位做異或操作,101^111。

第二步:計算進位值,得到1010,相當(dāng)于各位做與操作得到101,再向左移一位得到1010,(101&111)<<1。

第三步重復(fù)上述兩步, 各位相加010^1010=1000,進位值為100=(010&1010)<<1。? ??

繼續(xù)重復(fù)上述兩步:1000^100 = 1100,進位值為0,跳出循環(huán),1100為最終結(jié)果。


(好奇怪,一模一樣的邏輯,用python寫出來時間復(fù)雜度就超了)



知道了,主要原因還是因為python沒有無符號又移操作,所以需要越界檢查一波~


“~”為取反運算

其實關(guān)于二進制的原碼,補碼,反碼我一直沒有弄明白,還有python的無符號數(shù),越界檢查等等等,這一部分都沒看懂,先留坑,過段時間看明白了好好整理一次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文按照牛客網(wǎng)的順序,??途W(wǎng)劍指offer刷題網(wǎng)址:https://www.nowcoder.com/ta/cod...
    文哥的學(xué)習(xí)日記閱讀 824評論 0 2
  • 網(wǎng)站亂碼問題我們會經(jīng)常碰到,大多見于非英文的中文字符或其他字符亂碼,而且,這類問題常常是因為編碼方式問題,主要原因...
    波段頂?shù)?/span>閱讀 3,347評論 1 9
  • 一個計數(shù)器通常是由一組觸發(fā)器構(gòu)成,該組觸發(fā)器按照預(yù)先給定的順序改變其狀態(tài),如果所有觸發(fā)器的狀態(tài)改變是在同一時鐘脈沖...
    錦穗閱讀 15,220評論 0 6
  • 我們知道,計算機最基本的操作單元是字節(jié)(byte),一個字節(jié)由8個位(bit)組成,一個位只能存儲一個0或1,其實...
    JxYoung閱讀 43,021評論 22 90
  • 回上海一周多了 房子搞定 布置溫馨 最重要的就是找工作啦
    Unichan閱讀 183評論 0 0

友情鏈接更多精彩內(nèi)容