0

这按预期工作:

for (var i:uint = 5; i >= 1; i-- ) 
{   
    trace(i);  // output is from 5~1, as expected
}

这是奇怪的行为:

for (var i:uint = 5; i >= 0; i-- ) 
{   
    trace(i)
}

// output:
5
4
3
2
1
0
4294967295
4294967294
4294967293
... 

低于 0 时,会出现类似 MAX_INT 的内容,并且会一直递减。为什么会这样?

编辑

我使用 C++ 测试了一个类似的代码,带有一个 unsigned int,我得到了相同的结果。可能在递减后评估条件。

4

1 回答 1

3

您描述的行为与任何编程语言都没有多大关系。对于 C、C++、actionscript 等来说都是如此。不过,让我这么说吧,您看到的是非常正常的行为,并且与数字的表示方式有关(请参阅 wiki 文章并阅读有关无符号整数的信息)。

因为您使用的是uint无符号整数)。只能是正数,您使用的类型不能表示负数,因此如果您采用这样的 uint:

uint i = 0;

你从上面减去 1

i = i - 1;

在这种情况下i不代表负数,因为它是无符号的。然后将显示一个数据类型i的最大值。uint

您在上面发布的编辑,

“......在 C++ 中,......同样的结果......”

应该为您提供有关为什么会发生这种情况的线索,它与您使用的语言或比较何时完成无关。它与您使用的数据类型有关。

作为练习,再次启动该 C++ 程序并编写一个显示 a 最大值的程序uint。该程序不应该显示任何定义的常量:)..它也应该带你一行代码!

于 2012-08-15T17:49:21.147 回答