C#에서 long(Int64)의 최댓값조차 감당할 수 없는 매우 큰 숫자를 다루어야 할 때가 있습니다. 이럴 때 사용하는 것이 바로 BigInteger 클래스입니다. BigInteger는 임의 길이의 정수를 오버플로우 없이 처리할 수 있도록 지원합니다.
BigInteger를 사용하려면 프로젝트에 System.Numerics 어셈블리를 참조로 추가해야 하며, 실제 타입은 System.Numerics.BigInteger 네임스페이스에 정의되어 있습니다.
BigInteger 구문(Syntax)
BigInteger는 값 형식(struct)으로 선언되어 있으며, 기본 구문은 다음과 같습니다.
[SerializableAttribute]
public struct BigInteger : IFormattable, IComparable,
IComparable<BigInteger>, IEquatable<BigInteger>
BigInteger 사용 예제
다음은 Int64.MaxValue를 제곱하는 예제입니다. 일반 long 타입으로는 절대 표현할 수 없는 값을 손쉽게 계산할 수 있습니다.
BigInteger num = BigInteger.Multiply(Int64.MaxValue, Int64.MaxValue);
또한 new 키워드를 사용해 double과 같은 다른 숫자 형식으로부터 BigInteger 객체를 생성할 수도 있습니다.
BigInteger num = new BigInteger(double.MaxValue);
주요 생성자(Constructor)
BigInteger 구조체는 다양한 데이터 형식으로부터 인스턴스를 생성할 수 있는 여러 생성자를 제공합니다.
| 번호 | 생성자 및 설명 |
|---|---|
| 1 | BigInteger(Byte[]) 바이트 배열에 담긴 값을 사용하여 BigInteger 구조체의 새 인스턴스를 생성합니다. |
| 2 | BigInteger(Decimal) Decimal 값을 사용하여 BigInteger 구조체의 새 인스턴스를 생성합니다. |
| 3 | BigInteger(Double) 배정밀도(double) 부동 소수점 값을 사용하여 BigInteger 구조체의 새 인스턴스를 생성합니다. |
| 4 | BigInteger(Int32) 32비트 부호 있는 정수(int) 값을 사용하여 BigInteger 구조체의 새 인스턴스를 생성합니다. |
이 외에도 BigInteger.Parse() 메서드를 사용하면 문자열로부터 직접 초대형 정수를 만들 수 있으며, 사칙연산 연산자(+, -, *, /)가 모두 오버로딩되어 있어 일반 정수처럼 자연스럽게 사용할 수 있다는 장점이 있습니다.