ActionScript 3.0整数溢出?

时间:2011-05-11 04:30:53

标签: flex actionscript-3 integer overflow

我有一个旧的AIR文件,工作正常。我试图重新编译它,但生成的airfile有问题。

在挖掘代码之后,我发现在某些地方字符串被解析为整数,并且结果int与字符串不对应。 所以我制作了一个简单的Actionscript文件并执行了代码:

var test:int = parseInt("3710835714");

并且变量将具有值

-584131582

所以这看起来像溢出。但我很惊讶我的空气文件(我没有自己编译)运行得很好。所以我想知道 - int的内部表示是否取决于用于编译的Flex或AIR sdk库的版本?

//编辑:它似乎归结为这个测试:

        var obj:Object = new Object();
        obj.val="3710835714";
        var test1:Boolean = (obj.val==-584131582);
        var test2:Boolean = (int(obj.val)==-584131582);

这为我评估

test1=false;
test2=true;

但是 - 这个旧的AIR文件似乎将两种情况都评估为true。怎么会这样?

1 个答案:

答案 0 :(得分:3)

由于Give number超出了ActionsScript Int限制

,因此发生了这种情况

int数据类型在内部存储为32位整数,并包含从 -2,147,483,648(-231)到2,147,483,647 (231 - 1)的整数集,

且数字 3,710,835,714 超过 1563352067

但您的解析结果显示编译器将其视为Uint,其最大限制为 4,294,967,295 ,即

-584131581 = 3,710,835,714 - 4,294,967,295

您应该使用UintNumber来表示大整数/整数

这个博客可以帮助你 ActionScript 3 Number data type problem with long integer values

希望有效