bitset
作者:
I168
,
2023-11-26 23:19:22
,
所有人可见
,
阅读 85
int main() {
/*
O(1);
参数: unsigned int, 32bit
后面加ll为: unsigned long long, 64bit
例如: __builtin_popcountll()
*/
int x = 2; //00000000 00000000 00000000 00000010
cout << __builtin_popcount(x) << endl; //1 二进制1的个数
int cnt = __builtin_popcount(x);
cout << __builtin_parity(x) << endl; //1 cnt为奇数,结果为1,否则为0
cout << __builtin_ctz(x) << endl; //1 二进制末尾0的个数
cout << __builtin_clz(x) << endl; //30 二进制前面0的个数
bitset<100> f, g;
/*
f.any(): 是否有1
f.none(): 是否全为0
f.count(): 1的个数
支持: & | ^ ~ << >>
f.set(x): 第x位变为1
f.set(): 所有位变为1
f.reset(x): 第x位变为0
f.reset(): 所有位变为0
f.flip(x): 第x位翻转
f.flip(): 所有位翻转
f.to_string(): 输出bitset每一位(从高到低)
*/
for (int i = f._Find_first(); i != f.size(); i = f._Find_next(i)) {
cout << i << endl;
/*
f._Find_first(): 找到f中第一个1的下标
f._Find_next(i): 找到从i开始的下一个1的下标
f.size(): bitset大小
*/
}
return 0;
}