본문 바로가기
자바(Java)

자바에서 이진수(binary)를 십진수(decimal)로 변환하는 프로그램

by 코딩하는 욤욤이 2024. 11. 8.
반응형

이진수와 십진수 개념 이해하기

이진수 (Binary): 이진수는 0과 1 두 개의 숫자만 사용하는 수 체계입니다. 각 자릿수는 오른쪽부터 시작해서 2의 제곱을 나타냅니다.

 

예를 들어 1011이라는 이진수를 생각해보면:

1×2^3+0×2^2+1×2^1+1×2^0이 계산은 다음과 같이 됩니다:

8+0+2+1=11 (십진수)

 

십진수 (Decimal): 십진수는 우리가 평소에 사용하는 수 체계로, 0부터 9까지의 숫자를 사용합니다. 각 자릿수는 10의 제곱을 나타냅니다.

 

따라서 이진수를 십진수로 변환하려면 이진수의 각 자릿수에 맞는 2의 제곱 값을 모두 더해주면 됩니다.

자바 프로그램 작성 방법

이진수를 십진수로 변환하는 방법은 크게 두 가지가 있습니다.

 

직접 변환하기: 각 자릿수를 처리해서 십진수를 계산하는 방법

자바의 내장 함수 사용하기: 자바에서 제공하는 Integer.parseInt() 메서드를 이용하는 방법

 

각 방법을 하나씩 살펴보겠습니다.


1. 직접 변환하기

이 방법은 for 반복문을 이용하여 이진수의 각 자릿수를 하나씩 확인하고, 각 자리에 맞는 값을 더해주는 방식입니다.

이진수를 십진수로 변환하는 방법 (직접 계산)

이진수를 입력받기: 이진수를 문자열로 입력받아야 각 자릿수에 쉽게 접근할 수 있습니다.

 

변수 초기화:

decimal: 최종 십진수 결과를 저장할 변수

power: 각 자릿수의 2의 제곱을 나타내는 변수

 

각 자릿수 계산: 오른쪽 끝에서부터 각 자릿수를 확인하며, 1인 경우 2^power를 십진수 결과에 더해줍니다.

제곱 값 증가: 다음 자릿수로 이동할 때마다 power를 1씩 증가시킵니다.

자바 코드 (직접 계산 방식)

import java.util.Scanner;

public class BinaryToDecimalManual {
    public static void main(String[] args) {
        // 이진수 입력받기
        Scanner scanner = new Scanner(System.in);
        System.out.print("이진수를 입력하세요: ");
        String binary = scanner.nextLine();
        scanner.close();

        int decimal = 0; // 최종 십진수 결과를 저장할 변수
        int power = 0;   // 오른쪽 끝(가장 작은 자리)부터 시작할 제곱

        // 오른쪽에서 왼쪽으로 이진수를 하나씩 확인
        for (int i = binary.length() - 1; i >= 0; i--) {
            char bit = binary.charAt(i); // 현재 자릿수의 값을 가져옴

            if (bit == '1') {
                // 자릿수가 '1'이면, 2^power 값을 십진수 결과에 더함
                decimal += Math.pow(2, power);
            }
            // 다음 자릿수로 이동하며 제곱값 증가
            power++;
        }

        // 십진수 결과 출력
        System.out.println("십진수 값은: " + decimal);
    }
}

코드 설명

입력받은 이진수는 문자열로 취급하여 각 자릿수에 접근할 수 있습니다.

오른쪽 끝에서부터 왼쪽으로 이동하며 각 자릿수를 확인합니다.

1을 만나면 2^power 값을 decimal 변수에 더해줍니다.

반복문이 진행될 때마다 power를 1씩 증가시켜 자릿수에 맞는 값을 계산합니다.


2. 자바의 내장 함수 사용하기

자바에서는 Integer.parseInt()라는 메서드를 이용하여 쉽게 이진수를 십진수로 변환할 수 있습니다.

변환 과정

이진수 입력받기: 문자열로 이진수를 입력받습니다.

Integer.parseInt(binary, 2) 사용: 이 메서드는 문자열을 2진수로 해석하여 십진수 값으로 반환해 줍니다.

자바 코드 (내장 함수 방식)

import java.util.Scanner;

public class BinaryToDecimalBuiltIn {
    public static void main(String[] args) {
        // 이진수 입력받기
        Scanner scanner = new Scanner(System.in);
        System.out.print("이진수를 입력하세요: ");
        String binary = scanner.nextLine();
        scanner.close();

        // Integer.parseInt로 이진수를 십진수로 변환
        int decimal = Integer.parseInt(binary, 2);

        // 십진수 결과 출력
        System.out.println("십진수 값은: " + decimal);
    }
}

코드 설명

Integer.parseInt(binary, 2) 메서드는 첫 번째 인자로 이진수 문자열을 받고, 두 번째 인자에 2를 입력하여 이진수를 나타낸다고 알려줍니다.

자바가 이 문자열을 자동으로 십진수로 변환해 주기 때문에, 변환 과정이 매우 간단합니다.

 

예제 예시

1011이라는 이진수를 입력해보면 다음과 같이 변환됩니다:

 

직접 계산:

decimal = 0과 power = 0으로 시작합니다.

오른쪽에서 왼쪽으로 각 자릿수를 확인하며, 1을 만나면 해당 제곱 값을 더합니다.

계산 과정: .

결과: 11.

 

내장 함수 사용:

Integer.parseInt("1011", 2)를 호출하면 바로 11이라는 십진수를 반환합니다.


직접 변환 방식은 이진수 변환의 원리를 이해하는 데 매우 유용하며 내장 함수 방식은 실제 프로그램에서는 더 간편하고 빠르게 사용할 수 있습니다.

 

이 두 가지 방식 모두 동일한 결과를 얻을 수 있습니다. 도움이 되셨길 바랍니다. 추가로 궁금한 점이 있으시면 언제든지 질문해 주세요!

반응형