“>> 1”等于“/ 2”?

时间:2011-12-11 03:00:28

标签: javascript binary bit-manipulation

  

可能重复:
  >> in javascript

下面:

var num=10;
console.log(num/2);
num=4;
console.log(num/2);

它为我52

这一个:

var num=10;
console.log(num>>1);
num=4;
console.log(num>>1);

它还为我提供了52 那么x/2x>>1相同?但为什么呢?

4 个答案:

答案 0 :(得分:13)

出于同样的原因,从正常(十进制)数字中删除最后一位数与将其除以10相同(当然,忽略任何非整数余数)。

在计算机中,整数在内部用二进制表示(基数2)。因此,每个数字代表2的幂,而不是我们习惯用十进制系统的10的幂。

>> 1只是意味着将所有位正确地移位,这是另一种说法“丢弃最后一位数”。由于数字是二进制的,所以相当于除以基数,即2。

同样,如果你需要除以2的任何幂,你可以使用右移运算符:除以4,移2;除以8,移3;等等。

请注意,在内部,执行移位操作而不是除法操作通常更有效,但任何有价值的编译器都会为您执行此优化(这样您就不必编写混淆代码来获得性能好处 - 一般情况下,当你打算直接操作位时,你只能使用移位算子,而当你打算做数学时,你可以使用除法运算符。)

答案 1 :(得分:1)

x>>1有点移位,对数字binary representation进行操作。结果是x>>nx/(2^n)相同(除了位移通常比除法更快,因为它是较低的级别)。

答案 2 :(得分:0)

当你>>什么,你基本上把它的所有位都移到右边。 当发生这种情况时,将2位值移动到1位值,将4位值移动到2位值,依此类推。 这实际上将一个数字分成两半。 以数字14为例,例如: 1110。 移位时,得到111或7。

看看这个: http://en.wikipedia.org/wiki/Division_by_two#Binary

答案 3 :(得分:0)

您需要了解>>所需的所有内容herehere