bitset類功能記錄

一、bitset的定義

類似於vector後面<>中的數據類型,bitset<>括號中記錄了長度。

#include <iostream>
#include<bitset>
#include<string>
using namespace std;
int main()
{
//1
    bitset<32> i; //初始化一個32位全部爲0的數(注意<>內長度必須爲1.整形常量 2.已用常量初始化的const對象 )
    //i中的位序是從0到31開始

//2
    unsigned long i;
    bitset<32> j(i)//用i初始化j
//3
    string s;
    bitset<32> k(s);//k是string對象s中含有的位串的副本
//4
    bitset<32> m(s,pos,n);//m是從位置pos開始的n個位的副本
}

二、bitset的初始化

1、用unsigned值初始化
規則:
如果bitset類型長度大於unsigned long值的二進制位數,則其餘的高階位置爲0;
如果bitet類型長度小於unsigned long值的二進制位數,則只使用unsigned值中的低階位,超過bitet類型長度的高階位將被丟棄。

//例子0xffff在32位機上爲 1111 1111 1111 1111 0000 0000 0000 0000
bitset<16> a(0xffff); //a爲16位全爲1,超出部分的0丟棄
bitset<32> b(0xffff);//b的0到15位全是1,剩下16到31是0,bitset位數32與unsigned long 長度相同
bitset<64> c(0xffff);//bitset爲64位大於unsigned long 32, 31到63自動置零

2、用string初始化bitset
規則
從string對象讀入位集的順序是從右向左

string str("1101");
bitset<32> a(str); //a中順序爲1011000..00,超出的位全補零

string s("111111100000111101010111");
bitset<32> b(s,5,4); //從s[5]開始讀4位,爲1100
bitset<32> c(s,s.size()-4); //讀後四位(從s[s.size()-4]一直讀到結束

三、bitset的操作

bitset<32> a("10010010");
a.any();//a中是否有1,返回bool變量,有1爲true,全爲0返回false
a.none();//a中是否沒1,true爲全0,false爲至少有一個1
a.count();//返回a中1的個數
a.size();//返回二進制位數
int k=a[i];//訪問a中i處的位
a.set();//將a全置1;
a.set(i);//將a中第i位置1;
a.reset();//將a全置0;
a.reset(i);//將a中第i位置0;
a.flip();//全位取反
a.flip(i);//i位取反
a.to_ulong();//返回a中二進制數的unsigned long數
os<<a;//將a輸出到os流

附錄:

一個例子

#include <iostream>
#include<string>
#include<stdexcept>
#include<bitset>
using namespace std;
int main()
{
    bitset<100> a;
    a.set();
    //a.to_ulong(); //在try前的錯誤操作不會拋出異常
    try{
        a.to_ulong(); //導致溢出的操作
    }
    catch (exception err){      //處理操作
        cout << err.what() << ": 溢出" << endl;
    }
    //a.to_ulong();//try後的錯誤操作會拋出異常
    unsigned long k=a.to_ulong();

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章