AS3位移运算符0的作用是什么?

6

我在一些AS 3.0代码中看到了这个:

(duration >> 0)

其中duration是一个数字。我知道什么是按位右移,但是将0位进行移动有什么意义呢?在代码中会多次出现这种情况,我希望能够理解它的作用。


我猜有些人正在猜测如何编码,只是不断地试错。 :( - leppie
如果您展示周围的一些行,我们将有更多的猜测。 - grapefrukt
4个回答

8
有几个原因导致这样做... 首先,在某些情况下,使用左移和右移实际上比乘法和除法更快。 例如,二进制中的数字1是00000001。 将其左移一位变成00000010,现在是2,即1 x 2。 将其左移两次以乘以/除以4,三次以乘以/除以8,四次以乘以/除以16等等... 尽管它不是经常使用的,但在物理引擎从C/C++端口、处理大量数据或一些3D引擎等情况下,我们会看到移位作为原始代码的残留,或者仅仅是为了提高速度。 (例如,你可能会在一些J2ME移动Java游戏中看到它,其中浮点数单元不可用,例如将一个值左移10位,使剩余的10位充当一种小数点。然后在绘制到屏幕位置时将其移回真实值,代价是总体可能的大小)
另一个用途是快速进行Math.floor()运算-但有一个关键的区别。 我几个月前与Box2D合作进行了一些基准测试,并发现它快了数百倍-奇怪的是,我认为这两个转换都是本地处理的。 当舍入负数时, Math.floor(-7.6)=-8 而 (-7.6<<0)=-7 即在数字(浮点数)上<<0会向0的方向舍入。

8

那个链接给我的是404页面。 - AttackingHobo

4

这可能是一种不需要调用Math.floor()函数而摆脱小数的技巧,因为即使以Number作为输入也会得到一个整数。

我不确定这与将x强制转换为int(更常见)相比,性能如何。


3
有时你会在枚举中看到这个选项,仅仅是为了完整性而加入的,例如:
flag0 = 1 >> 0,
flag1 = 1 >> 1,
flag2 = 1 >> 2

等等。如果你在代码中遇到这个,我会认为它只是一些剩余的内容,当时有更多要移动的(测试,变更的需求)。当然,除非这个运算符在AS3中不是移位运算符。例如,在C++中,它还用作输入流运算符(因为你正在将一些输入移动到一些变量中。叹气)。


1
">>" 是 AS3 中的位移运算符。 - Richard Szalay
你是不是想说左移运算符 (<<)? - Tim
1
@Tim Nordenfur:这样更有意义,不是吗?但问题是关于 >> 的 ;) - OregonGhost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接