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

C++로 이진수와 8진수 상호 변환하는 프로그램 만들기

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

이진수와 이에 대응하는 8진수의 예는 다음과 같습니다.

이진수8진수
0101012
001117
1100131
1000020

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

예제 코드

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

   while(binaryNum != 0) {
      decimalNum += (binaryNum%10) * pow(2,count);
      ++count;
      binaryNum/=10;
   }
   count = 1;
   while (decimalNum != 0) {
      octalNum += (decimalNum % 8) * count;
      decimalNum /= 8;
      count *= 10;
   }
   return octalNum;
}
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 binaryNum = 1011, octalNum = 25;
   cout <<"Binary to Octal"<<endl;
   cout<<"Binary number: "<<binaryNum<<endl;
   cout<<"Octal number: "<<BinaryToOctal(binaryNum)<<endl;

   cout <<"Octal to Binary"<<endl;
   cout<<"Octal number: "<<octalNum<<endl;
   cout<<"Binary number: "<<OctalToBinary(octalNum)<<endl;
   return 0;
}

실행 결과

위 프로그램의 실행 결과는 다음과 같습니다.

Binary to Octal
Binary number: 1011
Octal number: 13
Octal to Binary
Octal number: 25
Binary number: 10101

코드 상세 설명

이 프로그램의 핵심은 BinaryToOctal()OctalToBinary()라는 두 개의 변환 함수입니다. 두 함수 모두 10진수를 중간 단계로 활용한다는 점이 특징입니다.

1. BinaryToOctal(): 이진수 → 8진수

이 함수는 주어진 이진수를 먼저 10진수로 변환한 뒤, 다시 10진수를 8진수로 변환하는 두 단계 방식으로 동작합니다.

  • 1단계: 이진수의 각 자릿수에 2의 거듭제곱을 곱해 모두 더하면 10진수가 됩니다.
  • 2단계: 10진수를 8로 나눈 나머지를 차례대로 조합하면 8진수가 됩니다.
int BinaryToOctal(int binaryNum) {
   int octalNum = 0, decimalNum = 0, count = 0;
   while(binaryNum != 0) {
      decimalNum += (binaryNum%10) * pow(2,count);
      ++count;
      binaryNum/=10;
   }
   count = 1;
   while (decimalNum != 0) {
      octalNum += (decimalNum % 8) * count;
      decimalNum /= 8;
      count *= 10;
   }
   return octalNum;
}

2. OctalToBinary(): 8진수 → 이진수

이 함수도 같은 원리로, 주어진 8진수를 먼저 10진수로 바꾼 후 10진수를 이진수로 변환합니다.

  • 1단계: 8진수의 각 자릿수에 8의 거듭제곱을 곱해 합산하면 10진수가 됩니다.
  • 2단계: 10진수를 2로 나눈 나머지들을 조합하여 이진수를 얻습니다.
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;
}

3. main() 함수

main() 함수에서는 이진수 1011과 8진수 25를 입력값으로 설정하고, BinaryToOctal()과 OctalToBinary()를 각각 호출하여 변환 결과를 화면에 출력합니다.

int main() {
   int binaryNum = 1011, octalNum = 25;
   cout <<"Binary to Octal"<<endl;
   cout<<"Binary number: "<<binaryNum<<endl;
   cout<<"Octal number: "<<BinaryToOctal(binaryNum)<<endl;

   cout <<"Octal to Binary"<<endl;
   cout<<"Octal number: "<<octalNum<<endl;
   cout<<"Binary number: "<<OctalToBinary(octalNum)<<endl;
   return 0;
}

정리하면, 이진수 1011은 8진수로 13이 되고, 8진수 25는 이진수로 10101이 됩니다. 이처럼 10진수를 매개로 활용하면 서로 다른 진법 간의 변환을 손쉽게 구현할 수 있습니다.