位运算符

位运算概述

从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

符号 描述 运算规则
& 两个位都为1时,结果才为1
| 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

指定位置的位运算

  1. 将 x 最右边的 n 位清零:x & (~0 << n)
  2. 获取 x 的第 n 位值(0 或者 1): (x >> n) & 1
  3. 获取 x 的第 n 位的幂值:x & (1 << n)
  4. 仅将第 n 位置为 1:x | (1 << n)
  5. 仅将第 n 位置为 0:x & (~ (1 << n))
  6. 将 x 最高位至第 n 位(含)清零:x & ((1 << n) - 1)

实战位运算要点

  1. 判断奇偶:

    • x % 2 == 1 —> (x & 1) == 1
    • x % 2 == 0 —> (x & 1) == 0
  2. x >> 1 —> x / 2.

即: x = x / 2; —> x = x >> 1;

`mid = (left + right) / 2; —> mid = (left + right) >> 1; `
  1. X = X & (X-1) 清零最低位的 1

  2. X & -X => 得到最低位的 1

  3. X & ~X => 0

原文地址:https://www.cnblogs.com/zhaohaiyu/p/13746045.html