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);