Bit Set STL的使用
!= 返回真如果兩個(gè)bitset不相等。
== 返回真如果兩個(gè)bitset相等蓄氧。
&= 完成兩個(gè)bitset間的與運(yùn)算函似。
^= 完成兩個(gè)bitset間的異或運(yùn)算。
|= 完成兩個(gè)
~ 反置bitset (和調(diào)用 flip()類似)
<<= 把bitset向左移動(dòng)
>>= 把bitset向右移動(dòng)
[x] 返回第x個(gè)位的引用
= 相當(dāng)于構(gòu)造函數(shù)的直接賦值喉童。
構(gòu)造
無(wú)參構(gòu)造撇寞,截取,字符串構(gòu)造堂氯,十進(jìn)制構(gòu)造
bitset<4> bitset1; //無(wú)參構(gòu)造蔑担,長(zhǎng)度為4,默認(rèn)每一位為0
bitset<8> bitset2(12); //長(zhǎng)度為8咽白,二進(jìn)制保存啤握,前面用0補(bǔ)充
string s = "100101";
bitset<10> bitset3(s); //長(zhǎng)度為10,前面用0補(bǔ)充
char s2[] = "10101";
bitset<13> bitset4(s2); //長(zhǎng)度為13晶框,前面用0補(bǔ)充
cout << bitset1 << endl; //0000
cout << bitset2 << endl; //00001100
cout << bitset3 << endl; //0000100101
cout << bitset4 << endl; //0000000010101
bitset<2> bitset1(12); //12的二進(jìn)制為1100(長(zhǎng)度為4)排抬,但bitset1的size=2,只取后面部分授段,即00
string s = "100101";
bitset<4> bitset2(s); //s的size=6蹲蒲,而bitset的size=4,只取前面部分侵贵,即1001
char s2[] = "11101";
bitset<4> bitset3(s2); //與bitset2同理悠鞍,只取前面部分,即1110
cout << bitset1 << endl; //00
cout << bitset2 << endl; //1001
cout << bitset3 << endl; //1110
函數(shù)方法
count數(shù)一的數(shù)量模燥,size是大小,test(x)如果x位是1掩宜,返回true蔫骂,否則false
any,含1牺汤,none辽旋,無(wú)1,all,全1
bitset<8> foo ("10011011");
cout << foo.count() << endl; //5 〔古摺(count函數(shù)用來(lái)求bitset中1的位數(shù)码耐,foo中共有5個(gè)1
cout << foo.size() << endl; //8 (size函數(shù)用來(lái)求bitset的大小溶其,一共有8位
cout << foo.test(0) << endl; //true ∩取(test函數(shù)用來(lái)查下標(biāo)處的元素是0還是1,并返回false或true瓶逃,此處foo[0]為1束铭,返回true
cout << foo.test(2) << endl; //false (同理厢绝,foo[2]為0契沫,返回false
cout << foo.any() << endl; //true (any函數(shù)檢查bitset中是否有1
cout << foo.none() << endl; //false ∥艉骸(none函數(shù)檢查bitset中是否沒(méi)有1
cout << foo.all() << endl; //false ⌒竿颉(all函數(shù)檢查bitset中是全部為1
bitset<8> foo ("10011011");
cout << foo.flip(2) << endl; //10011111 (flip函數(shù)傳參數(shù)時(shí)靶病,用于將參數(shù)位取反会通,本行代碼將foo下標(biāo)2處"反轉(zhuǎn)",即0變1嫡秕,1變0
cout << foo.flip() << endl; //01100000 】视铩(flip函數(shù)不指定參數(shù)時(shí),將bitset每一位全部取反
cout << foo.set() << endl; //11111111 ±パ省(set函數(shù)不指定參數(shù)時(shí)驾凶,將bitset的每一位全部置為1
cout << foo.set(3,0) << endl; //11110111 (set函數(shù)指定兩位參數(shù)時(shí)掷酗,將第一參數(shù)位的元素置為第二參數(shù)的值调违,本行對(duì)foo的操作相當(dāng)于foo[3]=0
cout << foo.set(3) << endl; //11111111 (set函數(shù)只有一個(gè)參數(shù)時(shí)泻轰,將參數(shù)下標(biāo)處置為1
cout << foo.reset(4) << endl; //11101111 〖技纭(reset函數(shù)傳一個(gè)參數(shù)時(shí)將參數(shù)下標(biāo)處置為0
cout << foo.reset() << endl; //00000000 (reset函數(shù)不傳參數(shù)時(shí)將bitset的每一位全部置為0
bitset<8> foo ("10011011");
string s = foo.to_string(); //將bitset轉(zhuǎn)換成string類型
unsigned long a = foo.to_ulong(); //將bitset轉(zhuǎn)換成unsigned long類型
unsigned long long b = foo.to_ullong(); //將bitset轉(zhuǎn)換成unsigned long long類型
cout << s << endl; //10011011
cout << a << endl; //155
cout << b << endl; //155