C言語での8進数変換

C言語での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進数に変換せよ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です