【问题标题】:what does `<<` syntax means in Javascript? [duplicate]`<<` 语法在 Javascript 中是什么意思? [复制]
【发布时间】:2013-06-17 22:01:42
【问题描述】:

我知道这很愚蠢,但无论如何我在 SO 中遇到了这段代码。

var total = 0;
for (var i = 0; i < someArray.length; i++) {
   total += someArray[i] << 0;
}

这是获取数组值的总和。但我不明白最后一行。

total += someArray[i] << 0;
               //-----^^--here

&lt;&lt; 是什么意思?这段时间我是不是错过了什么。是的!!为什么&lt;&lt;

【问题讨论】:

标签: javascript


【解决方案1】:

&lt;&lt;&gt;&gt; 是位移操作,取一个整数并将所有位向左 (&lt;&lt;) 或向右 (&gt;&gt;) 移动 1 位。如果后跟另一个数字,则移位发生在那么多位上,因此256 &lt;&lt; 4256 的位模式向左移动 4 位(从右侧用四个零填充位模式)。

大多数编程语言都支持这些运算符,并且您通常没有理由使用它们,除非您编写的代码必须针对(通常是超快速的)整数运算的位模式进行操作。

作为 JavaScript 中的一个很好的怪癖,如果你对一个数字应用按位运算,它会被强制为一个整数,所以移动 0 位,或者用 0 进行或操作,... | 0 将把“一个数字”变成一个 32 位整数。

【讨论】:

  • 下一个问题是“为什么&lt;&lt; 0
【解决方案2】:

在您的示例中,左移 bitwise operator 用于将值强制转换为 32 位整数。从我刚刚链接的 MDN 页面:

移位运算符以大端顺序将其操作数转换为 32 位整数,并返回与左操作数相同类型的结果。

通常,JavaScript 中的数字是双精度浮点数。

【讨论】:

    【解决方案3】:

    下一个问题是“为什么是

    全部 JavaScript 中的bitwise / bitshift operators 在两个参数上调用[ToInt32]

    因此,x &lt;&lt; 0(如本例中)、x | 0~~x 具有将值强制转换为 [0, 2^32) 内的整数 的效果。

    将此与 +x 进行比较,后者仅将 x 强制转换为数字。

    【讨论】:

    • 列表中还有一个:~~x,即double bitwise NOT。另请注意,与Math.floor 不同,这些按位技巧总是向向零舍入
    • @MattiasBuelens 感谢您的精彩补充。
    • 是的!谢谢(也提供链接)..:)
    猜你喜欢
    • 2015-07-15
    • 2018-07-17
    • 2010-10-05
    • 2013-11-02
    • 1970-01-01
    • 2011-04-16
    • 2011-11-18
    • 1970-01-01
    • 2014-11-07
    相关资源
    最近更新 更多