C++で8進数と10進数を相互変換するプログラムの書き方
8進数と10進数の基礎知識
コンピュータシステムにおいて、8進数は基数8の記数法(八進法)で表現され、10進数は基数10の記数法(十進法)で表現されます。私たちが日常的に使う数字はほとんどが10進数ですが、コンピュータの世界では8進数も重要な役割を果たします。
10進数とそれに対応する8進数の例は以下の通りです。
| 10進数 | 8進数 |
|---|---|
| 10 | 12 |
| 70 | 106 |
| 25 | 31 |
| 16 | 20 |
8進数⇔10進数 相互変換プログラム
以下が、10進数を8進数に変換するプログラム、および8進数を10進数に変換するプログラムです。
サンプルコード
#include <iostream>
#include <cmath>
using namespace std;
void DecimalToOctal(int decimalNum) {
int octalNum = 0, placeValue = 1;
int dNo = decimalNum;
while (decimalNum != 0) {
octalNum += (decimalNum % 8) * placeValue;
decimalNum /= 8;
placeValue *= 10;
}
cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;
}
void OctalToDecimal(int octalNum) {
int decimalNum = 0, power = 0;
int oNo = octalNum;
while(octalNum != 0) {
decimalNum += (octalNum%10) * pow(8,power);
++power;
octalNum/=10;
}
cout<<"Decimal form of octal number "<<oNo<<" is "<<decimalNum<<endl;
}
int main() {
DecimalToOctal(20);
OctalToDecimal(32);
return 0;
}実行結果
Octal form of decimal number 20 is 24 Decimal form of octal number 32 is 26
上記のプログラムでは、DecimalToOctal関数が10進数を8進数に変換し、OctalToDecimal関数が8進数を10進数に変換しています。
DecimalToOctal関数:10進数から8進数への変換
DecimalToOctal関数では、最初に変数octalNumを0で初期化します。変数placeValueは、数値の中で各桁が位置する場所を表します。octalNumの値はwhileループによって求められます。
whileループの各反復処理では、decimalNumを8で割り、その余り(剰余)にplaceValueを掛けます。この値を直前のoctalNumの値に加算します。同時にdecimalNumを8で割った商を再び格納し、placeValueには10を掛けます。
この処理を示すコードスニペットは以下の通りです。
while (decimalNum != 0) {
octalNum += (decimalNum % 8) * placeValue;
decimalNum /= 8;
placeValue *= 10;
}8進数の値(octalNum)が求まったら、それを出力します。該当するコードは以下の通りです。
cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;
OctalToDecimal関数:8進数から10進数への変換
OctalToDecimal関数では、whileループの各反復処理において、octalNumを10で割った余りに8のべき乗(pow(8, power))を掛け、その値を直前のdecimalNumの値に加算します。その後、powerを1増やし、octalNumを10で割ります。この処理は以下のように実装されています。
while(octalNum != 0) {
decimalNum += (octalNum%10) * pow(8,power);
++power;
octalNum/=10;
}decimalNumの値が求まると、それが出力されます。該当するコードは以下の通りです。
cout<<"Decimal form of octal number "<<oNo<<" is "<<decimalNum<<endl;
main関数の処理
main()関数には、必要な値を引数として渡してDecimalToOctal()関数とOctalToDecimal()関数を呼び出す処理だけが含まれています。以下のコードスニペットで確認できます。
DecimalToOctal(20); OctalToDecimal(32);
-
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で割り、同じように余