JavaScript 2.0
ライブラリ
マシン型
previousupnext

2003/03/04 (Tue)

目的

マシン型は JavaScript 2.0 プログラムで使用される低水準の数値型で、JavaScript 2.0 と他言語との通信に有用な、Java 形式の整数処理を可能にする。これらの型は通常目的のスクリプトにおいて NumberInteger に取って代わることを意図するものではない。

内容

以下の低水準数値型が利用可能である:

接尾辞
sbyte   –128以上127以下の–0.0を除く Integer
byte   0 以上255以下の–0.0を除く Integer
short   –32768以上32767以下の–0.0を除く Integer
ushort    0以上 65535以下の–0.0を除く Integer
int   –2147483648以上2147483647以下の–0.0を除く Integer
uint   0以上4294967295以下の–0.0を除く Integer
long L –9223372036854775808以上9223372036854775807以下の長整数値
ulong UL 0以上18446744073709551615以下の長整数値
float F 正0、負0、無限大、NaN を含む IEEE 単精度浮動小数点数

上に挙げた型名は予約語ではない

8、16、32 ビット整数

最初の6つの型 sbytebyteshortushortint 、及び uint は全て Integer の完全な派生型で、Integer 自体は Number の派生型である。個々の数値は複数の型のメンバである。例えば 3.0 は sbytebyteshortushortintuintIntegerNumber 、及び Object のメンバであり、一方–2000.0は shortintIntegerNumber 、及び Object のメンバである。いかなる場合でも JavaScript ではリテラルの 3 と 3.0 を区別しない。

sbytebyteshortushortint 、及び uint 値は Number 値として計算、比較が行われる — 各処理は IEEE の完全な倍精度計算を用いて行われる。[訳注: ECMAScript 3rd Edition では浮動小数点数の剰余が IEEE 754 の定義から外れていた。今回どうなっているのか私にはよく分からない]

暗黙の強制型変換

sbytebyteshortushortint 、或いは uint 値からの定義済み暗黙の強制型変換は、Number 型におけるもの以外は存在しない。以下の定義済み暗黙の強制型変換は変換先の型が sbytebyteshortushortint 、或いは uint のときに適用可能である:

+ 、– 、NaN から sbytebyteshortushortint 、或いは uint への暗黙の強制型変換は存在しないことに注意していただきたい。

明示的な強制型変換

sbytebyteshortushortint 、或いは uint 値からの定義済み明示的な強制型変換は、Number 型におけるもの以外は存在しない。以下の定義済み明示的な強制型変換は変換先の型 Tsbytebyteshortushortint 、或いは uint のときに適用可能である。|T| という表記は型 T の範囲を表し、|sbyte| = |byte| = 256 、|short| = |ushort| = 65536 、|int| = |uint| = 232 である。

64 ビット整数

longulong 型は符号付き、符号無しの 64 ビット整数を表す。longulong リテラルは接尾辞 LUL を使って、指数部、小数点を付けずに記述する。long 型のリテラルは –9223372036854775808L から 9223372036854775807L のように記述し、ulong 型のリテラルは 0UL から 18446744073709551615UL のように記述する。

longulong 型と Number は互いに共通元を持たないため、5L5===== で比較してもそれらは異なるオブジェクトである。5L5UL===== で比較しても、これらも異なるオブジェクトである。

longulong 値における否定、加算、減算、乗算、及び剰余 (%) では厳密に正しい結果が得られ、longulong 値は1つの式に混在させることができる。この場合、x の算術的な結果により5つの場合が考えられる:

2つのオペランドに longulong 値を使った除算では、longulong 及び、Number 値の中から最も正確な商が返される。最も正確な商が longulong であることもあるし、Number が最も正確な商になることもある。詳細はセマンティクスを見よ。

long 値と ulong 値の除算、剰余算で0で割った場合の結果として、正或いは負の無限大、NaN のいずれかである Number 値を返すことができる。

longulong オペランドと Number (或いは Number の派生型) 、float オペランドとの加算、減算、乗算、除算、及び剰余算では、最初に Numberfloat オペランドが丁度整数 (+0.0 と -0.0 も整数に含まれるが、無限大と NaN は含まれない) であるかどうかがチェックされる。整数であればこれらの値は上で述べた整数のセマンティクスが使われる。整数でなければ longulong オペランドは Number に変換され、Number 同士の演算と同じ方法で処理される。

ビット演算 &| 、及び ^ (の文脈) は少なくとも一方のオペランドが longulong であれば64ビット幅になる。この場合必要があればもう一方のオペランドは整数に丸められ 264 で割った余りが使用される。少なくとも一方のオペランドが ulong であれば結果は ulong になる。それ以外の場合は結果は long になる。

ビットシフト <<>> 、及び >>> (の文脈) は第1オペランドが longulong であれば64ビット幅になる。第1オペランドが ulong であれば結果は ulong になり、そうでなければ結果は long である。>> は最重要ビット (符号を決める先頭ビット) をコピーし、>>> は第1オペランドが longulong のいずれであるかに関わらず (先頭ビットに) 0 をシフトする。

longulong オペランドと Number (或いは Number の派生型)、float オペランドとの比較では、いかなる変換も行われず数学的な値がそのまま比較される。

暗黙の強制型変換

以下の定義済み暗黙の強制型変換は変換先の型が long のときに適用可能である:

以下の定義済み暗黙の強制型変換は変換先の型が ulong のときに適用可能である:

NaN 、正の無限大、負の無限大から longulong への暗黙の強制型変換は存在しないことに注意していただきたい。

longulong 値は NumberInteger 、及び float暗黙に強制型変換できる。その結果は Numberfloat で表現可能な最も近い値に、文字列を数値に変換する場合と同じ方法で丸めたものである。元の値が 0L 、0UL であれば結果は +0.0 、+0.0F になる。

明示的な強制型変換

以下の定義済み明示的な強制的型変換は変換先の型 Tlongulong のときに適用可能である。

longulongx から NumberIntegerfloat 、或いは String 型への明示的な強制型変換が可能である。NumberIntegerfloat への明示的な強制型変換は暗黙の場合と同じである。String 型への明示的な強制型変換では x は10進数字から成る文字列として作成され、負の値では先頭にマイナス符号が付く。ゼロは "0" という文字列になり、他の数値では全て0以外の (10進) 数字から始まる文字列が作成される。

単精度浮動小数点数

float 型は IEEE 単精度浮動小数点数を表す。float リテラルは接尾辞 F を使って記述する。float の正の無限大、負の無限大、NaN は Number のそれらとは異なるものである。

float 型と Number 型は互いに共通元を持たないため == で比較しても 5F5 は異なるオブジェクトとなる。

float 値の符号反転は float 値を返す。他の全ての算術演算では float 値は最初に、相当する Number 値に変換される。ビット演算 &|^<<>> 、及び >>> では、処理前に全ての float 値は Number 型に強制型変換される。

暗黙の強制型変換

以下の定義済み暗黙の強制型変換は、変換先の型が float のときに適用可能である:

float 値から Number 型への暗黙の強制型変換は可能である。結果は同じ Number 値である。


Waldemar Horwat
最終更新: 2003年03月04日 (火)
previousupnext
訳者: exeal <exeal@student.interq.or.jp>
このドキュメントのオリジナルは mozilla.org において英語で公布されています。
この和訳は、利用者の利便のために Mozilla Japan 翻訳部門 によって提供されています。
内容に関してご不明な点がありましたら webmaster までお問い合わせください。