我正在尝试了解移位的工作原理。有人可以解释一下这行的意思吗:
while ((n&1)==0) n >>= 1;
其中
n
是一个整数,请给我一个执行移位时n
的示例。 最佳答案
分解:n & 1
将在n和1之间进行二进制比较,即二进制形式的00000000000000000000000000000001
。这样,当n以1(正的奇数或负的偶数)结尾时,它将返回00000000000000000000000000000001
,否则返回00000000000000000000000000000000
。
因此,如果n为偶数(或负奇数),则(n & 1) == 0
将为true,否则为false。n >> = 1
与n = n >> 1
等效。这样,它会将所有位右移,这大致相当于被二除(四舍五入)。
如果例如n以12开始,然后以二进制形式为1100。一个循环后为110(6),另一个循环为11(3),然后循环停止。
如果n为0,则在下一个循环之后它将仍然为0,并且循环将是无限的。
关于java - Java中的位移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3901253/