00000000000000000000000000000001

00000000000000000000000000000001

我正在尝试了解移位的工作原理。有人可以解释一下这行的意思吗:

while ((n&1)==0) n >>= 1;

其中n是一个整数,请给我一个执行移位时n的示例。

最佳答案

分解:
n & 1将在n和1之间进行二进制比较,即二进制形式的00000000000000000000000000000001。这样,当n以1(正的奇数或负的偶数)结尾时,它将返回00000000000000000000000000000001,否则返回00000000000000000000000000000000

因此,如果n为偶数(或负奇数),则(n & 1) == 0将为true,否则为false。
n >> = 1n = n >> 1等效。这样,它会将所有位右移,这大致相当于被二除(四舍五入)。

如果例如n以12开始,然后以二进制形式为1100。一个循环后为110(6),另一个循环为11(3),然后循环停止。

如果n为0,则在下一个循环之后它将仍然为0,并且循环将是无限的。

关于java - Java中的位移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3901253/

10-09 02:57