Javascript 什么';s>&燃气轮机&燃气轮机;操作人员

Javascript 什么';s>&燃气轮机&燃气轮机;操作人员,javascript,operators,Javascript,Operators,在Mozilla网站的filter文档页面中,我看到>操作员: var t = Object(this), len = t.length >>> 0, //here res, thisp, i, val; if (typeof fun !== 'function') { throw new TypeError(); } 在这里您可以找到完整的文档: 这个运算符是什么?它的作用是什么?称为带零的按位右移运算符。此运算符与>>运算符类似,只是左侧移入的

在Mozilla网站的
filter
文档页面中,我看到
>
操作员:

var t = Object(this),
     len = t.length >>> 0, //here
     res, thisp, i, val;
if (typeof fun !== 'function') {
    throw new TypeError();
}
在这里您可以找到完整的文档:


这个运算符是什么?它的作用是什么?

称为带零的按位右移运算符。此运算符与>>运算符类似,只是左侧移入的位始终为零

例如:(A>>>1)是1

更新:
这解释了按位移位运算符的作用:

它是一个位移位运算符

a>>>b
将二进制表示法中的a向右移位b位,丢弃移位后的位,并从左移位0


不过,这并不能解释为什么有人会费心将一个值的零位右移。你也可以将它乘以一,或者加上零。

正如其他人所解释的,它是“带零的按位移位”运算符

对于正值,这与正常的
>
运算符具有相同的效果。对于负值,最高有效位是“符号”位。正常移位将符号位移入(1表示负值,0表示正值)<代码>>>具有不同的效果,因为它总是以零而不是符号位移位:

-2>>1 == -1
-2>>>1 == 2147483647
更多关于如何表示负值的信息可以找到

所有移位运算符所做的是将值强制转换为32位整数(至少我的Firefox是这样做的),因此按
0
移位意味着该值将始终在32位范围内。使用
0进行位移位也将确保值为正值:

a = Math.pow(2,32)       // overflow in 32-bit integer
a>>0 == 0
b = Math.pow(2,32) - 1   // max 32-bit integer: -1 when signed, 4294967295 when unsigned
b>>0 == -1
b>>>0 == 4294967295      // equal to Math.pow(2,32)-1

这是一个按位右移运算符。MDN有一个很好的解决方案。应该有助于找到它们,因为它们可能是搜索时所特有的。此处或dupe中的任何答案都不包括特殊(也是最重要的)情况
>>0
。除非您已经知道>>操作符的工作,否则这不会解释太多。或者
A
的值是什么。
A>>1
也是
1
。当移动负值时,差异是可见的:
-2>>1=-1
,但是
-2>>1=2147483647
。因此值总是正值?@rps:是的,结果总是正值。这不是运算符的核心意图,但只要您的数字符号位存储为MSB中的
1
。+1以解释两者之间的差异,这就是运算符的作用。但这也提出了一个问题,您希望何时使用
>
运算符代替
运算符?我的猜测是它稍微便宜一点,如果你用它来计算数字,而你确信你的数字会保持正数,那么你可以通过使用
>
来节省一点钱。而且它似乎会产生一个非常大的正数!这也是它的显著效果吗?我刚刚读到mozilla使用它来确保数组长度为非负且在2次方32以内,这可能是确保处理的是数字而不是字符串的一种方法。
>0
将重置符号位:
-1>>0==4294967295
,这个问题解释了为什么这样做。