目的>> 0和>>> 0

时间:2016-01-14 18:23:20

标签: javascript

This sample code from Mozilla's JS reference使用>>和>>> RHS参数为0的运算符。我猜这是Math.floor()的替代方法,它具有性能优势,因为它使用内置运算符而不必查找函数。但是>>的区别是什么vs>>>零班制?

2 个答案:

答案 0 :(得分:2)

来自MDN Article

>>Sign-propagating right shift

  

向右移位二进制表示b(< 32)位,丢弃移位的位。

>>>Zero-fill right shift

  

向右移位二进制表示b(<32)位,丢弃移位的位,并从左移零。

所以不同的是,一个人会从左边移零。

this stackoverflow answer谈到零班:

  

因此,在没有实际效果的情况下执行按位运算,例如向右移位0位&gt;&gt; 0,是一种快速的方法来舍入数字并确保它在32位int范围内。另外,三重&gt;&gt;运算符在执行无符号运算后,将其计算结果转换为无符号整数而不是其他有符号整数,因此可将其用于将负数转换为32位二进制补码版本为大号。使用&gt;&gt;&gt; 0可确保您获得0到0xFFFFFFFF之间的整数。

答案 1 :(得分:1)

它将它们转换为可以表示为32位无符号整数的数字。所以是的,它会使它(一个数字类型)作为一个内置的int,它也会使它成为一个32位无符号,JS编程喜欢它:)

主要区别在于签名与未签名。