|
JavaScript 2.0
ライブラリ
マシン型
|
2003/03/04 (Tue)
マシン型は JavaScript 2.0 プログラムで使用される低水準の数値型で、JavaScript 2.0 と他言語との通信に有用な、Java
形式の整数処理を可能にする。これらの型は通常目的のスクリプトにおいて Number と Integer に取って代わることを意図するものではない。
以下の低水準数値型が利用可能である:
| 型 | 接尾辞 | 値 |
|---|---|---|
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 単精度浮動小数点数 |
上に挙げた型名は予約語ではない。
最初の6つの型 sbyte 、byte 、short 、ushort 、int
、及び uint は全て Integer の完全な派生型で、Integer 自体は Number
の派生型である。個々の数値は複数の型のメンバである。例えば 3.0 は sbyte 、byte 、short
、ushort 、int 、uint 、Integer 、Number 、及び Object
のメンバであり、一方–2000.0は short 、int 、Integer 、Number 、及び
Object のメンバである。いかなる場合でも JavaScript ではリテラルの 3 と 3.0 を区別しない。
sbyte 、byte 、short 、ushort
、int 、及び uint 値は Number 値として計算、比較が行われる —
各処理は IEEE の完全な倍精度計算を用いて行われる。[訳注: ECMAScript 3rd Edition では浮動小数点数の剰余が
IEEE 754 の定義から外れていた。今回どうなっているのか私にはよく分からない]
sbyte 、byte 、short 、ushort 、int 、或いは uint
値からの定義済み暗黙の強制型変換は、Number
型におけるもの以外は存在しない。以下の定義済み暗黙の強制型変換は変換先の型が
sbyte 、byte 、short 、ushort 、int 、或いは uint
のときに適用可能である:
undefined
+0.0long 、ulong 値は、型 T の等価な値に変換されるfloat 値は、型 T の等価な値に変換される+ 、–
、NaN から sbyte 、byte 、short 、ushort 、int 、或いは uint
への暗黙の強制型変換は存在しないことに注意していただきたい。
sbyte 、byte 、short 、ushort 、int 、或いは uint
値からの定義済み明示的な強制型変換は、Number
型におけるもの以外は存在しない。以下の定義済み明示的な強制型変換は変換先の型 T
が sbyte 、byte 、short 、ushort 、int 、或いは uint
のときに適用可能である。|T| という表記は型 T の範囲を表し、|sbyte| = |byte| = 256
、|short| = |ushort| = 65536 、|int| = |uint| = 232 である。
undefined +0.0long 、ulong 値 x は x = y (mod |T|)
を満たす型 T の値 y に変換されるfloat 値は最初に等価な Number 値に変換された後、次のように変換されるNumber 値は必要であればまず0方向への丸めにより Integer 値 x に変換される。次に
x が –0.0 、+
、– 、或いは NaN であれば +0.0 に変換される。それ以外の場合は
x は x = y (mod |T|) を満たす型 T の値 y に変換されるlong 、ulong 型は符号付き、符号無しの 64 ビット整数を表す。long と ulong
リテラルは接尾辞 L 、UL を使って、指数部、小数点を付けずに記述する。long 型のリテラルは
–9223372036854775808L から 9223372036854775807L のように記述し、ulong 型のリテラルは
0UL から 18446744073709551615UL のように記述する。
long 、ulong 型と Number は互いに共通元を持たないため、5L と 5
を == 、=== で比較してもそれらは異なるオブジェクトである。5L と 5UL を ==
、=== で比較しても、これらも異なるオブジェクトである。
long 、ulong 値における否定、加算、減算、乗算、及び剰余 (%) では厳密に正しい結果が得られ、long
と ulong 値は1つの式に混在させることができる。この場合、x の算術的な結果により5つの場合が考えられる:
long 型。ulong であれば結果は ulong 型。いずれも ulong
でなければ結果は long 型。ulong 型。Number で表現可能な最も近い値に変換される。2つのオペランドに long 、ulong 値を使った除算では、long 、ulong
及び、Number 値の中から最も正確な商が返される。最も正確な商が long 、ulong
であることもあるし、Number が最も正確な商になることもある。詳細はセマンティクスを見よ。
long 値と ulong 値の除算、剰余算で0で割った場合の結果として、正或いは負の無限大、NaN のいずれかである
Number 値を返すことができる。
long 、ulong オペランドと Number (或いは Number の派生型)
、float オペランドとの加算、減算、乗算、除算、及び剰余算では、最初に Number 、float
オペランドが丁度整数 (+0.0 と -0.0 も整数に含まれるが、無限大と NaN は含まれない) であるかどうかがチェックされる。整数であればこれらの値は上で述べた整数のセマンティクスが使われる。整数でなければ
long 、ulong オペランドは Number に変換され、Number 同士の演算と同じ方法で処理される。
ビット演算 & 、| 、及び ^ (の文脈) は少なくとも一方のオペランドが long
か ulong であれば64ビット幅になる。この場合必要があればもう一方のオペランドは整数に丸められ 264
で割った余りが使用される。少なくとも一方のオペランドが ulong であれば結果は ulong
になる。それ以外の場合は結果は long になる。
ビットシフト << 、>> 、及び >>> (の文脈) は第1オペランドが
long か ulong であれば64ビット幅になる。第1オペランドが ulong であれば結果は
ulong になり、そうでなければ結果は long である。>> は最重要ビット
(符号を決める先頭ビット) をコピーし、>>> は第1オペランドが long 、ulong
のいずれであるかに関わらず (先頭ビットに) 0 をシフトする。
long 、ulong オペランドと Number (或いは Number の派生型)、float
オペランドとの比較では、いかなる変換も行われず数学的な値がそのまま比較される。
以下の定義済み暗黙の強制型変換は変換先の型が long のときに適用可能である:
undefined 0Lulong 値は等価な long 値に変換される。Integer 値は等価な long 値に変換される。float 値は等価な long 値に変換される。以下の定義済み暗黙の強制型変換は変換先の型が ulong のときに適用可能である:
undefined 0ULlong 値は等価な ulong 値に変換される。Integer 値は等価な ulong 値に変換される。float 値は等価な ulong 値に変換される。NaN 、正の無限大、負の無限大から long 、ulong への暗黙の強制型変換は存在しないことに注意していただきたい。
long 、ulong 値は Number 、Integer 、及び float
に暗黙に強制型変換できる。その結果は Number 、float
で表現可能な最も近い値に、文字列を数値に変換する場合と同じ方法で丸めたものである。元の値が 0L 、0UL であれば結果は +0.0 、+0.0F になる。
以下の定義済み明示的な強制的型変換は変換先の型 T が long
か ulong のときに適用可能である。
undefined 0L か 0ULlong 、ulong 値 x は x = y (mod 264)
を満たす型 T の値 y に変換される。float 値は最初に等価な Number 値に変換された後、次のように変換される。Number 値は必要であればまず0方向への丸めにより Integer 値 x に変換される。次に
次に x が–0.0、+、–、或いは
NaN であれば 0L か 0UL に変換される。それ以外の場合は x は
x = y (mod 264) を満たす型 T の値 y に変換される。long 、ulong 値 x から Number 、Integer 、float
、或いは String 型への明示的な強制型変換が可能である。Number
、Integer 、float への明示的な強制型変換は暗黙の場合と同じである。String
型への明示的な強制型変換では x は10進数字から成る文字列として作成され、負の値では先頭にマイナス符号が付く。ゼロは
"0" という文字列になり、他の数値では全て0以外の (10進) 数字から始まる文字列が作成される。
float 型は IEEE 単精度浮動小数点数を表す。float リテラルは接尾辞 F
を使って記述する。float の正の無限大、負の無限大、NaN は Number のそれらとは異なるものである。
float 型と Number 型は互いに共通元を持たないため == で比較しても 5F
と 5 は異なるオブジェクトとなる。
float 値の符号反転は float 値を返す。他の全ての算術演算では float 値は最初に、相当する
Number 値に変換される。ビット演算 & 、| 、^ 、<<
、>> 、及び >>> では、処理前に全ての float 値は Number
型に強制型変換される。
以下の定義済み暗黙の強制型変換は、変換先の型が float のときに適用可能である:
undefined float(NaN)Number 値 (NaN 、正の無限大、負の無限大も含む) は IEEE の四捨五入モードにより float
で表現可能な最も近い値に変換される。long 、ulong 値は float で表現可能な最も近い値 (–0.0F は除く) に変換される。float 値から Number 型への暗黙の強制型変換は可能である。結果は同じ
Number 値である。
|
Waldemar Horwat 最終更新: 2003年03月04日 (火) |