可能重复:
>> in javascript
下面:
var num=10;
console.log(num/2);
num=4;
console.log(num/2);
它为我5
和2
。
这一个:
var num=10;
console.log(num>>1);
num=4;
console.log(num>>1);
它还为我提供了5
和2
那么x/2
与x>>1
相同?但为什么呢?
答案 0 :(得分:13)
出于同样的原因,从正常(十进制)数字中删除最后一位数与将其除以10相同(当然,忽略任何非整数余数)。
在计算机中,整数在内部用二进制表示(基数2)。因此,每个数字代表2的幂,而不是我们习惯用十进制系统的10的幂。
>> 1
只是意味着将所有位正确地移位,这是另一种说法“丢弃最后一位数”。由于数字是二进制的,所以相当于除以基数,即2。
同样,如果你需要除以2的任何幂,你可以使用右移运算符:除以4,移2;除以8,移3;等等。
请注意,在内部,执行移位操作而不是除法操作通常更有效,但任何有价值的编译器都会为您执行此优化(这样您就不必编写混淆代码来获得性能好处 - 一般情况下,当你打算直接操作位时,你只能使用移位算子,而当你打算做数学时,你可以使用除法运算符。)
答案 1 :(得分:1)
x>>1
有点移位,对数字binary representation进行操作。结果是x>>n
与x/(2^n)
相同(除了位移通常比除法更快,因为它是较低的级别)。
答案 2 :(得分:0)
当你>>什么,你基本上把它的所有位都移到右边。 当发生这种情况时,将2位值移动到1位值,将4位值移动到2位值,依此类推。 这实际上将一个数字分成两半。 以数字14为例,例如: 1110。 移位时,得到111或7。
答案 3 :(得分:0)