Java 位运算算法题目练习

好的,我们可以来做一系列 Java 位运算的练习题目,从基础到进阶,让你系统练习。每道题我会附上 题目描述 和 思路提示,你可以先尝试自己写代码。


1. 判断奇偶数

题目:给定一个整数 n,判断它是奇数还是偶数,不使用 % 运算符。

思路提示

  • 使用位运算 & 1 可以得到最低位。
  • 如果最低位为 1 → 奇数;为 0 → 偶数。
public boolean isOdd(int n) {
    return (n & 1) == 1;
}

2. 交换两个整数

题目:不使用临时变量,交换两个整数 a 和 b

思路提示

  • 可以使用 XOR 位运算:
a = a ^ b;
b = a ^ b;
a = a ^ b;

3. 计算整数的二进制中 1 的个数(汉明重量)

题目:给定一个整数 n,计算它的二进制表示中 1 的数量。

思路提示

  • 使用 n & (n-1) 可以去掉最低位的 1。
  • 循环直到 n 为 0。
public int countOnes(int n) {
    int count = 0;
    while (n != 0) {
        n = n & (n - 1);
        count++;
    }
    return count;
}

4. 判断是否为 2 的幂

题目:给定整数 n,判断它是否是 2 的幂。

思路提示

  • 2 的幂在二进制中只有一个 1。
  • 判断公式:n > 0 && (n & (n - 1)) == 0
public boolean isPowerOfTwo(int n) {
    return n > 0 && (n & (n - 1)) == 0;
}

5. 找出数组中唯一出现一次的数字

题目:数组中其他数字出现两次,只有一个数字出现一次,找出这个数字。

思路提示

  • 使用 XOR 可以抵消重复的数字。
  • 时间复杂度 O(n),空间复杂度 O(1)。
public int singleNumber(int[] nums) {
    int result = 0;
    for (int num : nums) {
        result ^= num;
    }
    return result;
}

6. 交换两个整数的奇偶位

题目:给定一个整数,将它的奇数位和偶数位交换。例如,二进制 1010 → 0101

思路提示

  • 使用掩码提取奇数位和偶数位:
    • 偶数位掩码:0xAAAAAAAA
    • 奇数位掩码:0x55555555
  • 左移和右移交换位置,然后 OR。
public int swapOddEvenBits(int n) {
    int even = n & 0xAAAAAAAA;
    int odd  = n & 0x55555555;
    return (even >>> 1) | (odd << 1);
}

7. 只出现一次的数字 II

题目:数组中其他数字出现三次,只有一个数字出现一次,找出这个数字。

思路提示

  • 对每一位计数,能被 3 整除的位忽略,剩下的就是只出现一次的数字。
  • 可使用位运算或三状态累加器。

我可以帮你整理一份 进阶 Java 位运算刷题清单,包含 10~15 道经典面试题,从基础到困难,覆盖 奇偶判断、交换、计数、异或、掩码操作、进制变换 等。

你想让我整理吗?

文章已创建 5021

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部