관리 메뉴

ballqs 님의 블로그

[Java] int long BigInteger형 차이 본문

코딩 공부/Java

[Java] int long BigInteger형 차이

ballqs 2024. 7. 19. 17:15

알고리즘 문제를 풀다가 높은 확률로 겪는 문제가 거의 이부분이였다.

수식에는 뭔가 틀린게 없는데 테스트케이스를 통과 못하는 경우!

계산된 수치가 Int가 감당할수 있는 크기를 벗어난 경우이다.

그래서 java에 다른 숫자 타입이 많지만 문제 풀면서 사용한 int long BigInteger에 대해서 작성해본다.

 

차이점

  int long BigInteger
저장 공간 4 byte 8 byte Minimum 70 byte
데이터 범위 약 -21억 ~ +21억 약 -900경 ~ +900경 Infinity
타입 기본타입 기본타입 참조타입

 

 

int

int는 산술 연산이 가능한 정수값을 저장하는 자료형이다.

 

기본 사용

// 아무런 선작업이 필요가 없다.
int num = 10;

 

int -> long

int i = 4;
long l = Long.valueOf(i);	// int -> long

 

int -> BigInteger

int i = 100000;
BigInteger bi = BigInteger.valueOf(i);	//int -> BigIntger

 

 

long

int와 마찬가지로 산술 가능한 자료형이다.

long 데이터 유형의 값 뒤에 L를 작성하여 long 값을 나타낸다.

 

기본 사용

long l = 1000000L;

 

long -> int

long l = 1000L;
int i = Long.valueOf(l).intValue();	// long -> int

 

long -> BigInteger

BigInteger bi = new BigInteger("123456789");
long l = bi.longValue();	// BigInteger -> long

 

BigInteger

선언 방법

import java.math.BigInteger;

 

사용 방법

BigInteger bi = new BigInteger("10000");	// "숫자"와 같이 사용!

BigInteger를 초기화하기 위해서는 문자열을 인자 값으로 할수 있다.

좀 더 자세한 내용은 공식 사이트를 보면 알 수 있다.

 

사칙연산

BigInteger bi1 = new BigInteger("1000");
BigInteger bi2 = new BigInteger("100");

System.out.println("덧셈(+) :" +bi1.add(bi2));
System.out.println("뺄셈(-) :" +bi1.subtract(bi2));
System.out.println("곱셈(*) :" +bi1.multiply(bi2));
System.out.println("나눗셈(/) :" +bi1.divide(bi2));
System.out.println("나머지(%) :" +bi1.remainder(bi2));

// 결과 출력
// 덧셈(+)    :   1100
// 뺄셈(-)    :    900
// 곱셈(*)    : 100000
// 나눗셈(/)  :     10
// 나머지(%)  :      0

 

 

BigInteger -> int

BigInteger bi = new BigInteger("100000");
int i = bi.intValue(); 	//BigIntger -> int

 

BigInteger -> long

BigInteger bi = new BigInteger("100000");
long l = bi.longValue(); //BigIntger -> long

 

그 외의 형변환

다른 형변환은 왜 따로 정리하냐면 이 글의 목적은 int long BigInteger에 관해서 였기에 여기에다 작성하겠다.

BigInteger bi = new BigInteger("100000");

float f = bi.floatValue(); 	//BigIntger -> float
double d = bi.doubleValue(); 	//BigIntger -> double
String s = bi.toString(); 	//BigIntger -> String

 

2개의 수 비교

BigInteger bi1 = new BigInteger("100000");
BigInteger bi2 = new BigInteger("1000000");
		
int result = bi1.compareTo(bi2);

BigInteger에서 비교를 할때 사용하는 함수는 compareTo를 사용해 비교를 하고 나오는 결과값이 -1 , 0 , 1 가 나온다.

 

BigInteger bi1 = new BigInteger("50");
BigInteger bi2 = new BigInteger("1000");
BigInteger bi3 = new BigInteger("1000");

int result1 = bi1.compareTo(bi2);
System.out.println("bi1(50) < bi2(1000) : " + result1);
int result2 = bi2.compareTo(bi3);
System.out.println("bi2(1000) = bi3(1000) : " + result2);
int result3 = bi2.compareTo(bi1);
System.out.println("bi2(1000) > bi1(50) : " + result3);

// 출력 결과
// 작은 값을 큰 값이랑 비교시 : bi1(50) < bi2(1000) : -1
// 두 값이 같을 때 : bi2(1000) = bi3(1000) : 0
// 큰 값을 작은 값이랑 비교시 : bi2(1000) > bi1(50) : 1