在Asm.js定义的第几行中,有一个基于ASM.js的代码示例,它解释了按位操作有助于获得更快的JS代码:
HEAP32[p >> 2]|0或
(x+y)|0我的问题是,这个操作如何提高性能,在Asm.js或Emscripten生成的JS代码中多次使用这个位运算符的原因是什么?
发布于 2014-05-02 20:13:19
按位运算符强制其操作数为整数值。这是一种比调用Math.floor更快的转换方式。
p >> 2(对于p的非负值)与Math.floor(p / 4)相同。
发布于 2014-05-02 20:13:38
使用右位移位(>>)除以1与除以2相同,但它比实际计算基数10要快,因为计算机只需在内存中移动二进制数字,而不必进行计算。就像在基数10中,当你想把一个数字乘以10,你知道你只需要在数字的右边加一个零(相反,除法,从右边取零)。因此,通过向右移动两位数字,你等于除以2倍(例如24/2 = 12和12/2 =6或24/4 = 6)。
显然,(x+y)|0只是做floor的a faster way。
https://stackoverflow.com/questions/23436159
复制相似问题