我正在尝试了解位移位的工作原理。有人可以解释一下这行的含义吗:
while ((n&1)==0) n >>= 1;
其中 n
是一个整数,并给我一个执行移位时 n
的示例。
最佳答案
分解:
n & 1
将在 n 和 1 之间进行二进制比较,即二进制的 00000000000000000000000000000001
。因此,当 n 以 1(正奇数或负偶数)结尾时,它将返回 00000000000000000000000000000001
,否则返回 00000000000000000000000000000000
。
(n & 1) == 0
因此,如果 n 为偶数(或负奇数),则为 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/