BigInt
풀었던 백준문제: 백준 13305
이전에 백준에서 문제를 풀면서 BigInt를 사용하게 된 경험이 있는데 최근 강의를 수강하면서 BigInt가 ECMA에 비교적 최근에 추가된 내용이기 때문에 궁금해서 조사를 해봤다.
자바스크립트의 변수 타입(정확히는 값 타입)에는 원시타입에 속하는 Number, String, boolean, undefined, Null, Symbol과 객체타입에 속하는 Object로 총 7가지가 존재한다.
하지만 최근 ECMA Scropt 2020의 ES11에서 BigInt라는 새로운 숫자 타입이 생겨나게 되었다.
기존의 자바스크립트는 64비트의 IEEE 754(널리 사용되는 부동소수점 표기 표준)을 따르기 때문에 숫자를 표현할때 253 - 1 까지만 안전하게 표현할 수 있었다.
이 이상의 길이의 숫자를 표현하게 되었을때 근사치로 계산을 하기 때문에 오류는 발생하지 않지만 정확한 값이 나오지 않는다.
하지만 BigInt를 이용하면 그 이상의 숫자를 표현할 수 있다.
BigInt
BigInt는 이름에서부터 알 수 있듯이 큰 수를 표현하는 방법이다. MDN에서 BigInt를 어떻게 설명하는지 확인해보니 다음과 같았다.
BigInt는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.
MDN - BigInt
BigInt 사용 방법
- 정수리터럴 뒤에
n
을 붙혀서 BigInt로 변환한다.
let temp = 10n;
- 함수
BigInt()
를 사용한다.
let temp = BigInt(10);
BigInt를 Number로 변환
Number(BigInt형);
Number(10n);
주의사항
- 내장객체 Math 사용이 불가능하다.
- Number 타입과의 연산이 불가능하다 (BigInt타입끼리만 연산가능!)
console.log(10n + 20n); // 30n
MDN 권장사항
BigInt를 무작정 사용하기보다 BigInt를 Number로 변환하는 과정에서 정확성이 떨어질 수 있기때문에 253 - 1 이상이 될것이라고 예측될 때 사용하는 것이 좋다.
추가적으로!
0n
은 falsy한 값이다.1n === 1
은false
1n == 1
은ture
→ 타입은 다르지만 같은 타입인 경우 같은 값!typeof 10n
은BigInt