使用uint的简单行为很简单

时间:2012-08-15 17:47:49

标签: actionscript-3

这可以按预期工作:

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,我得到了相同的结果。可能在减量后评估条件。

1 个答案:

答案 0 :(得分:3)

您所描述的行为与任何编程语言几乎没有关系。对于C,C ++,actionscript等也是如此。让我这样说,你看到的是非常正常的行为,并且与数字的表示方式有关(参见wiki文章并阅读无符号整数)。 / p>

因为您使用的是uintunsigned integer)。这只能是一个正数,你使用的类型不能代表负数,所以如果你采取这样的结果:

uint i = 0;

你从上面减少1

i = i - 1;

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

您在上面发布的编辑

  

“......在C ++中,......结果相同......”

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

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