1. 程式人生 > >#include <bitset>

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