Ericnth的小站

  • 与、或、异或、非
  • 左移和右移
  • 你可能还想了解...
  • 首页
  • 编程学习笔记
  • 系统与软件
  • 摄影
  • 随笔
  • 论坛
  • 公告

位运算学习笔记

  • Zhang, Xuheng
  • 2021-02-03
  • 0

为了初赛写的。。

与、或、异或、非

非 $¬$ 取反。

与 $∧$ 只有两个对应位都为 $1$ 时才为 $1$。

或 $∨$ 只要两个对应位中有一个 $1$ 时就为 $1$。

异或 ^ 只有两个对应位不同时才为 $1$。

$a$ ^ $b$ ^ $b=a$

补码:在二进制表示下,正数和 $0$ 的补码为其本身,负数的补码是将其对应正数按位取反后加一。

左移和右移

```num << i``` 表示将 $num$ 的二进制表示向左移动 $i$ 位所得的值。 ```num >> i``` 表示将 $num$ 的二进制表示向右移动 $i$ 位所得的值。

int mulPowerOfTwo(int n, int m) {  // 计算 n*(2^m)
  return n << m;
}
int divPowerOfTwo(int n, int m) {  // 计算 n/(2^m)
  return n >> m;
}

判断一个数是不是 2 的非负整数次幂

bool isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; }

对 2 的非负整数次幂取模

int modPowerOfTwo(int x, int mod) { return x & (mod - 1); }

判断符号是否相同

bool isSameSign(int x, int y) {  // 有 0 的情况例外
  return (x ^ y) >= 0;
}

获取一个数二进制的某一位

// 获取 a 的第 b 位,最低位编号为 0
int getBit(int a, int b) { return (a >> b) & 1; }

将一个数二进制的某一位设置为 0

// 将 a 的第 b 位设置为 0 ,最低位编号为 0
int unsetBit(int a, int b) { return a & ~(1 << b); }

将一个数二进制的某一位设置为 1

// 将 a 的第 b 位设置为 1 ,最低位编号为 0
int setBit(int a, int b) { return a | (1 << b); }

将一个数二进制的某一位取反

// 将 a 的第 b 位取反 ,最低位编号为 0
int flapBit(int a, int b) { return a ^ (1 << b); }

你可能还想了解...

  • A Bayesian Analysis of High School Acceptance Rates in Shanghai
  • HYRing项目代码解读
  • 算法讲解之贪心算法(转)
  • 算法讲解之回溯法(转)
  • C/C++ IDE推荐
© 2023 Ericnth的小站
Theme by Wing
沪ICP备2020025694号 沪公网安备31011202012861号
  • {{ item.name }}
  • {{ item.name }}