컴퓨터 시스템에서 2진수(binary)는 2진 기수법으로, 8진수(octal)는 8진 기수법으로 표현됩니다. 2진수는 밑(base)이 2인 수 체계이고, 8진수는 밑이 8인 수 체계입니다.
대표적인 2진수와 이에 대응하는 8진수의 예시는 다음과 같습니다.
| 2진수 | 8진수 |
|---|---|
| 01101 | 15 |
| 00101 | 5 |
| 10110 | 26 |
| 01010 | 12 |
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진수를 중간 단계로 활용하면 간단하게 구현할 수 있습니다.