JavaScriptのデータ型:Bigintについての基本まとめ

2021年2月18日JavaScript

JavaScriptのデータ型であるBigint型についてまとめました。

JavaScriptのBigint型の導入背景

JavaScriptのNumber(数値型)は倍精度浮動小数点数です。
これはどういう意味かというと、全体が64bitで、仮数部が53bitということです。
1bitあたりに0か1を返すことでいろんな数字を作っています。残りのbitは小数点以下なのに割り当てられています。
実際に限界の数字を計算することができます。

console.log(2 ** 53 -1); //9007199254740991
console.log(Number.MAX_SAFE_INTEGER); //9007199254740991

0か1なので2、53bitで、数値は0があるので-1しています。
またNumber.MAX_SAFE_INTEGERでも安全に表示できる整数がわかりますが、同じ数値を示しています。
つまり、「9007199254740991」というのがJavaScriptでは安全に表示できる最大数でした。
安全にというのは、下のように単にそれ以上の数字を足したときに挙動をみると一目瞭然です。

console.log(2 ** 53 +1); //9007199254740992
console.log(2 ** 53 +2); //9007199254740994
console.log(2 ** 53 +3); //9007199254740996
console.log(2 ** 53 +4); //9007199254740996
console.log(2 ** 53 +5); //9007199254740996
console.log(2 ** 53 +6); //9007199254740998

ときどき正しい数値になったりならなかったりします。

この限界値をさらに広げるためにでてきたのがBigintです。

Bigint型の使い方

//限界の値を超えた値Bigintなし
console.log(549465476846984687649874879); //5.494654768469847e+26
//限界の値を超えた値Bigintあり
console.log(549465476846984687649874879n); //549465476846984687649874879n
console.log(BigInt(549465476846984687649874879));//549465476846984666692976640n
console.log(typeof 10n); //bigint
console.log(20n === 20);// false bigint型の20と数値の20なのでfalse

Bigintは末尾にnをつけることで、データ型をBigintにできます。
これは10という小さい数値でもnをつけるとデータ型をBigintにできます。
Bigint()を使うとうまく表示できない場合があります。

Bigintでできること

Bigint同士の四則演算は普通に使えます。

console.log(485660888888888884313n * 1000000n);//485660888888888884313000000n

Bigintでできないこと

Bigintと通常の数値との四則演算はできません。

console.log(485660888888888884313n * 1000000);
//Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions