BigInteger클래스?
정수형으로 표현할 수 있는 값의 한계가 있는데 가장 큰 정수형 타입인 long으로도 10진수 19자리 정도이다.
이 값도 상당히 큰 값이지만, 분명 더 큰 값을 다뤄야 할 때가 있는데 이럴때 BigInteger를 사용하면 좋다.
BigInteger는 내부적으로 int배열을 사용해 값을 다루기 때문에 long타입보다 훨씬 큰 값을 다룰 수있지만
성능은 long타입보다 떨어진다.
final int signum; // 부호. 1(양수), 0, -1(음수) 셋 중의 하나 final int[] mag; // 값(magnitude)
BigInteger도 String처럼 불변이다.
BigInteger의 생성
BigInteger는 정수형으로는 표현할 수 있는 값의 한계가 있기 때문에 문자열로 숫자를 표현하는 것이 일반적이다.
BigInteger val; val = new BigInteger("12345678901234567890"); // 문자열로 생성 val = new BigInteger("FFFF", 16); // n진수(radix)의 문자열로 생성 val BigInteger.valueOf(1234567890L); // 숫자로 생성
다른 타입으로의 변환
BigInteger를 문자열, byte배열로 변환이 가능하고
Number클래스로부터 상속받은 기본형으로 변환하는 메서드들도 가지고 있다
BigInteger bi = new BigInteger("123456789"); bi.toString(); // 문자열 bi.toByteArray(); // byte[] bi.intValue(); // int bi.longValue(); // long bi.floatValue(); // float bi.doubleValue(); // double
정수형으로 변환하는 메서드 중 이름 끝에 'Exact'가 붙은 것들은 변환한 결과가
변환한 타입의 범위에 속하지 않으면 ArithmeticException을 발생시킨다.
bi.byteValueExact(); bi.intValueExact(); bi.longValueExact();
BigInteger의 연산
BigInteger에는 모든 연산자와 수학적인 계산을 쉽게 해주는 메서드들이 정의되어 있다.
몇가지만 보도록 하자.
BigInteger add(BigInteger val) // 덧셈(this + val) BigInteger subtract(BigInteger val) // 뺄셈(this - val) BigInteger multiply(BigInteger val) // 곱셈(this * val) BigInteger divide(BigInteger val) // 나눗셈(this / val) BigInteger remainder(BigInteger val) // 나머지(this % val)
비트 연산 메서드
int bitCount() // 2진수로 표현했을 때, 1의 개수(음수는 0의 개수)를 반환 int bitLength() // 2진수로 표현했을 때, 값을 표현하는데 필요한 bit수 boolean testBit(int n) // 우측에서 n+1번째 비트가 1이면 true, 0이면 false BigInteger setBit(int n) // 우측에서 n+1번째 비트를 1로 변경 BigInteger clearBit(int n) // 우측에서 n+1번째 비트를 0으로 변경 BigInteger flipBit(int n) // 우측에서 n+1번째 비트를 전환(1→0, 0→1)
댓글