用於位運算的類,定義在標頭檔案bitset中。能夠處理超過最長整型型別的位集合。
定義和初始化bitset
當定義乙個bitset時,需要宣告它包含多少個二進位制位:
bitset<32> bitvec(1u); //32位;低位為1,其他位為0
bitsetb; //b有n位;每一位均為0.此建構函式位constexpr
bitsetb(u); //b是unsigned long long值u的低n位的拷貝。如果大於該型別ull的長度,則多出的高位位置0
bitsetb(s, pos, m, zero, one); //b是string s從pos開始m個字元的拷貝
bitset<13> bitvec1(0xbeef); //bitvec1預設為13位,高位丟棄;1111011101111
bitset<20> bitvec2(0xbeef); //bitvec2預設位2-位,高位置0;00001011111011101111
//在64位機器中,long long 0ull是乙個64位的0位元,因此~0ull是64個1
bitset<128> bitvec3(~0ull); //0~63位為1;63~127位為0
當使用string字串來初始化bitset時,可以使用string的字串進行初始化。同時使用string字串時,下標編號於bitset相反,string中最大的字元(最右)初始化bitset的低位(下標為0的二進位制位)。
string str("111111110000000110101");
bitset<32> bitvec5(str, 5, 4);
bitset<32> bitvec6(str, str.size() - 4); //使用最後4位
bitset的一些操作
b.any() b中是否有元素
b.all() b中是否滿了
b.none() b是否為空
b.count() b中置位的個數
b.size() 乙個constexpr函式,返回b中的位數
b.test(pos) 若pos的位置是有元素的,返回true,否則返回false
b.set(pos, v) 設定pos位置為v,v預設為true。
b.set() 如果不傳引數,則設定所有位
b.reset(pos) 將pos處的位復位
b.reset() 將b所有位復位
b.flip(pos) 改變位置pos處的狀態
b.flip() 改變b中的每一位狀態
b[pos] 訪問b中pos處的位置
b.to_ulong() 返回乙個unsigned long或unsigned long long值,
b.to_ullong() 如果b中位模式不能放入指定的結果型別,則丟擲乙個overflow_error異常
b.to_string(zero, one) 返回乙個string,表示b中的位模式。
os << b 將b中二進位制位列印為字元0或1,列印到流os
is >> b 從is中讀取字元存入b。當下乙個字元不是0或1,或者已經讀入了b.size()個時,讀取停止。
C 筆記 型別 2
c 筆記 型別 2 型別是一種模板 可以把型別想象成乙個用來建立資料結構的模板。模板本身不是資料結構,但它詳細說明了由該模板構造的物件的特徵。如 int i a,short s a 預定義型別 c 定義了16種預定義型別,其中13種簡單型別3種是非簡單型別 string,object,dynamic...
c 筆記 型別轉換
類型別轉換運算子是類的一種特殊成員函式,它負責將乙個類型別的指轉換成其他型別。型別轉換函式的一般形式 operator type const type表示某種型別。型別轉換運算子可以面向任意型別 除void之外 進行定義,只要該型別能作為函式的返回型別。因此,我們不允許轉換成陣列或者函式型別,但允許...
C 學習筆記 型別
型別由以下元素定義 c 提供了16中預定義型別,及使用者可以建立自己的6種使用者定義型別,具體如下 值型別 需要一段單獨的記憶體,用於儲存實際的資料,位於棧中。引用型別 需要兩段記憶體,一段位於堆中用於儲存實際的資料 一段位於棧中儲存引用 引用是用來指向資料在堆中的存放位置 值型別包含預定義型別中的...