컴퓨터 시스템에서 8진수는 밑이 8인 기수법으로 표현되고, 10진수는 밑이 10인 기수법으로 표현됩니다. 즉, 8진수는 각 자리가 0부터 7까지의 숫자만 사용하며, 10진수는 0부터 9까지의 숫자를 사용합니다.
아래 표는 대표적인 10진수와 이에 해당하는 8진수 값의 예시입니다.
| 10진수 | 8진수 |
|---|---|
| 8 | 10 |
| 70 | 106 |
| 25 | 31 |
| 7 | 7 |
이제 10진수를 8진수로 변환하는 C++ 프로그램을 살펴보겠습니다.
예제 코드
#include <iostream>
using namespace std;
void DecimalToOctal(int decimalNum) {
int octalNum = 0, placeValue = 1;
int dNo = decimalNum;
while (decimalNum != 0) {
octalNum += (decimalNum % 8) * placeValue;
decimalNum /= 8;
placeValue *= 10;
}
cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;
}
int main() {
DecimalToOctal(70);
return 0;
}실행 결과
Octal form of decimal number 70 is 106
코드 동작 원리
위 프로그램에서 DecimalToOctal() 함수는 10진수를 8진수로 변환하는 역할을 합니다. 함수 내부에서 먼저 변수 octalNum은 0으로 초기화되고, 변수 placeValue는 숫자 내 각 자릿수의 위치(1, 10, 100 등)를 나타냅니다. 최종적인 8진수 값은 while 루프를 통해 계산됩니다.
while 루프가 한 번 반복될 때마다 다음과 같은 작업이 수행됩니다.
decimalNum % 8: 10진수를 8로 나눈 나머지(현재 자리의 8진수 숫자)를 구합니다.- 나머지에
placeValue를 곱하여 기존의octalNum값에 더합니다. decimalNum /= 8: 10진수를 8로 나눈 몫을 다시 저장해 다음 자리를 계산할 준비를 합니다.placeValue *= 10: 자릿값을 10배씩 늘려 왼쪽 자리로 이동합니다.
이 과정을 보여주는 핵심 코드 조각은 다음과 같습니다.
while (decimalNum != 0) {
octalNum += (decimalNum % 8) * placeValue;
decimalNum /= 8;
placeValue *= 10;
}결과 출력
while 루프가 종료되어 8진수 값인 octalNum이 구해지면, 이를 화면에 출력합니다. 출력 부분의 코드는 아래와 같습니다.
cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;
마지막으로 main() 함수에는 필요한 값을 인자로 전달하며 DecimalToOctal() 함수를 호출하는 코드만 포함되어 있습니다.
DecimalToOctal(70);
이처럼 나눗셈과 나머지 연산을 반복적으로 활용하면 별도의 라이브러리 없이도 손쉽게 10진수를 8진수로 변환할 수 있습니다. 같은 원리를 응용하면 2진수나 16진수 변환 프로그램도 쉽게 작성할 수 있습니다.