">>1" equals "/2"?

">>1" equals "/2"?

本文关键字:quot gt equals      更新时间:2023-09-26

可能的重复项:
>> 在 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一样?但是为什么?

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

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

>> 1只是意味着将所有位向右移动一个,这是"删除最后一个数字"的另一种说法。由于数字是二进制的,这相当于除以基数,即 2。

同样,如果您需要除以 2 的任何幂,则可以使用右移位运算符来实现:除以 4,移位 2;除以 8,移位 3;依此类推。

请注意,在内部,执行移位操作通常比除法操作更有效,但任何值得一提的编译器都会为您进行此优化(这样您就不必编写混淆代码来获得性能优势 - 通常,只有当您打算直接操作位时,您才会使用 shift 运算符, 并在您打算进行数学运算时使用除法运算符(。

x>>1是一个位移,它对数字的二进制表示进行操作。效果是x>>nx/(2^n)相同(除了位移通常比除法快,因为它是较低的级别(。

当你>>某样东西时,你基本上会把它的所有位都向右移动。发生这种情况时,您将 2 位值转换为 1 位值,将 4 位值转换为 2 位值,依此类推。这有效地将数字分成两半。以数字 14 为例:1110.当你移动位时,你会得到 111 或 7。

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

您需要了解的有关>>的所有信息都可以在这里和这里找到。