C言語での8進数変換
目次
- 8進数とは?
- 8進数の変換方法
- 10進数から8進数への変換
- 8進数から10進数への変換
- 2進数から8進数への変換
- 8進数から2進数への変換
- 16進数から8進数への変換
- 8進数から16進数への変換
- printfとscanfでの8進数の扱い
- 練習問題
8進数とは?
8進数(octal)は、0から7までの数字を使って数を表現する数値システムです。コンピュータの世界では、2進数(binary)との相性が良く、特に低レベルのプログラミングで使用されます。
8進数の変換方法
8進数の変換は、他の数値システム(10進数、2進数、16進数)との相互変換が重要です。それぞれの方法について詳しく解説します。
10進数から8進数への変換
10進数を8進数に変換するには、10進数を8で割り続け、余りを逆順に並べます。
例: 156 を8進数に変換 156 ÷ 8 = 19 余り 4 19 ÷ 8 = 2 余り 3 2 ÷ 8 = 0 余り 2 したがって、8進数表記は 234 です。
実際にC言語で実装する例:
#include <stdio.h>
void decimalToOctal(int n) {
int octalNum[100], i = 0;
while (n > 0) {
octalNum[i++] = n % 8;
n /= 8;
}
for (int j = i - 1; j >= 0; j--)
printf("%d", octalNum[j]);
}
int main() {
int num = 156;
printf("10進数 %d の8進数表記: ", num);
decimalToOctal(num);
printf("\n");
return 0;
}
8進数から10進数への変換
8進数を10進数に変換するには、それぞれの桁の値を \(8^n\) の重みをかけて加算します。
例: 234₈ を10進数に変換 (2 × 8²) + (3 × 8¹) + (4 × 8⁰) = (2 × 64) + (3 × 8) + (4 × 1) = 128 + 24 + 4 = 156
実際のC言語コード:
#include <stdio.h>
#include <math.h>
int octalToDecimal(int octalNum) {
int decimalNum = 0, base = 1;
while (octalNum > 0) {
int lastDigit = octalNum % 10;
decimalNum += lastDigit * base;
base *= 8;
octalNum /= 10;
}
return decimalNum;
}
int main() {
int octalNum = 234;
printf("8進数 %d の10進数表記: %d\n", octalNum, octalToDecimal(octalNum));
return 0;
}
2進数から8進数への変換
2進数は3桁ずつ区切って8進数に変換できます。
例: 101110₄ を8進数に変換 101 110 → 5 6 したがって、8進数は 56₈
8進数から2進数への変換
8進数の各桁を3桁の2進数に置き換えます。
例: 56₈ を2進数に変換 5 → 101 6 → 110 したがって、2進数は 101110₂
16進数から8進数への変換
16進数をまず2進数に変換し、その後8進数に変換します。
8進数から16進数への変換
8進数をまず2進数に変換し、その後16進数に変換します。
printfとscanfでの8進数の扱い
C言語では、printfとscanfで8進数を扱う際に %o
を使用します。
#include <stdio.h>
int main() {
int num = 156;
printf("10進数 %d を8進数で表示: %o\n", num, num);
return 0;
}
練習問題
以下の問題を解いてみましょう。
- 10進数 345 を8進数に変換せよ。
- 8進数 527 を10進数に変換せよ。
- 2進数 110101 を8進数に変換せよ。