位运算知识点概览

前言

计算机位运算是处理整数值的基本操作,直接在二进制位上进行操作。理解位运算的要点对于编程和优化代码非常有用。

常见操作

与、或、非、异或、左移、右移

1. 基本位运算操作

与运算(AND) &
  • 将两个数的对应位进行逻辑与操作。
  • 例子:0101 & 0011 = 0001
或运算(OR) |
  • 将两个数的对应位进行逻辑或操作。
  • 例子:0101 | 0011 = 0111
异或运算(XOR) ^
  • 将两个数的对应位进行逻辑异或操作,不同则为1,相同则为0。
  • 例子:0101 ^ 0011 = 0110
非运算(NOT) ~
  • 将一个数的所有位取反(0变1,1变0)。
  • 例子:~0101 = 1010(假设4位操作)
左移运算(Shift Left) <<
  • 将一个数的所有位向左移动,右边补0。
  • 例子:0101 << 1 = 1010
右移运算(Shift Right) >>
  • 将一个数的所有位向右移动,左边补符号位(对于有符号数)或0(对于无符号数)。
  • 例子:0101 >> 1 = 0010

拓展应用

  • 异或规则:

    x^x=0

    0^x=x

  • 长度为n的掩码:

    (1>>n)-1

  • 数字x移除特定位n:1移动特定位取非后与

    x&~(1<<n)

  • 数字x翻转特定位n:特定位异或1翻转

    x^(1<<n)

  • 比特位x翻转:

    x^1

  • 数字x取非:

    ~x

  • 数字x不存在连续的bit位为1:错位后与是否为0

    (x&(x>>1))==0

  • 字符串字符比特位标记:bitArray为转换后的数字,c为当前的字符

    bitArray|=1<<(c-'a')

  • 一个字符串是否包含另一个字符串:字符串转换成对应数字后比较

    bitArray_1&bitArray_2=bitArray_1

  • 数字i转换为n+1位的二进制比特位字符,避免高位为0丢弃。

    Integer.toBinaryString((1 << n) | i)

  • 清整数number的最后位比特位

    number=number&(number-1)

  • 枚举集合子集元素集合总数,0为空集,(1<<n)-1为全集。

   [0,1<<n)

  • 数字i中对应比特位j是否为1

 (i&(1<<j))==(1<<j)

  • bit位逐步比较

public static int countBits(int number) {
        int count = 0;
        while (number != 0) {
            count += number & 1; // Check the least significant bit
            number >>= 1; // Right shift by 1
        }
        return count;
    }

  •  bit位尾数清零

public static int countBits(int number) {
        int count = 0;
        while (number != 0) {
            number &= (number - 1); 
            count++;
        }
        return count;
    }

  • 判断一个数是否是2的幂(只有一个bit位为1)

boolean isPowerOfTwo(int x) {
    return x > 0 && (x & (x - 1)) == 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值