Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonは範囲内のセットビットをカウントしますか?


2進数に変換されたときに指定された正の数には、いくつかのセットビットがあります。 2進数のセットビットは1で表されます。この記事では、2進数に変換された後、特定の数値のセットビットの数を取得する方法を説明します。

ビンの使用とスライス

次の例では、数値を取得し、bin関数を適用してバイナリ値を取得します。次に、それをスライスして2進数に追加されたプレフィックスを削除し、範囲関数を適用してセットビットの数を取得します。

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

  1. 範囲内の未設定ビットをカウントするPythonプログラム。

    正の数とビットの範囲が与えられます。私たちのタスクは、範囲内の未設定ビットをカウントすることです。 Input : n = 50, starting address = 2, ending address = 5 Output : 2 2〜5の範囲に「2」の未設定ビットがあります。 アルゴリズム Step 1 : convert n into its binary using bin(). Step 2 : remove first two characters. Step 3 : reverse string. Step 4 : count all unset bit 0 start

  2. 数値の合計ビットをカウントするPythonプログラムを作成しますか?

    最初に数値を入力し、bin()関数を使用してこの数値をバイナリに変換し、次に出力文字列の最初の2文字「0b」を削除し、次にバイナリ文字列の長さを計算します。 例 Input:200 Output:8 説明 Binary representation of 200 is 10010000 アルゴリズム Step 1: input number. Step 2: convert number into its binary using bin() function. Step 3: remove first two characters ‘0b’ of output binary st