Javascript &引用&燃气轮机&燃气轮机;1“;等于/“2”字;?

Javascript &引用&燃气轮机&燃气轮机;1“;等于/“2”字;?,javascript,binary,bit-manipulation,Javascript,Binary,Bit Manipulation,可能重复: 在这里: 它给了我5和2 还有这个: var num=10; console.log(num>>1); num=4; console.log(num>>1); 它还为我提供了5和2 那么x/2与x>>1相同吗?但是为什么呢?出于同样的原因,从正常(十进制)数中去掉最后一个数字等于将其除以10(当然,忽略任何非整数余数) 在计算机中,整数在内部用二进制(基数2)表示。所以每个数字代表2的幂,而不是我们习惯于十进制的10的幂 >1的意思是将所有位右移一位,这是

可能重复:

在这里:

它给了我
5
2

还有这个:

var num=10;
console.log(num>>1);
num=4;
console.log(num>>1);
它还为我提供了
5
2


那么
x/2
x>>1
相同吗?但是为什么呢?

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

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

>1
的意思是将所有位右移一位,这是另一种表示“删除最后一位”的方式。因为数字是二进制的,这就等于除以基数2

类似地,如果需要除以2的任意幂,可以使用右移位运算符进行操作:除以4,移位2;除以8,再除以3;等等


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

当您>>某件事时,您基本上会将其所有位向右移位。 发生这种情况时,将2位值转换为1位值,将4位值转换为2位值,依此类推。 这有效地将一个数字一分为二。 以数字14为例: 1110 当你移动位时,得到111,或7

看看这个:
你需要知道的关于
的所有信息都可以找到,而且。

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

你熟悉整数的二进制表示吗?我想你只需要了解
>
操作符的功能…谷歌搜索“位移位操作”,那么我应该使用
>>1
来优化我的代码吗?@Derek:除非你能证明(通过基准测试)1)包含分区的代码段是应用程序中的瓶颈,2)将分区更改为移位实际上可以提高性能。大多数编译器都会为您这样做,所以一般来说,将除法改为移位只会导致代码可读性较差,性能相当。
var num=10;
console.log(num>>1);
num=4;
console.log(num>>1);