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

C++で数値を2進数表現に変換する方法【再帰処理を解説】

2進数(バイナリ数)とは、0と1という2つの数字のみで構成される数値表現のことです。例えば、01010111 のような形で表されます。コンピュータの内部では、すべてのデータがこの2進数として扱われています。

ある数値を2進数形式で表現する方法はいくつかあります。本記事では、代表的な「再帰を使った方法」を中心に解説します。

再帰を用いた方法

この方法では、再帰呼び出しを利用して数値を2進数形式で表現します。数値を2で割り続けながら、その余りを順に出力していくことで、2進数表現を得ることができます。

アルゴリズム

ステップ1: 数値が1より大きい場合、ステップ2とステップ3を実行します。
ステップ2: 数値をスタックにプッシュします。
ステップ3: 引数を number/2 として関数を再帰的に呼び出します。
ステップ4: スタックから数値をポップし、2で割った余りを出力します。

コード例

#include<iostream>
using namespace std;
void tobinary(unsigned number){
    if (number > 1)
        tobinary(number/2);
    cout << number % 2;
}
int main(){
    int n = 6;
    cout<<"The number is "<<n<<" and its binary representation is ";
    tobinary(n);
    n = 12;
    cout<<"\nThe number is "<<n<<" and its binary representation is ";
    tobinary(n);
}

実行結果

The number is 6 and its binary representation is 110
The number is 12 and its binary representation is 1100

仕組みの解説

このプログラムでは、関数 tobinary が再帰的に呼び出されます。例えば n = 6 の場合、処理の流れは次のようになります。

tobinary(6) → tobinary(3) → tobinary(1) と呼び出しが深くなり、その後呼び出しから戻りながら「6 % 2 = 0」「3 % 2 = 1」「1 % 2 = 1」の順に出力されます。その結果、画面には「110」が表示されます。同様に n = 12 の場合は「1100」と出力されます。

補足: std::bitset を使った方法

C++では、標準ライブラリの std::bitset を使うことで、より簡単に2進数表現を取得することもできます。桁数を指定できるため、固定幅のビット表現が必要な場合に便利です。

#include<iostream>
#include<bitset>
int main(){
    int n = 6;
    std::cout << std::bitset<8>(n) << std::endl; // 出力: 00000110
    return 0;
}

再帰処理はアルゴリズムの学習に最適であり、std::bitset は実務で手軽に使える方法です。目的に応じて使い分けるとよいでしょう。

  1. C++で二分木がSumTree(総和木)かどうかを判定する方法

    ここでは、与えられた二分木が「SumTree(総和木)」であるかどうかを判定する方法を解説します。まずは、SumTreeとはどのような木なのかを確認しておきましょう。 SumTreeとは SumTreeとは、すべての内部ノードが「左の子と右の子の値の合計」を保持する特殊な二分木です。木の根(ルート)には、それより下位に存在する全要素の合計値が格納されます。なお、葉ノードのみからなる木や空の木も、定義上はSumTreeとみなされます。以下はSumTreeの一例です。 例えば上図の木では、根の値26が左部分木(10 + 4 + 6 = 20)と右部分木(3 + 3 = 6)の合計と一致しており

  2. C++で8進数を2進数に変換するプログラムの書き方【サンプルコード付き】

    コンピュータシステムにおいて、2進数は2を基数とする記数法(二進法)で表現され、8進数は8を基数とする記数法(八進法)で表現されます。2進数は0と1のみを使用するのに対し、8進数は0から7までの数字を使用します。 2進数とそれに対応する8進数の例は以下の通りです。 2進数8進数 0110115 001015 1011026 0101012 以下に、8進数を2進数に変換するC++プログラムを示します。 サンプルプログラム #include <iostream> #include <cmath> using namespace std; int OctalToBi