二进制枚举模板
作者:
dyxxx
,
2023-03-17 17:27:31
,
所有人可见
,
阅读 308
int n = 二进制位数;
// 第一个 for 没问题, 就是 bit 从 0 到 2的n次方-1
// 比如 n=3,bit = 0 ~ 7
for (int bit = 0; bit < (1 << n); ++ bit) {
// 这个就是看二进制比特串的每一位是什么
// 原理就是 比如 10101 要知道第三位是什么
// 其实就是 10101 & 00100
// 如果第三位是 0 那么输出的就一定是 0
// 反之会输出一个非0数(00100)
// 可以看看基础课 位运算 那一块
for (int i = 0; i < n; ++ i) {
// 写法 1
std::cout << (bit & (1 << i)) << ' ';
// 写法 2
std::cout << (bit >> i & 1) << ' ';
// 意思都是 bit 的第 i 位是 1 还是 0
// 输出是正数就代表 1, 输出是 0 就代表 0
}
std::cout << std::endl;
}