昨天cf題目全是二進制操作, 發現二進制在各種題中出現還挺多的, 學習了一下bitset
bitset是C++語言的一個類庫,用來方便地管理一系列的bit位。
bitset存儲二進制數位。
bitset就像一個bool類型的數組一樣,但是有空間優化。
bitset中的每個元素都能單獨被訪問,例如對於一個叫做a的bitset,表達式a[3]訪問了它的第4個元素,就像數組一樣。
(但是輸出單獨訪問結果不能用printf,和bitset有關的輸出都用cout)
另外bitset的大小在編譯時就需要確定,也就是說bitset<>的尖括號中寫的是大小。
bitset的運算就像一個普通的整數一樣,可以進行與(&)、或(|)、異或(^)、左移(<<)、右移(>>)操作。
init | |
---|---|
bitset
|
b有n位,每位都為0 |
bitset
|
b是unsigned long型u的一個副本 |
bitset
|
b是string對象s中含有的位串的副本 |
bitset
|
b是s中從位置pos開始的n個位的副本 |
e.x.
#include <iostream>
#include <bitset>
using namespace std;
bitset<32> a(string("11111"));//注意是右對齊
bitset<2> b(string("10101"));//過長從頭開始取
bitset<32> c(16);//保存進一個int的常用寫法
bitset<4> bitset1; //無參構造,長度為4,默認每一位為0
bitset<8> bitset2(12); //長度為8,二進制保存,前面用0補充
string s = "100101";
bitset<10> bitset3(s); //長度為10,前面用0補充
char s2[] = "10101";
bitset<13> bitset4(s2); //長度為13,前面用0補充
cout << bitset1 << endl; //0000
cout << bitset2 << endl; //00001100
cout << bitset3 << endl; //0000100101
cout << bitset4 << endl; //0000000010101
function | |
---|---|
b.any() | b中是否存在置為1的二進制位? |
b.none() | b中不存在置為1的二進制位嗎? |
b.count() | b中置為1的二進制位的個數 |
b.size() | b中二進制位的個數 |
b[pos] | 訪問b中在pos處的二進制位 |
b.test(pos) | b中在pos處的二進制位是否為1? |
b.set() | 把b中所有二進制位都置為1 |
b.set(pos) | 把b中在pos處的二進制位置為1 |
b.reset() | 把b中所有二進制位都置為0 |
b.reset(pos) | 把b中在pos處的二進制位置為0 |
b.flip() | 把b中所有二進制位逐位取反 |
b.flip(pos) | 把b中在pos處的二進制位取反 |
b.to_ulong() | 用b中同樣的二進制位返回一個unsigned long值 |
os << b | 把b中的位集輸出到os流 |
ref : https://blog.csdn.net/vocaloid01/article/details/82798450
ref : https://www.cnblogs.com/magisk/p/8809922.html