Java - BigInteger 범위, 비교, 연산, 형변환

BigInteger 의 표현 범위, 연산, 비교, 형변환하는 방법을 소개합니다.

1. BigInteger 표현 범위

BigInteger는 int와 long이 표현하는 범위보다 더 큰 범위의 숫자를 저장할 수 있습니다. int, long의 범위보다 큰 숫자를 다룰 때 BigInteger 사용을 고려해볼 수 있습니다.

  • int (4 byte) : -2,147,483,648 ~ 2,147,483,647
  • long (8 byte) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
  • BigInteger (70 byte ~) : 무한 (Infinity)

2. BigInteger 선언 및 연산

  • new BigInteger("54321") 처럼 생성자에 문자열로 된 숫자를 전달하여 BigInteger를 생성 및 초기화
  • add(), multiply() 등의 함수를 이용하여 BigInteger 끼리 연산을 할 수 있고, 결과는 BigInteger로 리턴
import java.math.BigInteger;

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

        BigInteger n1 = new BigInteger("54321");
        BigInteger n2 = new BigInteger("12345");

        System.out.println("n1 + n2 = " + n1.add(n2));
        System.out.println("n1 - n2 = " + n1.subtract(n2));
        System.out.println("n1 * n2 = " + n1.multiply(n2));
        System.out.println("n1 / n2 = " + n1.divide(n2));
        System.out.println("n1 % n2 = " + n1.remainder(n2));
    }
}

Output:

n1 + n2 = 66666
n1 - n2 = 41976
n1 * n2 = 670592745
n1 / n2 = 4
n1 % n2 = 4941

3. BigInteger의 형변환

BigInteger는 아래와 같이 int, long, double 등의 기본 타입으로 변환할 수 있습니다.

import java.math.BigInteger;

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

        BigInteger n = new BigInteger("54321");

        int i = n.intValue();
        long l = n.longValue();
        float f = n.floatValue();
        double d = n.doubleValue();
        String s = n.toString();
    }
}

또한, 아래와 같이 long 타입의 숫자를 BigInteger로 변환할 수 있습니다.

import java.math.BigInteger;

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

        BigInteger n1 = new BigInteger("54321");

        BigInteger n2 = BigInteger.valueOf(12345);
        System.out.println(n1.subtract(n2));

        System.out.println(n1.subtract(BigInteger.valueOf(12345)));
    }
}

Output:

41976
41976

4. BigInteger의 크기 비교

BigInteger 객체끼리 크기 비교를 할 때 compareTo()를 사용할 수 있습니다.

n1.compareto(n2)는 1, 0, -1을 리턴할 수 있으며 각각 아래와 같은 의미가 됩니다.

  • 1 : n1이 더 크다
  • 0 : n1과 n2가 같다
  • -1 : n2가 더 크다
import java.math.BigInteger;

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

        BigInteger n1 = new BigInteger("54321");
        BigInteger n2 = new BigInteger("12345");
        BigInteger n3 = new BigInteger("12345");

        System.out.println("n1.compareTo(n2) = " + n1.compareTo(n2));
        System.out.println("n2.compareTo(n1) = " + n2.compareTo(n1));
        System.out.println("n2.compareTo(n3) = " + n2.compareTo(n3));
    }
}

Output:

n1.compareTo(n2) = 1
n2.compareTo(n1) = -1
n2.compareTo(n3) = 0
Loading script...
codechachaCopyright ©2019 codechacha