C++で数値の合計ビット数をカウントする方法
はじめに
整数値(例えば num)が与えられたとき、まずその数値を2進数で表現し、続いてその数値が持つ有効なビットの総数を計算することを考えます。
入力 − int number = 50
出力 − 数値の合計ビット数は − 6
説明 − 数値50の2進表現は「110010」です。これを8桁で表すと、先頭に2つの0が付加されて「00110010」となります。したがって、この数値の有効ビット総数は6です。
入力 − int number = 10
出力 − 数値の合計ビット数は − 4
説明 − 数値10の2進表現は「1010」です。8桁で表すと、先頭に4つの0が付加されて「00001010」となります。したがって、この数値の有効ビット総数は4です。
プログラムで使用するアプローチ
- 整数型の変数に数値を入力します。
- ビットの総数を格納するための unsigned int 型の変数 count を宣言します。
- i を「1 << 7」で初期化し、「i > 0」の間、「i = i / 2」で更新しながら FOR ループを実行します。
- ループ内では、num & i が真(TRUE)であれば「1」を表示し、そうでなければ「0」を表示します。
- 数値が0になるまでビットの総数を計算する while ループを開始します。
- ループ内では count の値を1ずつ増やし、number >>= 1(右シフト)を行います。
- 最後に count を出力します。
補足:右シフト演算の仕組み
number >>= 1 は、数値を1ビットだけ右にシフトする操作です。2進数で1ビット右シフトすると数値は半分になるため、この操作を数値が0になるまで繰り返しながらカウントすることで、有効なビット数を求めることができます。
例
#include <iostream>
using namespace std;
// 数値の合計ビット数をカウントする
unsigned int bits(unsigned int number){
unsigned int count = 0;
unsigned i;
// 8ビット表現を表示する
cout << "8-bit digits of " << number << " is: ";
for (i = 1 << 7; i > 0; i = i / 2){
(number & i) ? cout << "1" : cout << "0";
}
// 数値の合計ビット数を計算する
while (number){
count++;
number >>= 1;
}
cout << "\nCount of total bits in a number are: " << count;
}
int main(){
int number = 50;
bits(number);
return 0;
}
出力
上記のコードを実行すると、以下の出力が得られます −
8-bit digits of 50 is: 00110010 Count of total bits in a number are: 6
-
C++とOpenCVで動画の総フレーム数をカウント・取得する方法
はじめにこの記事では、OpenCVを使って動画の総フレーム数を求める方法を解説します。OpenCVを利用すれば、動画の総フレーム数を数えて表示するのは非常に簡単です。ただし、一点だけ注意が必要です。リアルタイム映像(Webカメラの映像など)のフレーム数は数えることができません。リアルタイム映像には決まったフレーム数が存在しないためです。以下のプログラムでは、動画ファイルの総フレーム数をカウントし、コンソール画面に表示します。サンプルコード#include<opencv2/opencv.hpp> #include<iostream> using namespace std
-
【C++】長方形に含まれる正方形の総数を求めるアルゴリズムと実装
縦の長さL、横の幅B(L≥B)の長方形が与えられたとします。この記事では、L×Bの長方形の中にいくつの正方形が含まれているかを効率的に求める方法を解説します。 上の図は3×2の長方形の例です。この長方形には、2×2の正方形が2個、1×1の正方形が6個含まれています。 合計:6+2=8個 規則性を見つける まず、正方形だけで構成されたB×Bの図形について考えてみましょう。 サイズL×Bの長方形には、必ずL×B個の1×1の正方形が含まれます。 含まれる最大の正方形のサイズはB×Bです。 L=B=1の場合:正方形の数=1 L=B=2の場合:正方形の数=1+4=5(2×2が1個、1×1が4個) L