C++ bitset的使用


昨天cf題目全是二進制操作, 發現二進制在各種題中出現還挺多的, 學習了一下bitset

bitset是C++語言的一個類庫,用來方便地管理一系列的bit位。

bitset存儲二進制數位。

bitset就像一個bool類型的數組一樣,但是有空間優化。

bitset中的每個元素都能單獨被訪問,例如對於一個叫做a的bitset,表達式a[3]訪問了它的第4個元素,就像數組一樣。

(但是輸出單獨訪問結果不能用printf,和bitset有關的輸出都用cout)

另外bitset的大小在編譯時就需要確定,也就是說bitset<>的尖括號中寫的是大小。

bitset的運算就像一個普通的整數一樣,可以進行與(&)、或(|)、異或(^)、左移(<<)、右移(>>)操作。

init
bitset b; b有n位,每位都為0
bitset b(u); b是unsigned long型u的一個副本
bitset b(s); b是string對象s中含有的位串的副本
bitset b(s, pos, n); 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM