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

Pythonでセットビットをカウントする方法|リスト内包表記とbin()関数の活用

セットビットとは

セットビットとは、数値を2進数で表現したときに「1」になっているビットのことです。本記事では、与えられた10進数の整数に含まれるセットビットの個数を数える方法を解説します。

たとえば、53を2進数で表すと「110101」になります。この中で「1」となっているビットは4つあるため、53のセットビット数は4です。

# 53 の2進表現: 110101
セットビット数 = 1 の個数
ここでは 4

基本の実装手順

以下のプログラムでは、まず bin() 関数を使って数値を2進数の文字列に変換します。変換結果には先頭に「0b」というプレフィックスが付くため、スライス操作で最初の2文字を取り除きます。その後、forループで各桁を走査し、値が「1」であればカウントを1ずつ増やしていきます。

コード例

value = 59
# 2進数の値を確認
print(bin(value))
# 先頭の2文字(0b)を除去
bitvalue = bin(value)[2:]
print(bitvalue)
count = 0
for digit in bitvalue:
    if digit == '1':
        count = count + 1
print("Length of set bits: ", count)

実行結果

上記のコードを実行すると、次のような結果が得られます。

0b111011
111011
Length of set bits: 5

リスト内包表記でより簡潔に書く

同じ処理は、リスト内包表記(ジェネレータ式)と sum() 関数を組み合わせることで、1行でスマートに記述できます。

value = 59
set_bits = sum(1 for digit in bin(value)[2:] if digit == '1')
print("Length of set bits:", set_bits)  # Length of set bits: 5

比較結果の True / False はそれぞれ 1 / 0 として扱えるため、if句を省略して次のように書くことも可能です。

value = 59
set_bits = sum(digit == '1' for digit in bin(value)[2:])
print(set_bits)  # 5

補足:bit_count() メソッド(Python 3.10以降)

Python 3.10 以降では、int型に bit_count() メソッドが用意されており、セットビットの数をさらに簡単に取得できます。実務では最もシンプルで推奨される方法です。

value = 59
print(value.bit_count())  # 5
  1. C言語で浮動小数点数のセットビット数を数える方法を解説

    この問題では、1つの浮動小数点数が与えられ、その2進表現におけるセットビット(1になっているビット)の数を求める必要があります。例えば、浮動小数点数が 0.15625 の場合、セットビットは6個になります。一般的なCコンパイラでは、単精度浮動小数点形式で数値が表現されるため、メモリ上では次のようなビット列として格納されます。考え方:ポインタとバイト単位での処理浮動小数点数をビット値に変換して調べるには、まず対象の数値をポインタ変数に渡し、そのポインタを char* 型にキャストします。こうすることで、float型のデータを1バイトずつ順番に処理できるようになり、各バイト(char型)ごとのセッ

  2. Pythonで数値の合計ビット数をカウントするプログラムの作成方法

    まず数値を入力し、bin()関数を使ってその数値を2進数に変換します。次に出力される文字列の先頭2文字「0b」を削除し、最後に2進数文字列の長さを計算することで、合計ビット数を求めることができます。 実行例 入力:200 出力:8 解説 200の2進数表現は 11001000 です(8桁=8ビット) アルゴリズム ステップ1:数値を入力する。 ステップ2:bin()関数を使用して、数値を2進数に変換する。 ステップ3:bin()関数は出力文字列の先頭に「0b」という接頭辞を付加するため、 出力された2進数文字列から最初の2文字「0b」を削除する。 ステップ4:2進