[Javascript] BigInt

seongminn·2022년 12월 26일
0

JavaScript

목록 보기
5/5
post-thumbnail
post-custom-banner

BigInt

자바스크립트의 Number 자료형은 -2532^{53}+1부터 2532^{53}-1까지의 수를 표현할 수 있다. 범위를 벗어나는 수는 가까운 수나 0으로 반올림해서 반환한다.

let a = Number.MAX_SAFE_INTEGER // 9007199254740991
let b = a + 1 // 9007199254740992
let c = b + 1 // 9007199254740992
let d = 123456789876543456789 // 123456789876543460000

이러한 Number 자료형이 갖고 있는 범위의 제약을 벗어난 수를 다룰 수 있게 해주는 것이 바로 BigInt 자료형이다.

BigInt 자료형은 정수 리터럴 끝에 n을 붙이거나 BigInt()를 호출하여 BigInt 타입의 값을 생성할 수 있다.

let a = 123456789876543456789n // 123456789876543456789n
let b = BigInt(123456789876543456789) // 123456789876543456789n
let c = BigInt('0b11111111111111111111111111111111111111111111111111111') // 9007199254740991n

연산

산술 연산
BigInt 자료형의 산술 연산은 대부분 Number 자료형의 연산과 동일하게 작동하고, 연산 결과는 BigInt 타입의 값을 반환한다.

다만, 나눗셈 연산의 결과 소수점 이하를 모두 버린다는 것에 주의하자. 만일 소수점 이하의 값을 보존하고 싶다면 별도의 라이브러리(bigdecimal.js)를 설치하여 이를 구현할 수 있다고 한다.

BigInt 자료형은 Number 자료형과 섞어서 연산할 수 없다. 섞어서 사용해야 하는 상황이라면 Number()BigInt()를 통해 자료형을 통일해주도록 한다. 이 때, BigIntNumber()로 변환할 때 값이 너무 커서 Number 자료형에서 허용하는 범위를 초과한다면 잘못된 값이 반환될 수 있다는 점에 주의하자.

const biggest = 10n;

console.log(biggest + 35n) // 45n
console.log(biggest / 3n) // 3n
console.log(biggest + 35) // TypeError

비교 연산
비교 연산자 <, >BigInt 자료형과 Number 자료형 모두에 사용할 수 있다.

이 때, 동등 연산자일치 연산자의 차이에 주목할 필요가 있다.

동등 연산자(==)는 피연산자의 타입이 다를 때 비교를 위해 형변환을 한 뒤 비교를 한다. 따라서 값이 같다면 타입이 달라도 동등하다고 판단한다.

반대로 일치 연산자(===)는 피연산자의 타입이 달라도 형변환을 하지 않기 때문에 값이 같고 타입이 같을 때만 일치하다고 판단한다.

이러한 이유로 값이 같은 BigInt 자료형과 Number 자료형을 비교할 때 동등 연산자를 사용하면 true가, 일치 연산자를 사용하면 false가 반환된다.

console.log(35n < 40n) // true
console.log(35n < 40) // true

console.log(35n == 35) // true
console.log(35n === 35) // false

논리 연산
&&, || 등의 논리 연산에 대해서도 동일하게 작동한다.

console.log(1n && 3) // 3
console.log(0n || 5n) // 5n

console.log(0n ? 'truthy' : 'falsy') // falsy

--

참고 사이트

🙇🏻‍♂️ https://ko.javascript.info/bigint
🙇🏻‍♂️ https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt

profile
돌멩이도 개발 할 수 있다
post-custom-banner

0개의 댓글