16進数を2進数に変換するC++プログラムの実装方法
16進数と2進数の基本
コンピュータの世界では、16進数は基数16で表現される記法です。扱う数字は0〜15ですが、10以上の値はアルファベットで表され、10はA、11はB、12はC、13はD、14はE、15はFに対応します。一方、2進数は「0」と「1」の2種類の数字のみを使用する基数2の記法です。
16進数を2進数へ変換するときは、各桁(1文字)をそれぞれ4ビットの2進数に置き換え、それらを左から順に連結します。こうすることで、元の16進数に対応する完全な2進数が得られます。
変換例
たとえば、入力「123B」を2進数に変換する場合は以下のようになります。
入力 : 123B 1 → 0001 2 → 0010 3 → 0011 B(11) → 1011 出力 : 0001001000111011
アルゴリズム
プログラムの処理の流れは次のとおりです。
- 16進数の文字列を受け取り、2進数へ変換する関数
void convert(string hexa)を用意します。 - 変数
i = 0を初期化し、文字列の終端に達するまで1文字ずつループ処理を行います。 switch文で現在の文字を判定し、対応する4ビットの2進数を出力します。
'0'→0000、'1'→0001、'2'→0010、'3'→0011、'4'→0100、'5'→0101、'6'→0110、'7'→0111、'8'→1000、'9'→1001、'A'/'a'→1010、'B'/'b'→1011、'C'/'c'→1100、'D'/'d'→1101、'E'/'e'→1110、'F'/'f'→1111- 有効な16進数の文字以外が含まれていた場合は、エラーメッセージを表示します。
main()関数内で文字列"123B"を定義し、convert()を呼び出して結果を表示します。
C++による実装
以下が実際のC++コードです。
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
// 16進数を2進数に変換する関数
void convert(string hexa){
long int i = 0;
while (hexa[i]){
switch (hexa[i]){
case '0':
cout << "0000";
break;
case '1':
cout << "0001";
break;
case '2':
cout << "0010";
break;
case '3':
cout << "0011";
break;
case '4':
cout << "0100";
break;
case '5':
cout << "0101";
break;
case '6':
cout << "0110";
break;
case '7':
cout << "0111";
break;
case '8':
cout << "1000";
break;
case '9':
cout << "1001";
break;
case 'A':
case 'a':
cout << "1010";
break;
case 'B':
case 'b':
cout << "1011";
break;
case 'C':
case 'c':
cout << "1100";
break;
case 'D':
case 'd':
cout << "1101";
break;
case 'E':
case 'e':
cout << "1110";
break;
case 'F':
case 'f':
cout << "1111";
break;
default:
cout << "\n無効な16進数の文字です : " << hexa[i];
}
i++;
}
}
int main(){
string hexa = "123B";
cout << "\n等価な2進数値 : ";
convert(hexa);
return 0;
}
実行結果
等価な2進数値 : 0001001000111011
まとめ
このプログラムは、16進数の文字列を先頭から1文字ずつ調べ、各文字を4ビットの2進数に対応させて順番に出力することで変換を実現しています。文字列の長さを n とすると、時間計算量は O(n)、追加のメモリ消費は O(1) で済みます。また、大文字・小文字どちらの英字(A〜F / a〜f)にも対応しているため、さまざまな入力形式に柔軟に対応できる点も魅力です。
-
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++で10進数を2進数に変換するプログラムの書き方
コンピューターの内部では、すべてのデータが2進数(基数2)として扱われています。一方、私たちが日常的に使う10進数は「0〜9」の数字を組み合わせた基数10の記数法です。この記事では、C++を使って入力された10進数を2進数へ変換するプログラムの考え方と実装方法を解説します。10進数から2進数への変換手順10進数を2進数に変換する基本的な方法は、「2で割った余りを順番に記録していく」ものです。具体的には次の手順で行います。まず、変換したい数値を基数である2で割り、商と余りを求めます。余りが0であればその桁は「0」、1であれば「1」として記録します。続いて、得られた商をさらに2で割り、同じように余