日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++容器 bitset

發布時間:2024/10/6 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++容器 bitset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++語言的一個類庫,用來方便地管理一系列的bit位而不用程序員自己來寫代碼。 要使用bitset 類我們必須包含相關的頭文件????#include <bitset>

bitset除了可以訪問指定下標的bit位以外,還可以把它們作為一個整數來進行某些統計。 可以如下聲明一個該類型變量: bitset<N>varm (M) 其中varm為變量名。 N表示該類型在內存中占的位數,是二進制。 M表示變量varm的初始值。


bitset 有三種聲明方式。在缺省定義中,我們只需簡單地指明位向量的長度。例如: bitset< 32 > bitvec; 聲明了一個含有32 個位的bitset,對象位的順序從0 到31。缺省情況下所有的位都被初始化為0 。

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<10>first;//empty bitsetcout<<first<<endl;//輸出10個0bitset<10>second(120ul);//initlize from unsigned long//初始化為無符號型整數120bitset<10>a(5);cout<<a<<endl;//5的二進制數printf("%d\n",a);//輸出5bitset<32>b(-5);cout<<b<<endl;//-5的二進制數(補碼表示)printf("%d\n",b);//輸出-5bitset<10>c(-5);cout<<c<<endl;//-5的二進制數(補碼表示)printf("%d\n",c);//輸出10位二進制數轉化為十進制的結果bitset<10>d(string("000101"));//initalize from stringcout<<d<<endl;printf("%d\n",d);//將01字符串轉化為十進制正整數bitset<10>e(string("1111111011"));//initalize from stringcout<<e<<endl;printf("%d\n",e);//將01字符串轉化為十進制正整數return 0; }

相關函數

1.any():

為了測試bitset 對象是否含有被設置為1的位,我們可以使用any()操作 當bitset對象的一位或多個位被設置為1 時any()返回true 例如,對于bitvec ,如下測試 bool is_set = bitvec.any(); 它的結果當然是false。

#include<iostream> #include<bitset> using namespace std;int main() {ios::sync_with_stdio(0);bitset<32>mybits;cin>>mybits;if(mybits.any())//任何一位被設置就返回truecout<<"mybits has "<<(int)mybits.count()<<"bits set\n";elsecout<<"No bit set\n";return 0; }

2.none():

相反,如果bitset 對象的所有位都被設置為0 ,則none()操作返回true 例如,對于bitvec 測試 bool is_not_set = bitvec.none(); 結果為true

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<32>mybits;cin>>mybits;if(mybits.none())//沒有任何一位被設置就返回truecout<<"No bit set\n";elsecout<<"mybits has "<<(int)mybits.count()<<"bits set\n";return 0; }

3.count():

count()操作返回被設置為1的位的個數. int bits_set = bitvec.count();

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<8> myset(string("10110011"));cout<<int(myset.count())<<" ones\n";cout<<int(myset.size()-myset.count())<<" zeros\n";return 0; }

4.set():

我們可以用set()操作或者下標操作符來設置某個單獨的位 例如,下面的for循環把下標為偶數的設置為1. for ( int index = 0; index < 32; ++ index ) if ( index % 2 == 0 ) bitvec[ index ] = 1;

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<4> mybits;cout<<mybits.set()<<endl;//1111cout<<mybits.set(2,0)<<endl;//1011cout<<mybits.set(2)<<endl;//1111return 0; }

5.test():

測試某個單獨的位的狀態

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);string bitval("01011");bitset<5> mybits(bitval);cout<<boolalpha;for(size_t i=0;i<mybits.size();++i)cout<<mybits.test(i)<<endl;//返回指定位的狀態return 0; }

6.reset():

要將某個單獨的位設置為0 ,我們可以用reset()或下標操作符 下列兩個操作都將bitvec的第一位設為0. // 兩者等價都把第一位設置為0 bitvec.reset( 0 ); bitvec[ 0 ] = 0; 我們也可以用set()和reset()操作將整個bitset 對象的所有位設為1 或0 ,只要調用相應的操作而不必傳遞位置參數,
我們就可以做到這一點.例如: bitvec.reset();// 把所有的位設置為0
#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<4> mybits(string("1011"));cout<<mybits.reset(2)<<endl;//1001cout<<mybits.reset()<<endl;//0000return 0; }

7.flip():

flip()操作翻轉整個bitset 對象或一個獨立的位 bitvec.flip( 0 ); // 翻轉第一位 bitvec[0].flip(); // 也是翻轉第一位 bitvec.flip(); // 翻轉所有的位的值


#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<4> mybits(string("0001"));cout<<mybits.flip(2)<<endl;//0101cout<<mybits[2].flip()<<endl;//0cout<<mybits.flip()<<endl;//1010return 0; }

8.to_ulong();

返回bitset的整數表示

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);//string bitval("01011");string bitval="01011";bitset<5> mybits(bitval);cout<<mybits.to_ulong()<<endl;//返回bitset的整數表示return 0; }

9.to_string():

返回bitset的字符串表示

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<5> mybits;//0000mybits.set();//1111string s=mybits.to_string();cout<<s<<endl;//返回bitset的字符串表示return 0; }

10.operator[]()

返回第x位的引用

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<5> mybits;//0000mybits[1]=1;mybits[2]=mybits[1];cout<<mybits<<endl;return 0; }

11.operatorss()

比較和賦值運算

#include<iostream> #include<bitset> #include<cstdio> using namespace std;int main() {ios::sync_with_stdio(0);bitset<4>first(string("1001"));bitset<4>second(string("0011"));cout<<(first^=second)<<endl;//1010cout<<(first&=second)<<endl;//0010cout<<(first|=second)<<endl;//0011cout<<endl;cout<<(first<<=2)<<endl;//1100cout<<(first>>=1)<<endl;//0110cout<<endl;cout<<(~second)<<endl;//1100cout<<(second<<1)<<endl;//0110cout<<(second>>1)<<endl;//0001cout<<endl;cout<<(first==second)<<endl;//falsecout<<(first!=second)<<endl;//truecout<<endl;cout<<(first&second)<<endl;//0010cout<<(first|second)<<endl;//0111cout<<(first^second)<<endl;//0101cout<<endl;return 0; }

總結

以上是生活随笔為你收集整理的C++容器 bitset的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。