C++標準庫中bitset型別
阿新 • • 發佈:2019-01-31
雖然在C++的基本型別中,似乎沒有二進位制這個重要的型別,但是在C++標準庫中卻提供了能夠處理二進位制位的有序集合型別,這就是
該型別儲存的是一個有序的二進位制資料的集合,該集合的長度值需要在構造該型別時在尖括號中給出(因為該型別實際上也是一種類模版)。
二、對於該二進位制集合的訪問方式
三、輸出二進位制位
與一般容器集合不同的是bitset二進位制集合可以直接用輸出操作符進行正題輸出。
四、對於bitset物件的值的獲取
五、利用內建成員函式對真個bitset物件進行設定
六、bitset集合最重要的特性是此類也支援內建的位操作符
bitset型別,使用該型別時需要先包含該標頭檔案並進行宣告:
#include <bitset>
using namespace std;
該型別儲存的是一個有序的二進位制資料的集合,該集合的長度值需要在構造該型別時在尖括號中給出(因為該型別實際上也是一種類模版)。
一、bitset型別的初始化方式
一共有四種初始化方式:
For Example:
//bitset物件的初始化 //方法一 bitset<32> b; //直接構造一個空物件,其中的每一位都預設為0 //方法二 unsigned long a =32; bitset<32> b1(a); //構造成一個unsigned long型別的二進位制副本 //方法三 string a1("10001100001111001"); bitset<17> b2(a1); //構造成一個含有二進位制位串的副本 //方法四 bitset<10> b3(a1,1,10);//構造成從a1的1位置開始的10個位的副本
二、對於該二進位制集合的訪問方式
只能以位置的方式來訪問其中每一個二進位制元素,即以下標的方式來訪問,但需注意的是像陣列集合一樣,該集合的下標也是從0開始的。
//按照下標的位置來訪問該二進位制集合
for(int i = 0;i<15;i++)
{
cout<<b2[i]<<flush;//輸出:100111100001100
}
三、輸出二進位制位
與一般容器集合不同的是bitset二進位制集合可以直接用輸出操作符進行正題輸出。
cout<<"b:"<<b<<endl;//輸出:00000000000000000000000000000000 cout<<"b1:"<<b1<<endl;//輸出:00000000000000000000000000100000 cout<<"b2:"<<b2<<endl;//輸出:10001100001111001 cout<<"b3:"<<b3<<endl;//輸出:0001100001
四、對於bitset物件的值的獲取
有兩種獲取方式:分別是:轉換成一個unsigned long的整數型別 (呼叫成員函式:.to_ulong())
轉換成一個包含該集合所有二進位制位的字串 (呼叫成員函式:.to_string())
string str("0001110001"); bitset<10> bitver(str); //轉換成一個unsigned long的整數型別 unsigned long ul = bitver.to_ulong();//輸出113 cout<<ul<<endl; //轉換成一個包含該集合所有二進位制位的字串 string ss = bitver.to_string();//輸出0001110001 cout<<ss<<endl;
五、利用內建成員函式對真個bitset物件進行設定
.set() //將所有的二進位制位都設定為1
.reset() //將所有的二進位制位都設定為0
.size() //返回集合的大小
.set[pos] //將pos位置的二進位制位設定為1
.reset[pos] //將pos位置的二進位制位設定為0
.flip() //將所有的二進位制位都取反
.flip(pos) //將pos位置的二進位制位取反
//。。。。
六、bitset集合最重要的特性是此類也支援內建的位操作符
但須注意的是:bitset集合按位運算的物件只能是也是一個bitset集合,而不能與一個整數進行按位運算。
For Example:
#include<iostream>
#include<bitset>
#include<string>
#include<vector>
using namespace std;
int main()
{
string str("0001110001");
bitset<10> bitver(str);
//取反
bitver = ~bitver;
cout<<bitver<<endl;//輸出1110001110
//左移兩位
bitset<10> b1 = bitver<<2;
cout<<"b1"<<b1<<endl;//輸出1000111000
//右移兩位
bitset<10> b2 = bitver>>2;
cout<<"b2"<<b2<<endl;//輸出0011100011
//按位與&
unsigned long a = 1;
bitset<10> a1(a);
cout<<"a1"<<a1<<endl;//輸出0000000001
bitset<10> b3 = bitver & a1;
cout<<"b3"<<b3<<endl;//輸出0000000000
return 0;
}