컴퓨터 시스템에서 이진수(binary)는 이진법으로 표현되고, 8진수(octal)는 8진법으로 표현됩니다. 이진수는 밑(base)이 2인 수 체계이며, 8진수는 밑이 8인 수 체계입니다.
이진수와 이에 대응하는 8진수의 예는 다음과 같습니다.
| 이진수 | 8진수 |
|---|---|
| 01010 | 12 |
| 00111 | 7 |
| 11001 | 31 |
| 10000 | 20 |
아래는 이진수를 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진수를 매개로 활용하면 서로 다른 진법 간의 변환을 손쉽게 구현할 수 있습니다.