C#で数値のセットビット(1ビット)の合計をカウントする方法
セットビットとは
セットビットとは、2進数表現において「1」になっているビットのことです。本記事では、C#を使用して、ある数値に含まれるセットビットの総数をカウントする方法を解説します。
基本的な考え方
例として、10進数の「11」を取り上げます。11を2進数で表すと次のようになります。
1011
1011には「1」のビットが3つ含まれています。この数を求めるには、数値が0になるまでループを回し、最下位ビットが1かどうかを判定しながら、1ビットずつ右へシフトしていく方法が有効です。
while (num > 0) {
cal += num & 1;
num >>= 1;
}サンプルコード
以下は、数値に含まれるセットビットの総数をカウントする完全なC#プログラムです。
using System;
public class Demo {
public static void Main() {
int cal = 0;
// 2進数では 1011
int num = 11;
while (num > 0) {
cal += num & 1;
num >>= 1;
}
// 1011 の中の 1 のビットは 3 個
Console.WriteLine("Total bits: " + cal);
}
}実行結果
Total bits: 3
コードの解説
このプログラムの動作を、各処理ごとに簡単に説明します。
- num & 1 … ビットごとのAND演算により、最下位ビットが1であれば1、0であれば0を返します。これにより、現在調べているビットがセットされているかどうかを判定できます。
- num >>= 1 … 数値を1ビット右にシフトします。これを繰り返すことで、上位のビットを順番に調べることができます。
- while (num > 0) … すべてのビットの確認が終わり、数値が0になった時点でループを終了します。
このように、ビット演算と右シフトを組み合わせたシンプルなwhileループだけで、セットビットの総数を効率的にカウントすることができます。
-
整数のセットビット(1のビット)を数えるC/C++プログラム
本記事では、整数を2進数で表したときに「1」となっているビット(セットビット)の個数を数える方法を解説します。セットビットとは、数値のバイナリ表現における1のビットのことです。たとえば、13は2進数で「1101」と表されるため、セットビットは3個になります。この問題を解くには、数値を右シフトしながら最下位ビット(LSb)を調べ、1であればカウントを増やします。これを数値が0になるまで繰り返すことで、セットビットの総数を求められます。アルゴリズムcountSetBit()begin count := 0 while n is not 0, do if LSb of
-
C言語で浮動小数点数のセットビット数を数える方法を解説
この問題では、1つの浮動小数点数が与えられ、その2進表現におけるセットビット(1になっているビット)の数を求める必要があります。例えば、浮動小数点数が 0.15625 の場合、セットビットは6個になります。一般的なCコンパイラでは、単精度浮動小数点形式で数値が表現されるため、メモリ上では次のようなビット列として格納されます。考え方:ポインタとバイト単位での処理浮動小数点数をビット値に変換して調べるには、まず対象の数値をポインタ変数に渡し、そのポインタを char* 型にキャストします。こうすることで、float型のデータを1バイトずつ順番に処理できるようになり、各バイト(char型)ごとのセッ