AS3按位移位0?

时间:2009-06-25 10:13:54

标签: actionscript-3 bit-shift bitwise-operators

我在一些AS 3.0代码中遇到过这个问题:

(duration >> 0)

持续时间为Number。我想我知道bitwise right shift的作用是什么,但是0位的转移是什么意思?这在代码中发生了几次,我想了解它的作用。

4 个答案:

答案 0 :(得分:8)

数字到整数转换 使用int(x)在AS3中快10%。在AS2中,按位版仍然可以更好地工作。

x = int(1.232)

//等于: x = 1.232> 0;

最佳解释:http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/das

答案 1 :(得分:8)

这有几个原因..

首先,在某些情况下,乘法和除法实际上更快 当我们使用左移时,右移...

即。二进制数1是00000001 将其左移至00000010,现在为2 ..即1 x 2

将它移动两次乘以/除以4,3次为8次,4次为16次等等。

它的使用频率不高,但在像C / C ++的物理引擎端口,处理大量数据或某些3d引擎的情况下,我们会看到转变是原始代码的替代品,或者只是速度。

(例如,您可能会在某些J2ME移动Java游戏中看到它,其中浮点单元不可用,即将值向左移10位,因此剩下的10位就像一种小数点...然后移动它在绘制到屏幕位置时返回真实值,代价是整体可能的大小)

如上所述的其他用途是快速Math.floor(); - 但有一个关键的区别。 几个月前我使用Box2D做了一些基准测试,发现它快了几百倍 - 奇怪,因为我认为两次转换都是原生处理的。

舍入负数时,
Math.floor(-7.6)= - 8 和 (-7.6 <&lt; 0)= -7

即。 &lt;&lt;&lt; 0 on Number(float)将在0方向上循环。

答案 2 :(得分:4)

在没有调用Math.floor()的开销的情况下摆脱小数可能是一个技巧,因为即使使用Number作为输入,您也会得到一个整数。

我不确定这是如何将性能明智地与执行(更常见的)强制转换为int(x)的对比

答案 3 :(得分:3)

有时你会在枚举中看到这只是为了完整,即

flag0 = 1 >> 0,
flag1 = 1 >> 1,
flag2 = 1 >> 2

等等。如果你在代码中遇到这种情况,我希望它只是从实际上有更多转移(测试,更改要求)时的剩余部分。当然,除非该运营商不是AS3中的轮班运营商。例如,在C ++中,它也被用作输入流操作符(你知道,因为你将一些输入转换成某个变量。叹气)。