1 분 소요

풀었던 백준문제: 백준 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 사용 방법

  1. 정수리터럴 뒤에 n을 붙혀서 BigInt로 변환한다.
let temp = 10n;
  1. 함수 BigInt()를 사용한다.
let temp = BigInt(10);

BigInt를 Number로 변환

Number(BigInt형);
Number(10n);

주의사항

  1. 내장객체 Math 사용이 불가능하다.
  2. Number 타입과의 연산이 불가능하다 (BigInt타입끼리만 연산가능!)
console.log(10n + 20n); // 30n

MDN 권장사항

BigInt를 무작정 사용하기보다 BigInt를 Number로 변환하는 과정에서 정확성이 떨어질 수 있기때문에 253 - 1 이상이 될것이라고 예측될 때 사용하는 것이 좋다.

추가적으로!

  • 0n은 falsy한 값이다.
  • 1n === 1false
  • 1n == 1ture → 타입은 다르지만 같은 타입인 경우 같은 값!
  • typeof 10nBigInt

태그:

카테고리:

업데이트: