본문 바로가기
Language/java

[Java] 유용한 클래스 (java.math.BigInteger 클래스)

by gamxong 2022. 7. 15.

 

BigInteger 

 

: int배열을 사용해서 값을 다룬다.

: 불변이며 2의 보수법 따른다(Signum+mag)

final int Signum; // 부호. 1,0,-1 셋 중의 하나
final int[] mag;  // 값

 

 

BigInterger의 생성

 

: 문자열로 숫자를 표현하는 것이 일반적이다.

 

BigInteger val;
val = new BigInteger("12345678901231351353");  // 문자열로 생성
val = new BigInteger("FFFF", 16);     // n진수의 문자열로 생성
val = BigInteger.valueOf(1234567890L);   // 숫자로 생성

 

다른 타입으로의 변환

 

String toString()  // 문자열로 변환
String toStirng(int radix) // 지정된 진법의 문자열로 변환
byte[] toByteArray()      // byte배열로 변환

 

- BigInteger도 Number부터 상속받은 기본형으로 메서드들을 가지고 있다.

int intValue()
long longValue()
float floatValue()
double doubleValue()

 

- 정수형으로 변환하는 메서드 중에서 'Exact'가 붙은 것들은 변환한 결과가 변환한 타입의 범위에 속하지 않으면 ArithmeticException 발생

byte byteValueExact()
int intValueExact()
long longValueExact()

 

 

BigInteger 연산

 

BigInteger add(BigInteger val)
BigInteger subtract(BigInteger val)
BigInteger multiply(BigInteger val). // 곱셈
BigInteger divide(BigInteger val)
BigInteger remainder(BigInteger val). // 나머지

★ 반환타입이 BigInteger : 새로운 인스턴스가 반환된다는 의미

 

 

비트 연산 메서드

 

int bitCount(). // 2진수로 표현했을 때, 1의 개수(음수의 경우 0의 개수) 반환
int bitLength(). // 2진수로 표현했을 때, 값을 표현하는데 필요한 비트 수
boolean testBit(int n)  // 우측에서 n+1번째 비트가 1이면 true
BigInteger setBit(int n)  // 우측에서 n+1번째 비트를 1로 변경
BigInteger clearBit(int n)  // 우측에서 n+1번째 비트를 0로 변경
BigInteger filpBit(int n)  // 우측에서 n+1번째 비트를 전환(0->1, 1->0)

★ 가능하면 산술연산 대신 비트연산으로 처리하도록 노력해야 한다.

 

댓글