位运算

作者: 倚仗听江 | 来源:发表于2020-09-04 13:53 被阅读0次

实战位运算要点:

  • 判断奇偶
    x % 2 == 1 → x & 1 == 1
    x % 2 == 0 → x & 0 == 0
  • x >> 1 → x / 2
    即:x = x / 2; → x = x >> 1 (常见于JDK源码)
    mid = (left + right) / 2 → mid = (left + right) >> 1;
  • x = x & (x - 1) 消去最低位的1
  • x & ~x → 0 消去最低位的1 等价于x = x & (x - 1)
public static void main(String[] args) {
        System.out.println(12 & ~ -12); //8
        System.out.println(12 & (12 - 1)); //8
    }
  • x & -x 得到最低位的1

实战
LeetCode191题 位1的个数 https://leetcode-cn.com/problems/number-of-1-bits/
这题用简单的循环当然可以做,但是用位运算更加的方便
就用上面所说的一条:x = x & (x - 1) 来消去最低位的1,以此来判断1的个数

public static int hammingWeight(int n) {
        int sum = 0;
        while (n != 0) {
            sum++;
            n &= (n - 1);
        }
        return sum;
    }

当然,这样也是可以的

public static int hammingWeight(int n) {
        int sum = 0;
        while (n != 0) {
            sum++;
            n = n & ~ -n;
        }
        return sum;
    }

LeetCode第231题 2的幂 https://leetcode-cn.com/problems/power-of-two/
如果是2的幂。那么二进制为必然只有一个1,那么消去它就变成了0。不过这里需要注意越界的问题,应该把n转为long类型。

public static boolean isPowerOfTwo(int n) {
        long x = (long) n;
        return n != 0 && (x & (x - 1) ) == 0;
    }

LeetCode 190 颠倒二进制位
这种题你把它转成字符串在reverse再转回来的确是可以做的,但是太复杂了。使用位运算就能变的十分简单。用n&1不断取出n的最后一位,再放到ans中即可。

public static int reverseBits(int n) {
        int ans = 0;
        for (int i = 0; i < 32; i++) {
            ans = (ans << 1) + (n & 1);
            n = n >> 1;  
        }
        return ans;
    }

相关文章

  • 3、小众运算符の大课堂(一)

    较为简单の位运算符: & 位与运算| 位或运算^ 位异或运算~ 位取反运算 举例: 要做位运算,首先要把数据转...

  • 位运算及其应用

    内容概要: 位运算基本操作 基于位运算的状态压缩 位运算经典应用 位运算解N皇后问题 位运算 符号描述规则&与1&...

  • 位运算及用位运算实现权限控制

    请自行补习位运算相关知识 位运算 位运算示例 权限控制

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 强大的位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作位取反运算符.png 位与运算符 位与运算符(&)可以...

  • 位运算

    位运算 1. &:按位与 规律:一假则假任何位上的数和1相&得到的结果还是那个数 2. |:按位或 规律:一真则真...

  • 位运算

    https://leetcode.com/problems/gray-code/description/这个位运算...

  • 位运算

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不...

  • 位运算

    1.不用加减乘除做加法 解法:分为三步①各位相加不进位,即先按位异或;②做进位,按位与并左移位;③结果相加,直至没...

  • 位运算

    位运算不仅可以简化某些复杂的操作,而且具有更快的计算速度。典型的应用就是除法,交换两个数值,以及在一个数组中寻找只...

网友评论

      本文标题:位运算

      本文链接:https://www.haomeiwen.com/subject/gtczsktx.html