長整数リテラルで利用可能な演算子

長整数リテラルで利用可能な演算子と、数値リテラルとの間の演算に関する注意点などについて解説します。

(Last modified: )

長整数リテラルに対する算術演算子

長整数リテラルでは算術演算子である加算演算子( + ),減算演算子( - ),乗算演算子( * ),除算演算子( / ),剰余演算子剰余演算子( % ),べき乗演算子( ** )を使用することができます。

console.log(20n + 38n);
>> 58n
console.log(45n - 16n);
>> 29n
console.log(8n * 7n);
>> 56n
console.log(34n / 8n);
>> 4n
console.log(34n % 8n);
>> 2n
console.log(9n ** 3n);
>> 729n

なお長整数では演算結果は整数となるため / 演算の結果は整数となります。小数点以下の値は切り捨てられます。

console.log(7n / 3n);  // 2.333
>> 2n

console.log(8n / 3n);  // 2.666
>> 2n

長整数リテラルと数値リテラルとの間で算術演算を行うことはできません。

console.log(16n + 8);
>> Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

※ 算術演算子の詳細については「算術演算子」を参照されてください。

長整数リテラルに対するビット演算子/シフト演算子

長整数リテラルではビット演算子であるビット論理積( & ),ビット論理和( | ),ビット排他的論理和( ^ ),ビット論理否定( ~ )を使用することができます。

console.log(27543n & 19024n);
>> 18960n

console.log(27543n | 19024n);
>> 27607n

console.log(27543n ^ 19024n);
>> 8647n

console.log(~27543n);
>> 27544n

長整数リテラルと数値リテラルとの間でビット演算を行うことはできません。

console.log(27543n & 19024);
>> Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

長整数リテラルではシフト演算子である左シフト( << )と符号あり右シフト( >> )を使用することができます。

console.log(27543n << 3n);
>> 220344n

console.log(27543n >> 3n);
>> 3442n

console.log(-27544n >> 3n);
>> -3443n

ただし符号なし右シフト( >>> )は使用することができません。

console.log(27543n >>> 3n);
>> Uncaught TypeError: BigInts have no unsigned right shift, use >> instead

長整数リテラルと数値リテラルとの間でシフト演算を行うことはできません。

console.log(27543n << 3);
>> Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

※ ビット演算子およびシフト演算子の詳細については「ビット演算子/シフト演算子」を参照されてください。

長整数リテラルに対する等価演算子

長整数リテラルでは等価演算子である等価演算子( == )、不等価演算子( != )、厳密等価演算子( === )、厳密不等価演算子( !== )を使用することができます。

console.log(54n == 54n);
>> true

console.log(54n == 48n);
>> false

console.log(38n === 38n);
>> true

等価演算子では長整数リテラルと数値リテラルとで等しいかどうか比較することができます。値が同じであれば等価演算子( == )は true となりますが厳密等価演算子( === )ではデータ型が異なるため false となります。

console.log(54 == 54n);
>> true

console.log(54 === 54n);
>> false

※ 等価演算子の詳細については「等価演算子」を参照されてください。

長整数リテラルに対する関係演算子

長整数リテラルでは関係演算子であるより小さい( < )、以下( <= )、より大きい( > )、以上( >= )を使用することができます。

console.log(12n > 28n);
>> false

console.log(34n <= 48n);
>> true

関係演算子では長整数リテラルと数値リテラルとで大きさ比較することができます。

console.log(14 < 32n);
>> true

console.log(33n >= 41);
>> false

※ 関係演算子の詳細については「関係演算子」を参照されてください。

長整数リテラルに対するインクリメント演算子/デクリメント演算子

長整数リテラルではインクリメント演算子( ++ )、デクリメント演算子( -- )を使用することができます。

let num = 15n;

num++;
console.log(num);
>> 16n

--num;
console.log(num);
>> 15n

※ インクリメント演算子/デクリメント演算子の詳細については「インクリメント演算子/デクリメント演算子」を参照されてください。

長整数リテラルに対する単項マイナス演算子/単項プラス演算子

長整数リテラルでは単項マイナス演算子( - )を使用することができます。

console.log(-15n);
>> -15n

単項プラス演算子または単項マイナス演算子のオペランドとして数値以外を指定すると、数値に変換できるものは数値に変換され、変換できないものは NaN に変換されます。ただ長整数リテラルに対しては単項マイナス演算子を使用すると長整数リテラルの符号を変換だけが行われ、数値リテラルには変換されません。

また単項プラス演算子( + )は長整数リテラルに対して使用することができません。

console.log(+15n);
>> Uncaught TypeError: Cannot convert a BigInt value to a number

※ 単項マイナス演算子/単項プラス演算子の詳細については「単項マイナス演算子/単項プラス演算子」を参照されてください。

-- --

長整数リテラルで利用可能な演算子と、数値リテラルとの間の演算に関する注意点などについて解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。