C++で10進数を2進数に変換するプログラムの書き方
コンピューターの内部では、すべてのデータが2進数(基数2)として扱われています。一方、私たちが日常的に使う10進数は「0〜9」の数字を組み合わせた基数10の記数法です。この記事では、C++を使って入力された10進数を2進数へ変換するプログラムの考え方と実装方法を解説します。
10進数から2進数への変換手順
10進数を2進数に変換する基本的な方法は、「2で割った余りを順番に記録していく」ものです。具体的には次の手順で行います。
- まず、変換したい数値を基数である2で割り、商と余りを求めます。余りが0であればその桁は「0」、1であれば「1」として記録します。
- 続いて、得られた商をさらに2で割り、同じように余りを記録していきます。
- 商が0になり、それ以上割れなくなるまでこの操作を繰り返します。
- 最後に、記録したビットを逆順(最後に求めた余りから順に)並べると、それが目的の2進数になります。
具体例:42を2進数に変換する
Input: 42 42 ÷ 2 = 21 … 余り 0 21 ÷ 2 = 10 … 余り 1 10 ÷ 2 = 5 … 余り 0 5 ÷ 2 = 2 … 余り 1 2 ÷ 2 = 1 … 余り 0 1 ÷ 2 = 0 … 余り 1 余りを下から順に読む → Output: 101010
アルゴリズム
ここでは、ビット演算を利用したアプローチを紹介します。整数を右シフトしながら、各ビットが0か1かを判定していく方法です。
Start
Step 1: 10進数を2進数に変換する関数を宣言する
int convert(int num)
ループ(int i = 31 から i >= 0 まで、i を 1 ずつ減らす):
int k = num >> i を設定
もし (k & 1) ならば
「1」を出力
そうでなければ
「0」を出力
Step 2: main() 関数内で
int num = 42 を宣言して設定する
convert(num) を呼び出す
StopC++による実装例
#include <iostream>
using namespace std;
// 10進数を2進数に変換する関数
int convert(int num) {
for (int i = 31; i >= 0; i--) {
int k = num >> i;
if (k & 1)
cout << "1";
else
cout << "0";
}
}
int main() {
int num = 42;
convert(num);
}このコードのポイントは次のとおりです。
num >> i:数値をiビット分右にシフトすることで、調べたいビットを最下位ビットの位置に移動させます。k & 1:1との論理積(AND)を取ることで、最下位ビットが1かどうかを判定します。- iを31から0まで減らしながら処理することで、32ビット整数の全ビットを上位から順に出力できます。
実行結果
上記のコードをコンパイルして実行すると、次のような出力が得られます。
00000000000000000000000000101010
出力は32ビット分固定で表示されるため、先頭には多数の0が並びます。これらの先行する0を除いた「101010」が、42の2進数表現です。
-
C++で10進数を16進数に変換するプログラムの作り方
10進数の数値が入力として与えられたとき、その数値を16進数に変換するのが本記事の目的です。 コンピュータの世界では、16進数は基数16で表現され、10進数は基数10で表現されます。10進数は0〜9の値を使って表されるのに対し、16進数は0〜15の数字を持ちます。そのうち10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、15は「F」として表されます。 10進数から16進数への変換手順 10進数を16進数に変換するには、以下の手順に従います。 まず、与えられた数値を変換先の基数で割ります。たとえば、6789を16進数に変換する場合、基数である16で6789を割り、商を求め
-
C++で2進数を10進数に変換するプログラムの作り方
2進数が入力として与えられたとき、その2進数を10進数へ変換するのが本記事のテーマです。 コンピュータにおける10進数は基数10で表現されます。一方、2進数は基数2で表現され、使用するのは0と1という2つの数字だけです。それに対して10進数では、0から9までの任意の数字を扱うことができます。 2進数を10進数に変換するには、右端の桁から順に各桁の数字を取り出し、2のべき乗(0乗から始まり、桁数-1乗まで1ずつ増加)を掛け合わせます。そして、その掛け算の結果をすべて足し合わせることで、最終的な10進数の値が求まります。 以下は、2進数を10進数に変換する流れを図で表したものです。 具体例 入