#include <bitset>

bitset

\(bitset\)相当于一个多位二进制数,八位一字节,支持基本的位运算操作。不过对两个数的运算符操作只能对相同长度的\(bitset\)使用。直接输出一个\(bitset\)相当于直接输出一个长度为你定义的\(01\)串,也就是那个二进制数。

声明方式

bitset<5411> s;//中括号中填你需要多少位

相当于一个长达\(5411\)的二进制数字。\(n\)位二进制数执行一次位运算的复杂度可视为\(O(n/32)\),效率较高。

[]

\(s\)[\(k\)]返回\(s\)的第\(k\)位,可以取值也可以赋值。最低位是第\(0\)位,最高位是你定义的位数减一。

s.count()

返回有多少位是\(1\)

s.any()/s.none()

\(s.any\)()返回\(s\)里是否有任意一位为\(1\)。有为\(true\),没有为\(false\)

\(s.none\)()返回\(s\)里是否没有\(1\),如果一个\(1\)都没有返回\(true\),否则返回\(false\)

s.set()/s.reset()/s.flip()

\(s.set\)()表示把\(s\)的每一位都赋值成\(1\)

\(s.set\)(\(k,v\))表示把\(s\)的第\(k\)位赋值成\(v\),相当于\(s[k]=v\)

\(s.reset\)()表示把\(s\)的每一位赋值成\(0\)

\(s.reset\)(k)表示把\(s\)的第\(k\)位赋值成\(0\),相当于\(s[k]=0\)

\(s.flip\)()表示把\(s\)全部取反,相当于\(s=\)~\(s\)

\(s.flip\)(\(k\))表示把\(s\)的第\(k\)位取反,相当于下面这段代码:

bitset<len> s,a;
a[0]=1;
s^=a<<(k-1);

猜你喜欢

转载自www.cnblogs.com/AKMer/p/9894551.html