Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 8진수를 2진수로 변환하는 방법

컴퓨터 시스템에서 2진수(binary)는 2진 기수법으로, 8진수(octal)는 8진 기수법으로 표현됩니다. 2진수는 밑(base)이 2인 수 체계이고, 8진수는 밑이 8인 수 체계입니다.

대표적인 2진수와 이에 대응하는 8진수의 예시는 다음과 같습니다.

2진수8진수
0110115
001015
1011026
0101012

8진수를 2진수로 변환하는 프로그램

아래는 8진수를 2진수로 변환하는 C++ 프로그램입니다.

예제 코드

#include <iostream>
#include <cmath>
using namespace std;
int OctalToBinary(int octalNum) {
    int decimalNum = 0, binaryNum = 0, count = 0;

    while(octalNum != 0) {
        decimalNum += (octalNum%10) * pow(8,count);
        ++count;
        octalNum/=10;
    }
    count = 1;
    while (decimalNum != 0) {
        binaryNum += (decimalNum % 2) * count;
        decimalNum /= 2;
        count *= 10;
    }
    return binaryNum;
}
int main() {
    int octalNum = 33;
    cout <<"Octal to Binary"<<endl;
    cout<<"Octal number: "<<octalNum<<endl;
    cout<<"Binary number: "<<OctalToBinary(octalNum)<<endl;
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Octal to Binary
Octal number: 33
Binary number: 11011

코드 동작 원리

이 프로그램에서 OctalToBinary() 함수는 주어진 8진수를 2진수로 변환하는 역할을 합니다. 변환 과정은 크게 두 단계로 진행됩니다. 먼저 8진수를 10진수로 변환한 뒤, 그 10진수를 다시 2진수로 변환합니다.

1단계: 8진수를 10진수로 변환

첫 번째 while 루프에서는 8진수의 각 자릿수를 분리하여 8의 거듭제곱을 곱해 누적함으로써 10진수를 구합니다.

while(octalNum != 0) {
    decimalNum += (octalNum%10) * pow(8,count);
    ++count;
    octalNum/=10;
}
  • octalNum % 10: 8진수의 가장 오른쪽 자릿수를 추출합니다.
  • pow(8, count): 해당 자릿수의 위치에 맞는 8의 거듭제곱 값을 계산합니다.
  • octalNum /= 10: 처리가 끝난 자릿수를 제거합니다.

2단계: 10진수를 2진수로 변환

두 번째 while 루프에서는 10진수를 2로 나눈 나머지를 활용해 2진수를 만듭니다.

count = 1;
while (decimalNum != 0) {
    binaryNum += (decimalNum % 2) * count;
    decimalNum /= 2;
    count *= 10;
}
  • decimalNum % 2: 2로 나눈 나머지(0 또는 1)를 구해 2진수의 비트를 결정합니다.
  • count: 자릿수를 1, 10, 100... 순으로 늘려가며 비트를 올바른 위치에 배치합니다.

main() 함수의 역할

main() 함수에서는 변환할 8진수를 지정하고, OctalToBinary() 함수를 호출하여 그에 대응하는 2진수를 계산한 후 화면에 출력합니다.

int main() {
    int octalNum = 33;
    cout <<"Octal to Binary"<<endl;
    cout<<"Octal number: "<<octalNum<<endl;
    cout<<"Binary number: "<<OctalToBinary(octalNum)<<endl;
    return 0;
}

위 예제에서 8진수 33은 10진수 27을 거쳐 최종적으로 2진수 11011로 변환됩니다. 이처럼 8진수와 2진수 사이의 변환은 10진수를 중간 단계로 활용하면 간단하게 구현할 수 있습니다.