>>是什么运营商在Javascript中做什么?

时间:2011-09-11 12:27:21

标签: javascript

  

可能重复:
  >> in javascript

我正在浏览一些代码,我遇到了两个奇怪的运算符:>><<, 以2<<3442132132>>546542132

的形式

我推断x<<y代表x 2y4<<3。含义4*(Math.pow(2,3))32,即x>>y,但我找不到0的含义。

我知道它通常会返回{{1}}的小数字,但是当涉及高数字时,结果通常是一个很小的数字。

5 个答案:

答案 0 :(得分:6)

来自Mozilla

  

左移a&lt;&lt; b将二进制表示b(<32)位移位到   左边,从右边移动零。
签署权利   移动&gt;&gt; b将二进制表示b(&lt; 32)位移位到   对,丢弃的位被移开。

对于只有32位宽的数字,

442132132>>546542132似乎过多。

答案 1 :(得分:6)

>> operator将左侧值右移位。

a >> b相当于parseInt(a / Math.pow(2, b))

例如:

 1 >> 0 == 1
 4 >> 1 == 2
 6 >> 1 == 3
42 >> 3 == 5
0x120 >> 4 == 0x12
0x129 >> 4 == 0x12
0x12f >> 4 == 0x12
0x130 >> 4 == 0x13

答案 2 :(得分:1)

<<是按位左操作符,>>是按位右操作符。

这些将等式一侧的值移动到另一侧的值。

答案 3 :(得分:1)

它被转换为二进制,然后向左或向右移动。像2 << 3

0000010

变为:

0010000

如果您将其转换回来,则为16。

>>反之亦然:(16 >> 3) === 2

答案 4 :(得分:1)

这些是二元移位运算符。甲

如您所知,数字在计算机中以二进制表示(6 = 110,9 = 1001等)

左位移“&lt;&lt;”将二进制数字向左移动。例如,6 << 2移位6(即110)两个二进制数字。

另请注意,在32位环境中,32位将用于表示整数,因此6将是:

0000 0000 0000 0000 0000 0000 0000 0110

6&lt;&lt; 2(6向左移2):

0000 0000 0000 0000 0000 0000 0001 1000

6&gt;&gt; 2(6向右移2):

0000 0000 0000 0000 0000 0000 0000 0001