python學習特輯——二進制和位運算篇


以前學習java的時候,二進制和位運算只停留在"懂"的程度,從來沒有花時間去推導和總結,作為一個數學系的學生,一直想花點時間做推理證明

java和python關於二進制和位運算的規則差不多,這次就當是補償

一、符號約定                                                                                                      

⌊p⌋:比p小的最大整數,稱為向下取整

⌈p⌉:比 p大的最小整數,稱為向上取整

xix在二進制下的第i位數  

二、二進制表示                                                                                                  

截取的  這位博主 的圖,推導過程使用求和公式來計算,思路差不多

n這樣理解:使得10n <= x 的最大的n值,bi的取值是一個集合

 三、移位運算<< 和 >>                                                                                                            

1、x,⌊x/2⌋,2x在二進制之間的關系

2、推導結論

結論一:x << k = 2kx

結論二:  x >> k = ⌊x/2k⌋ 

結論三:二進制的遞推公式,這里理解下即可,python中用bin(n)函數可以直接打出n的二進制,如bin(123)打印為 0b1111011   

這點同java的

Integer.toBinaryString(n),結果也是以0b開頭

四、按位運算                                                                                                           

位運算符只能適用於整數,總體運算規則為:

  首先把整數轉換為二進制表示形式,按最低位對齊,短的高位補0,然后進行位運算,最后把得到的二進制轉換為十進制結果

以下四種:&,|,^,~,分別是與,或,異或,取反

具體的例子就不說了,記幾個思路清奇的應用

1、判斷奇偶數

def isodd(x):
 return True if (x & 1) else False

2、求下標x和y的中間值

比如二分查找中的mid = (low+high) // 2 = (low+high) >>1

3、異或運算交換a和b的值

a ^= b
b ^= a
a ^= b

 4、異或運算找出單身漢

在2N+1個自然數中,有N個數均出現2次,找出只出現1次的那個自然數

方案:所有數做異或計算,最終的結果就是要找的那個數


免責聲明!

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



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