trace((0x7fffffff+1).toString(16)); // 出力: 7fffffff // 1足りない?
番町皿屋敷のような現象です。
trace((0x7fffffff+2).toString(16)); // 出力: 7fffffff
trace((0x7fffffff+0).toString(16)); // 出力: 7fffffff
trace((0x7fffffff-1).toString(16)); // 出力: 7ffffffe
どうやら、Number.toString()メソッドの扱える最大の正の整数は、0x7fffffffのようです。この値は、10進数で表記すると、2,147,483,647になります。2の31乗マイナス1(2^31-1)ですので、32bitで扱える符号付き整数の最大値に当たります。
trace(0x7fffffff); // 出力: 2147483647
trace(Math.pow(2, 31)-1); // 出力: 2147483647
意味ありげな限界値ですので、仕様であることを推測させます。
この記事へのコメント
●1.hinakamo(2004年10月09日 16:21)
1を足して80000000だから、-2,147,483,648だ、なんて現象ではないので、全然マシ。
もっとも、32bit整数最大値付近をFlashで取り扱う仕様は、僕ほとんど思い浮かばないのですが。。。。
●2.hinakamo(2004年10月09日 16:27)
ん? もしも、0x7ffffffff+0x0000001で計算上0x80000000を出したい仕様があった時は、手間ですかね。