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

C++で2進数と10進数を相互変換するプログラムの作り方


2進数と10進数の基礎知識

コンピュータシステムの内部では、すべてのデータが2進法(基数2)で扱われます。一方、私たちが日常的に使用しているのは10進法(基数10)です。2進数は「0」と「1」だけを使って数を表現し、10進数は「0」から「9」までの数字を使います。

代表的な10進数と、それに対応する2進数の例は以下の通りです。

10進数2進数
1001010
700111
2511001
1610000

2進数・10進数の相互変換プログラム

以下のC++プログラムは、10進数を2進数に変換する DecimalToBinary 関数と、2進数を10進数に変換する BinaryToDecimal 関数を実装したものです。

#include <iostream>
using namespace std;

void DecimalToBinary(int n) {
    int binaryNumber[100], num = n;
    int i = 0;
    while (n > 0) {
        binaryNumber[i] = n % 2;
        n = n / 2;
        i++;
    }
    cout << "Binary form of " << num << " is ";
    for (int j = i - 1; j >= 0; j--)
        cout << binaryNumber[j];
    cout << endl;
}

int BinaryToDecimal(int n) {
    int decimalNumber = 0;
    int base = 1;
    int temp = n;
    while (temp) {
        int lastDigit = temp % 10;
        temp = temp / 10;
        decimalNumber += lastDigit * base;
        base = base * 2;
    }
    cout << "Decimal form of " << n << " is " << decimalNumber << endl;
}

int main() {
    DecimalToBinary(23);
    BinaryToDecimal(10101);
    return 0;
}

実行結果

Binary form of 23 is 10111
Decimal form of 10101 is 21

プログラムの解説

このプログラムには、DecimalToBinary と BinaryToDecimal という2つの関数があり、それぞれ10進数→2進数、2進数→10進数の変換を担当しています。

DecimalToBinary関数:10進数から2進数への変換

DecimalToBinary 関数では、引数として渡された10進数 n の2進数表現を配列 binaryNumber[] に格納していきます。while ループの中で、n を2で割った余り(0または1)を配列に保存し、n を2で割って次の桁へと進めます。

while (n > 0) {
    binaryNumber[i] = n % 2;
    n = n / 2;
    i++;
}

余りは下位の桁から順に求まるため、最後に for ループで配列を逆順(上位桁から)に出力することで、正しい2進数が得られます。

cout << "Binary form of " << num << " is ";
for (int j = i - 1; j >= 0; j--)
    cout << binaryNumber[j];

BinaryToDecimal関数:2進数から10進数への変換

BinaryToDecimal 関数では、while ループを使って2進数を10進数に変換します。lastDigit には temp の最下位桁(0か1)が入り、base にはその桁の重み(1、2、4、8…と2のべき乗で増えていく値)が格納されます。decimalNumber には、「それまでの合計値 + lastDigit × base」が繰り返し加算されていきます。

while (temp) {
    int lastDigit = temp % 10;
    temp = temp / 10;
    decimalNumber += lastDigit * base;
    base = base * 2;
}

main関数での呼び出し

main() 関数では、これら2つの関数を呼び出して変換処理を実行しています。

DecimalToBinary(23);
BinaryToDecimal(10101);

補足:標準ライブラリを使ったより簡単な方法

C++の標準ライブラリを活用すれば、変換処理をさらに簡潔に記述できます。10進数から2進数への変換には std::bitset が便利で、2進数の文字列を10進数に変換するには std::stoi の第3引数に基数2を指定します。

#include <iostream>
#include <bitset>
#include <string>
using namespace std;

int main() {
    // 10進数 → 2進数
    cout << bitset<8>(23) << endl;      // 出力: 00010111

    // 2進数 → 10進数
    int decimalValue = stoi("10101", nullptr, 2);
    cout << decimalValue << endl;       // 出力: 21
    return 0;
}

学習目的では自前のアルゴリズムを理解することが重要ですが、実務では用途に応じて標準ライブラリを使い分けるのが効率的です。

  1. Pythonで10進数を2進数に変換する方法|再帰処理とbin()関数の実装例

    この記事では、「10進数を2進数に変換する」という問題に対する解決策を、具体的なコード例とともにわかりやすく解説します。 問題の概要 問題: 与えられた10進数の整数を、それに対応する2進数表現へ変換する。 この問題を解くには、大きく分けて2つのアプローチがあります。順番に見ていきましょう。 方法1:再帰を使った実装 10進数を2進数に変換する基本的な考え方は、「数値を2で割り続け、その余りを記録する」ことです。再帰関数を使うと、除算を繰り返しながら余りを自動的に上位の桁から順に出力できます。 サンプルコード def DecimalToBinary(num): if num &g

  2. Pythonで10進数を2進数に変換する方法|再帰と組み込み関数の2つのアプローチ

    この記事では、10進数で表された数値を2進数に変換するPythonプログラムについて、その考え方と具体的な実装方法をわかりやすく解説します。 問題文 ある整数が与えられたとき、その数値を2進数に変換します。例えば、10進数の「35」は2進数では「100011」と表現されます。 アプローチ1:再帰を使った解法 再帰処理を利用すると、シンプルなコードで10進数を2進数に変換できます。基本的な流れは以下の擬似コードのとおりです。 DecToBin(num):     if num > 1:      &n