이 글에서는 자바(Java)를 사용해 10진수를 8진수로 변환하는 방법을 알아보겠습니다. 10진수는 일상적으로 사용하는 숫자 체계로, 정수 부분과 소수 부분이 소수점으로 구분됩니다. 반면 8진수는 밑(base)이 8인 진법으로, 0부터 7까지의 숫자만을 사용합니다.
10진수를 8진수로 변환하는 원리
변환 방법은 생각보다 간단합니다. 10진수를 8로 계속 나누면서 나머지를 차례로 기록하고, 몫이 0이 되면 나머지들을 역순으로 읽으면 그것이 바로 8진수 값입니다.
실제 실행 결과는 다음과 같습니다.
입력
Enter the decimal number : 8
출력
The octal value is 10
알고리즘
1단계 - 시작 2단계 - 정수 변수 my_input, i, j 세 개와 정수 배열 my_octal을 선언한다. 3단계 - 사용자로부터 필요한 값을 입력받거나, 값을 직접 정의한다. 4단계 - my_input이 0이 아닐 동안 while 조건문으로 my_input % 8(나머지)을 계산하여 my_octal[i]에 저장한다. 5단계 - my_input / 8(몫)을 계산해 my_input에 다시 대입하고, i 값을 1 증가시킨다. 6단계 - for 루프로 my_octal 배열을 역순으로 순회하며 출력한다. 7단계 - 종료
예제 1 : 사용자 입력으로 변환하기
아래 예제에서는 java.util.Scanner 클래스를 사용해 사용자로부터 10진수를 입력받은 뒤, 앞서 설명한 알고리즘대로 8진수로 변환하여 출력합니다.
import java.util.Scanner;
public class DecimalToOctal {
public static void main(String[] args){
int my_input, i, j;
System.out.println("Required packages have been imported");
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined");
System.out.print("Enter the decimal number : ");
my_input = my_scanner.nextInt();
int[] my_octal = new int[100];
System.out.println("The octal value is ");
i = 0;
while (my_input != 0) {
my_octal[i] = my_input % 8;
my_input = my_input / 8;
i++;
}
for (j = i - 1; j >= 0; j--)
System.out.print(my_octal[j]);
}
}
실행 결과
Required packages have been imported A reader object has been defined Enter the decimal number : 8 The octal value is 10
예제 2 : 값이 미리 정의된 경우
이번에는 변환할 정수를 코드 안에서 미리 정의해 두고, 그 값을 8진수로 변환해 콘솔에 출력합니다.
public class DecimalToOctal {
public static void main(String[] args){
int my_input, i, j;
my_input = 8;
System.out.println("The decimal number is defined as " + my_input);
int[] my_octal = new int[100];
System.out.println("The octal value is ");
i = 0;
while (my_input != 0) {
my_octal[i] = my_input % 8;
my_input = my_input / 8;
i++;
}
for (j = i - 1; j >= 0; j--)
System.out.print(my_octal[j]);
}
}
실행 결과
The decimal number is defined as 8 The octal value is 10
동작 과정 자세히 살펴보기
입력값이 8일 때 위 코드가 어떻게 동작하는지 단계별로 확인해 보겠습니다.
- 1차 반복 : 8 % 8 = 0 → my_octal[0]에 0 저장, 8 ÷ 8 = 1 → my_input은 1이 됨
- 2차 반복 : 1 % 8 = 1 → my_octal[1]에 1 저장, 1 ÷ 8 = 0 → my_input이 0이 되어 반복 종료
- 출력 : 배열을 역순(j = 1 → 0)으로 순회하며 1, 0을 출력 → 최종 결과는 10
참고 : Integer.toOctalString() 메서드 활용
직접 알고리즘을 구현하지 않고도 자바에서 기본 제공하는 Integer.toOctalString() 메서드를 사용하면 한 줄로 10진수를 8진수 문자열로 변환할 수 있습니다.
int decimal = 8; String octal = Integer.toOctalString(decimal); System.out.println(octal); // 출력 : 10
학습 목적이라면 나눗셈과 나머지 연산으로 직접 구현하는 방식을, 실무에서 간편하게 처리하고 싶다면 내장 메서드를 활용하는 방식을 추천합니다.