Python筆試現場編程:用位運算符實現加法,不允許使用 「+」
使用位運算符的現場筆試題目
我們在很多編碼大賽中也能看到許多高人、大咖們利用二進位數與位運算符展示了各種讓人糾結卻又驚奇的代碼,作為計算機基礎,二進位也成為了很多企業考察招聘人員的重點之一.
今天我們就來看一道要求使用經典的位運算符進行現場編程的筆試題,話不多說,直接看題:
Calculate the sum of two integersaandb, but you are not allowed to use the operator+and-.Example:Givena= 1 andb= 2, return 3.首次看到這樣的題目,相信很多應聘人員都是頭腦迷糊,所以我們今天就來仔細分析下這道現場編程題,到底用什麼位運算符以及怎麼實現加法?
位運算基本理論
一 、位運算符
用位運算實現加法也就是計算機用二進位進行運算,自然離不開位運算符:
二、異或運算
我們所要實現的加法,先用1位數的加法來演示且不考慮進位,如下
很明顯上述的表達式可以用位運算的「^」來代替,如下:
這樣我們就完成了簡單的一位數加法,那麼要進行二位的加法,這個方法可行不可行呢?肯定是不行的,矛盾就在於,如何去獲取進位!
三、定理
我們思考以下問題:
從上面我們可以發現規律:
在位運算中,我們用「
綜上所述我們得到以下兩個表達式:
x^y //執行加法(x&y)
下面我們來做個2位數的加法,不考慮進位:
11+01 = 100 // 本來的二進位演算法// 用推算的表達式計算11 ^ 01 = 10(11 & 01)
由於題目要求我們不能使用加法符號,所以要想別的方法,我們再來看兩位二進位數按上述演算法計算的過程:
10 ^ 10 = 00(10 & 10)
到這裡基本上就得出結論了,其實後面的那個 「00」 已經不需要再計算了,因為第一個表達式就已經算出了結果,所以我們有以下定理:
Python解題
根據上述定理,我們就能實現題目要求,話不多說,直接上代碼
持續更新python編程技巧,助你突破面筆試門檻


※Python入門網路爬蟲之精華版
※為什麼Python如此火?Why Python is so popular?
TAG:Python |