位运算学习笔记

Hello, 欢迎登录 or 注册!

/ 0评 / 0

本文作者:  本文分类:编程学习笔记  浏览:561
阅读时间:756字, 约1-1.5分钟

为了初赛写的。。

与、或、异或、非

非 $¬$ 取反。

与 $∧$ 只有两个对应位都为 $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); }

关于作者

本作品采用 知识共享署名-非商业性使用 3.0 (CC BY-NC 3.0) 许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。