Number.toString()メソッドの限界 [Edit]

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. 1.hinakamo(2004年10月09日 16:21)

    1を足して80000000だから、-2,147,483,648だ、なんて現象ではないので、全然マシ。

    もっとも、32bit整数最大値付近をFlashで取り扱う仕様は、僕ほとんど思い浮かばないのですが。。。。

  2. 2.hinakamo(2004年10月09日 16:27)

    ん? もしも、0x7ffffffff+0x0000001で計算上0x80000000を出したい仕様があった時は、手間ですかね。

その他の記事