Что происходит, так это то, что виртуальная машина AS3 использует 32-битные «атомы» для хранения значений примитивных типов.
3 из этих 32 битов используются для описания типа, что означает, что осталось 29 битов.
Так как int
является типом со знаком - для знака используется 1 бит, то есть остается 28 битов для положительного целого числа. Делая наибольшее число, которое вы можете записать в оставшиеся 28 бит:
0x0FFFFFFF = 268435455
Как только целому числу требуется более 29 бит, атом заменяется виртуальной машиной на тип Number
(который действительно представляется как 29-битный указатель на фактическое 64-битное значение с плавающей запятой двойной точности).
Таким образом, значение, определенное как «максимальное значение типа int», на самом деле не имеет особого смысла (поскольку Number
может хранить целые значения до 53 бит, но int
ограничит его 32) - кроме как с точки зрения:
общение с другими языками / технологиями (которые в основном используют 32 бита для целых чисел)
делая результаты (в основном) предсказуемыми для программистов, использующих 32-битные целые числа; и
будущее (в случае, если внутреннее представление изменится в будущем).
Как примечание, есть довольно много особенностей, связанных с числами и числами, в том числе:
var i:Number = 2.0;
... хранится как int до тех пор, пока десятичные дроби не потребуются.