Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按位操作如何提高Asm.js中的性能?_Javascript_Bit Manipulation_Emscripten_Asm.js - Fatal编程技术网

Javascript 按位操作如何提高Asm.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为基数计

在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为基数计算要快,因为计算机只需移位内存中的二进制数字而无需进行计算。就像在10进制中,当你想把一个数字乘以10时,你知道你可以在数字的右边加一个零(相反,除法就是把右边的零去掉)。因此,右移两位数字等于除以2两次(例如24/2=12和12/2=6或24/4=6)

显然,
(x+y)|0
只是做一个
楼层

p >> 2