「JavaScript/数値」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
リテラルと定数は違う。
Ef3 (トーク | 投稿記録)
48 行
 
== 整数と浮動小数点数 ==
JavaScriptの数値は [[w:IEEE 754|IEEE 754]] の[[w:倍精度浮動小数点数|64ビット倍精度浮動小数点数]]です。
JavaScriptにおいて、32ビット符号なし整数・32ビット符号付き整数・64ビット浮動小数が1つの数値にまとめられています。C言語などとは異なり、整数同士の演算で32ビットで表現できる範囲を超えた場合は、64ビット浮動小数に自動的に切り替わります。<!-- XXX -->
 
64ビット倍精度浮動小数点数で精度が落ちることなく整数を表現できる最小値と最大値は、それぞれ [[JavaScript/Number|Number]].MIN_SAFE_INTEGER と Number.MAX_SAFE_INTEGER で提供されます。
typeof 演算子のような手法で、この3種のうちどれが使われているかを判定する演算子は存在しません。しかしながら、ビット演算子を使うことにより、64ビット浮動小数を32ビット符号なし整数や32ビット符号付き整数に変換できます。具体的には、>>> 演算子により、32ビット符号なし整数になり、その他のビット演算子により、32ビット符号付き整数に変換されます。64ビット浮動小数は53ビット符号付き整数を誤差なく表現できるため、32ビット符号なし整数や32ビット符号付き整数を意図的に64ビット浮動小数に切り替える方法は JavaScript の言語仕様には存在しません。
 
typeof 演算子を数値に適用すると値に関係なく "number" を返します。
数値が(精度が失われているにしても)整数であるかは Number.isInteger(number)で、精度を失っていない整数であるかは Number.isSafeInteger(number) で調べることが出来ます。
ビット演算は64ビット倍精度浮動小数点数を32ビット符号付き整数に変換してから演算されます。
符号なし右シフト {{code|>>>}} だけは趣が異なり {{code|-1>>>1 === 2147483647}} と結果は正になります。
 
{{コラム|ES6でNumber組み込みオブジェクトに追加されたプロパティ|