Java位运算

Java 位运算

🚀 基础位操作符

Java 里针对整型(int / long)常用的有:

操作 符号 示例 说明
按位与 & 6 & 3 = 2 (110 & 011 = 010) 都为 1 时结果才为 1
按位或 ` ` `6
按位异或 ^ 6 ^ 3 = 5 (110 ^ 011 = 101) 不同为 1,相同为 0
按位取反 ~ ~6 = -7 所有位翻转(包含符号位)
左移 << 3 << 2 = 12 (011 → 1100) 等价于乘以 2 的次方
右移(算术) >> -8 >> 2 = -2 保留符号位,除以 2 的次方
右移(逻辑) >>> -8 >>> 2 符号位也移位,左侧补 0

🚀 常见位操作技巧

  1. 取最低一位的 1

    1
    x & -x

    例:x = 12 (1100)x & -x = 4 (0100)

  2. 去掉最低的 1

    1
    x & (x - 1)

    例:12 (1100)12 & 11 (1011) = 8 (1000)

  3. 判断奇偶

    1
    2
    (x & 1) == 0  // 偶数
    (x & 1) == 1 // 奇数
  4. 取某一位

    1
    ((x >> k) & 1)  // 第 k 位(从 0 开始)
  5. 设置某一位为 1

    1
    x | (1 << k)
  6. 清零某一位

    1
    x & ~(1 << k)
  7. 翻转某一位

    1
    x ^ (1 << k)

🚀 Java 内置的 Long 位方法

Long(同样还有 Integer)里提供了很多工具方法,非常方便:

方法 示例 含义
Long.bitCount(x) bitCount(12) = 2 统计二进制中 1 的个数
Long.numberOfTrailingZeros(x) numberOfTrailingZeros(12)=2 末尾连续 0 的个数,即最低的 1 在第几位
Long.numberOfLeadingZeros(x) numberOfLeadingZeros(12)=60(long 64 位) 前导 0 的个数
Long.highestOneBit(x) highestOneBit(12)=8 返回最高位的 1
Long.lowestOneBit(x) lowestOneBit(12)=4 返回最低位的 1
Long.rotateLeft(x, k) rotateLeft(3, 2) 循环左移
Long.rotateRight(x, k) rotateRight(3, 2) 循环右移
-------------本文结束,感谢您的阅读-------------