Javascript 按位操作如何提高Asm.js中的性能?
在Asm.js定义的第一行,有一个基于Asm.js的代码示例,解释了按位操作有助于获得更快的js代码:Javascript 按位操作如何提高Asm.js中的性能?,javascript,bit-manipulation,emscripten,asm.js,Javascript,Bit Manipulation,Emscripten,Asm.js,在Asm.js定义的第一行,有一个基于Asm.js的代码示例,解释了按位操作有助于获得更快的js代码: HEAP32[p >> 2]|0 或 我的问题是,此操作如何提高性能,以及在Asm.js或Emscripten生成的js代码中多次使用此位运算符的原因是什么?位运算符强制其操作数为整数值。这是一种比调用Math.floor等更快的转换方法 p >> 2 是(对于非负值的p)与Math.floor(p/4)使用右位移位()除以1,与除以2相同,但它比实际以10为基数计
HEAP32[p >> 2]|0
或
我的问题是,此操作如何提高性能,以及在Asm.js或Emscripten生成的js代码中多次使用此位运算符的原因是什么?位运算符强制其操作数为整数值。这是一种比调用
Math.floor
等更快的转换方法
p >> 2
是(对于非负值的p
)与Math.floor(p/4)
使用右位移位(
)除以1,与除以2相同,但它比实际以10为基数计算要快,因为计算机只需移位内存中的二进制数字而无需进行计算。就像在10进制中,当你想把一个数字乘以10时,你知道你可以在数字的右边加一个零(相反,除法就是把右边的零去掉)。因此,右移两位数字等于除以2两次(例如24/2=12和12/2=6或24/4=6)
显然,(x+y)|0
只是做一个楼层
p >> 2