#include <bitset>
阿新 • • 發佈:2018-11-02
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.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);