Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[자바/Java] - 진법 변환 (Integer, BigInteger) (n 진수 <-> 10진수) 본문

Study/Java

[자바/Java] - 진법 변환 (Integer, BigInteger) (n 진수 <-> 10진수)

luke-king 2024. 5. 21. 17:03

 

 

 

 

 

[자바/Java] - 진법 변환 (Integer, BigInteger) (n 진수 <-> 10진수)

자바 진법 변환에 대해 정리해보려 한다. 알고리즘 문제를 풀면서 생각보다 많이 나와 정리해 두면 좋을 거 같다.

우선 진법 변환 하는데 Integer를 사용해 많이들 한다. 다만 필자는 BigIntegr를 사용하는 경우는 많이 보지 못했는데, 이번에 두 개를 같이 다뤄보려고 한다. 

 


 

1. 10진수 → n진수

※ 진법 변환할때 10진수를 제외하고 나머지 진수는 String 타입으로 받아야 한다.

int는 전부 10진수로 인식하고 2진수, 8진수, 16진수는 Binary, Octal, Hex 함수가 존재한다.

(toString() 함수를 사용해도 괜찮다. )

 

 

 

 

 

<예시>

public class Main {
    public static void main(String[] args) {

        int num = 35;

        System.out.println("10진수 -> 2진수");
        System.out.println(Integer.toBinaryString(num));
        System.out.println(Integer.toString(num,2));
        System.out.println("10진수 -> 3진수");
        System.out.println(Integer.toString(num, 3));
        System.out.println("10진수 -> 4진수");
        System.out.println(Integer.toString(num, 4));
        System.out.println("10진수 -> 5진수");
        System.out.println(Integer.toString(num, 5));
        System.out.println("10진수 -> 6진수");
        System.out.println(Integer.toString(num, 6));
        System.out.println("10진수 -> 7진수");
        System.out.println(Integer.toString(num, 7));
        System.out.println("10진수 -> 8진수");
        System.out.println(Integer.toOctalString(num));
        System.out.println(Integer.toString(num,8));
        System.out.println("10진수 -> 16진수");
        System.out.println(Integer.toHexString(num));
        System.out.println(Integer.toString(num,16));


    }

}

 

 

<결과>

 

<BigInteger 예시>

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {

        String str = "35";
        BigInteger big = new BigInteger(str);

        System.out.println("10진수 -> 2진수");
        System.out.println(big.toString(2));
        System.out.println("10진수 -> 3진수");
        System.out.println(big.toString( 3));
        System.out.println("10진수 -> 4진수");
        System.out.println(big.toString( 4));
        System.out.println("10진수 -> 5진수");
        System.out.println(big.toString( 5));
        System.out.println("10진수 -> 6진수");
        System.out.println(big.toString( 6));
        System.out.println("10진수 -> 7진수");
        System.out.println(big.toString( 7));
        System.out.println("10진수 -> 8진수");
        System.out.println(big.toString(8));
        System.out.println("10진수 -> 16진수");
        System.out.println(big.toString(16));


    }

}

결과는 위 결과와 똑같이 나온다.

다만 다른점은 int형이 아닌 String 문자열로 받아 BigInteger 형변환을 통해 진수를 변환시켜 준다.

Integr.toString(num,2) 이런식으로 했다면 BigInteger는 big.toString(2)이다.

 

2. n진수 → 10진수

※ 10진수로 변환할 때 String타입으로 받은 값은 Integer.parseInt(String s, int radix) 함수에 넣는데 int값 radix 에는 str값이 몇 진수 값 인지 넣어줘야 한다.

 

 

<예시>

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
    
        String str = "100011";

        System.out.println("2진수 -> 10진수");
        System.out.println(Integer.parseInt(str,2));
        System.out.println("3진수 -> 10진수");
        System.out.println(Integer.parseInt(str,3));
        System.out.println("4진수 -> 10진수");
        System.out.println(Integer.parseInt(str,4));
        System.out.println("5진수 -> 10진수");
        System.out.println(Integer.parseInt(str, 5));
        System.out.println("6진수 -> 10진수");
        System.out.println(Integer.parseInt(str, 6));
        System.out.println("7진수 -> 10진수");
        System.out.println(Integer.parseInt(str, 7));
        System.out.println("8진수 -> 10진수");
        System.out.println(Integer.parseInt(str,8));
        System.out.println("16진수 -> 10진수");
        System.out.println(Integer.parseInt(str,16));



    }

}

 

 

<결과>

 

 

<BigInteger 예시>

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {

        String str = "100011";

        for (int i = 2; i <= 8; i++) {
            System.out.println(i+"진수 -> 10진수");
            BigInteger big = new BigInteger(str,i);
            System.out.println(big);
        }
        System.out.println("16진수 -> 10진수");
        BigInteger big = new BigInteger(str,16);
        System.out.println(big);


    }

}

 

n진수를 10진수로 변환할 때는 BigInteger(문자열(), i진수)로 객체를 생성한 뒤 출력해줘야 한다. 위 코드 또한 결과는 같다.