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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP