这可以按预期工作:
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,我得到了相同的结果。可能在减量后评估条件。
答案 0 :(得分:3)
您所描述的行为与任何编程语言几乎没有关系。对于C,C ++,actionscript等也是如此。让我这样说,你看到的是非常正常的行为,并且与数字的表示方式有关(参见wiki文章并阅读无符号整数)。 / p>
因为您使用的是uint
(unsigned integer)。这只能是一个正数,你使用的类型不能代表负数,所以如果你采取这样的结果:
uint i = 0;
你从上面减少1
i = i - 1;
在这种情况下,i
不代表负数,因为它是无符号的。然后i
将显示uint
数据类型的最大值。
您在上面发布的编辑
“......在C ++中,......结果相同......”
应该为您提供有关为何发生这种情况的线索,它与您正在使用的语言或完成比较时无关。它与您正在使用的数据类型有关。
作为练习,再次启动C ++程序并编写一个显示uint
最大值的程序。程序不应该显示任何已定义的常量:) ..它也应该带你一行代码!