Long & BigInteger

kkmdevel·2024년 9월 6일
post-thumbnail

BigInteger vs long

자바에서 큰 숫자를 다룰 때, longBigInteger를 주로 사용한다. 이 두 자료형은 숫자의 크기와 성능 면에서 차이가 있다.


long

  • 크기: 64비트 (8바이트)
  • 범위: -2^63 ~ 2^63 - 1 (약 ±9.2경)
  • 장점: 빠르고 메모리 효율적
  • 단점: 범위를 넘는 초대형 숫자는 처리 불가

long은 일반적으로 큰 수를 처리하는 데 충분하지만, 2^63 이상의 숫자를 다룰 때는 한계가 있다.


BigInteger

  • 크기: 무제한 크기의 정수를 다룰 수 있음
  • 장점: 어떤 크기의 수라도 처리 가능
  • 단점: 연산 속도 느림, 메모리 사용량 많음

BigInteger는 범위 제한 없이 큰 숫자를 처리할 수 있지만, 속도와 메모리 사용에서 비용이 발생한다.

// 문자열로 생성
BigInteger bigInteger = new BigInteger("123456");

//n진수 문자열로 생성
BigInteger bigInteger = new BigInteger("FFFF", 16);

//valueOf 생성
BigInteger bigInteger = BigInteger.valueOf(123456);

//연산
BigInteger bigNum = new BigInteger("3");
System.out.println("3+3="+bigNum.add(BigInteger.valueOf(3)));
System.out.println("3-3="+bigNum.subtract(BigInteger.valueOf(3)));
System.out.println("3*3="+bigNum.multiply(BigInteger.valueOf(3)));
System.out.println("3/3="+bigNum.divide(BigInteger.valueOf(3)));
System.out.println("3%3="+bigNum.mod(BigInteger.valueOf(3)));

//비교
System.out.println(BigInteger.valueOf(3).compareTo(BigInteger.valueOf(3)));//0
System.out.println(BigInteger.valueOf(3).compareTo(BigInteger.ONE));//1
System.out.println(BigInteger.ONE.compareTo(BigInteger.valueOf(3)));//-1

//정렬
String []s= {"3","4","8","6","1","2"};

//Arrays.sort()를 이용 BigInteger의 compareTo를 이용한다
Arrays.sort(s, 0, 6, (s1, s2)->(new BigInteger(s2).compareTo(new BigInteger(s1))));//내림차순
for(int i=0;i<6;i++) {
	System.out.print(s[i]+" ");
}
System.out.println();
Arrays.sort(s, 0, 6, (s1, s2)->(new BigInteger(s1).compareTo(new BigInteger(s2))));//오름차순
for(int i=0;i<6;i++) {
	System.out.print(s[i]+" ");

//변환
BigInteger bigNumber = BigInteger.valueOf(12345); 
System.out.println(bigNumber.intValue());//BigIntger -> int
System.out.println(bigNumber.longValue());//BigIntger -> long
System.out.println(bigNumber.floatValue());//BigIntger -> float
System.out.println(bigNumber.doubleValue());//BigIntger -> double
System.out.println(bigNumber.toString());//BigIntger -> String

요약

  • long: 성능이 중요하고 숫자가 너무 크지 않을 때 사용
  • BigInteger: 매우 큰 숫자를 다룰 때 사용, 성능은 떨어짐
profile
25/08/12

0개의 댓글