我正在查看 Stack 上的一些素数代码并找到了这个。
我尝试对此进行了一段时间的试验并发现了这一点:
var i = 5;
var j = 0;
如果我写 j = i << 1,它所做的只是将 (i * 2) ie - 10 在这种情况下分配给 j
如果我写 j = i << 2, (i * 2) * 2 即 - 10 * 2 .....等等。
现在我怀疑这个操作员实际上是做什么的?
我尝试用谷歌搜索,但没有找到任何直接的解决方案。
我正在查看 Stack 上的一些素数代码并找到了这个。
我尝试对此进行了一段时间的试验并发现了这一点:
var i = 5;
var j = 0;
如果我写 j = i << 1,它所做的只是将 (i * 2) ie - 10 在这种情况下分配给 j
如果我写 j = i << 2, (i * 2) * 2 即 - 10 * 2 .....等等。
现在我怀疑这个操作员实际上是做什么的?
我尝试用谷歌搜索,但没有找到任何直接的解决方案。
这些是Javascript中的位运算符。
按位运算符将其操作数视为 32 位(零和一)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字 9 的二进制表示为 1001。按位运算符在这种二进制表示上执行操作,但它们返回标准的 JavaScript 数值。
左移运算符:
a << b :将二进制表示中的 a b (< 32) 位左移,从右移零。
<<
是左移运算符。每个位将左移指定的次数。示例:n<<2
将按位移动n
2 次,向右添加零。
n=4 // 0000 0000 0000 0100
n<<2 //<= 0000 0000 0001 0000 - Value is 16
<<
运算符[ ES5 规范]是左移位运算符。它取左边的数字,并移动与右边数字一样多的位。i << 2
,例如,会将 的数字i
向左移动 2 位。
var i = 5; // i: 0000 0000 0000 0101
i = i << 2; // i: 0000 0000 0001 0100