Python 在範圍內統計設定位?


給定一個正數,當轉換為二進位制時,有一系列設定位。二進位制數中的設定位由 1 表示。在本文中,我們將瞭解如何在將給定數字轉換為二進位制值後,獲得該數字中設定位數。

使用 bin 和切片

在以下示例中,我們取一個數字並應用 bin 函式以獲取二進位制值。然後我們對它進行切片以刪除新增到二進位制數中的字首,然後應用 range 函式以獲得設定位的計數。

示例

 線上演示

def SetBits_cnt(n, l, r):
   bin_val = bin(n)

   # Remove '0b' prefixed in bin_val conversion
   bin_val = bin_val[2:]
   print(bin_val)
   # reverse string
   bin_val = bin_val[-1::-1]

   # count all set bit '1' starting from index l-1
   print(len([bin_val[i] for i in range(l - 1, r) if bin_val[i] == '1']))

SetBits_cnt(83,1,6)

輸出

執行上述程式碼,我們得到以下結果 -

1010011
3

使用按位

按位運算子也可用於獲取設定位。在以下示例中,我們首先應用按位運算子,考慮到範圍,然後將其傳遞給另一個僅統計設定位的函式。

示例

 線上演示

def trackBitsInRange(n, l, r):
   # using bitwise operator
   bit_num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1)
   # After bitwise operation count the set bits
   return trackSetBits(n & bit_num)

def trackSetBits(n):
   count = 0
   while (n):
      n &= (n - 1)
      count = count + 1
   return count

print(trackBitsInRange(83,1,6))

輸出

執行上述程式碼,我們得到以下結果 -

3

更新於: 12-Jan-2021

220 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.