本文作者:Zhang, Xuheng
本文分类:编程学习笔记 浏览:1549
阅读时间: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); }
关于作者Zhang, Xuheng
- 还没有填写个人简介
- Email: hy23682@126.com
- 注册于: 2020-04-07 05:11:14