[JAVA] BigInteger

이한솔·2023년 11월 6일
0

JAVA

목록 보기
4/9

Java에서 int의 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이다. long의 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807이다.
이 때 이 범위를 넘어서게 되면 모두 0으로 출력이 된다. 숫자의 범위가 저 범위를 넘는 경우는 거의 없겠지만, 돈과 관련된 개발, 혹은 알고리즘 문제를 풀 때 항상 최악의 상황을 고려해야하므로 무한의 정수가 들어갈 가능성이 있는 경우 BigInteger 클래스를 활용하는 것이 좋다. BigInteger는 문자열 형태로 이루어져 있어, 숫자의 범위가 무한하기 때문에 어떠한 정수인지 담을 수 있다.

BigInteger 선언

BigInteger는 java.math 안에 있고, 아래와 같이 선언될 수 있다.
//문자열로부터 BigInteger 생성
BigInteger num1 = new BigInteger("12345678901234567890");
// long 값으로부터 BigInteger 생성
BigInteger num2 = BigInteger.valueOf(1234567890); 

BigInteger를 초기화 하기 위해서는 문자열을 인자값으로 넘겨줘야한다. BigInteger는 문자열로 되어있기 때문이다.

사칙연산과 나머지 연산

BigInteger는 문자열이지만, 숫자를 계산하기 위해 BigInteger 클래스 내 메서드를 이용해 사칙연산과 나머지 연산을 할 수 있다.
BigInteger sum = num1.add(num2); // 덧셈
BigInteger difference = num1.subtract(num2); // 뺄셈
BigInteger product = num1.multiply(num2); // 곱셈
BigInteger quotient = num1.divide(num2); // 나눗셈
BigInteger remainder = num1.remainder(num2); // 나머지

형 변환

BigInteger 클래스에서 기본 데이터 타입인, int, long, float, double 등과 같은 자동 형변환은 제공되지 않는다. 따라서 BigInteger 객체를 기본 데이터 타입으로 바로 변환하는 것은 불가능하다. 대신, intValue(), longValue() 메서드를 사용하여 변환하여 반환할 수 있다.
BigInteger bigInt = new BigInteger("12345678901234567890");

int intValue = bigInt.intValue(); // BigInteger를 int로 변환
long longValue = bigInt.longValue(); // BigInteger를 long으로 변환

주의할 점은, BigInteger의 크기가 기본 데이터 타입의 허용 범위를 벗어나게 되면 데이터 손실이 발생할 가능성이 있다. 따라서 안전하게 형변환을 하기 위해서는 BigInteger 객체의 크기가 기본 데이터 타입의 허용 범위에 있는지 확인하는 것이 중요하다.

비교

BigInteger 객체간의 크기를 비교할 수 있다.
int result = num1.compareTo(num2);

위의 예시에서 result가 음수이면, num1이 num2보다 작고, 양수이면 num1이 num2보다 크다. 0일 때는 두 수가 같은 것을 의미한다.

기타 메서드

pow() 매서드의 경우 BigInteger의 거듭제곱을 반환한다.
BigInteger result = num1.pow(2); // num1을 제곱한 결과

BigInteger 클래스는 정수 계산에서 발생할 수 있는 오버플로우나 정밀도 손실을 피할 수 있도록 하므로, 매우 큰 정수나 정밀한 연산이 필요한 상황에서 사용할 수 있다.

profile
개인 공부용

0개의 댓글