java - Java 中的位移

标签 java bit-manipulation shift

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

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/

相关文章:

python - 矩阵移位的问题

java - 如何表达对 Spring 中导入配置中定义的 bean 的依赖关系?

java - 删除插入到作为队列实现的 LinkedList 中的任何对象

java - EJB中的代理对象

php - 使用按位运算符的不同模块的用户角色权限

c++ - 使用移位位的问题(检查二进制数是否是回文)

c - 平方根 union 和位移位

java - 修剪对象数组

c++ - 二进制加法从左到右进位

c# - 更新后图像未保存,在 c# 中使用 FileStream 或简单位图