bitset 用法整理

2021-08-05 22:20:44 字數 3317 閱讀 5184

在專案中需要使用到10進製48位的數字按二進位制由高到低解釋,然後按每一位是0還是1來判斷報警或錯誤狀態。

所以,在linux中的c++下需要用到二進位制轉換以及按位解析。收集到了一些資料,自己儲存一下啊。

如下:bitset 用法整理

建構函式

bitsetb;

b有n位,每位都為0.引數n可以為乙個表示式.

如bitset<5> b0;則"b0"為"00000";

bitsetb(unsigned long u);

b有n位,並用u賦值;如果u超過n位,則頂端被截除

如:bitset<5>b0(5);則"b0"為"00101";

bitsetb(string s);

b是string物件s中含有的位串的副本

string bitval ( "10011" );

bitset<5> b0 ( bitval4 );

則"b0"為"10011";

bitsetb(s, pos);

b是s中從位置pos開始位的副本,前面的多餘位自動填充0;

string bitval ("01011010");

bitset<10> b0 ( bitval5, 3 );

則"b0" 為 "0000011010";

bitsetb(s, pos, num);

b是s中從位置pos開始的num個位的副本,如果num b0 ( bitval5, 3, 6 );

則"b0" 為 "100110";

os << b

把b中的位集輸出到os流

os >>b

輸入到b中,如"cin>>b",如果輸入的不是0或1的字元,只取該字元前面的二進位制位.

bool any( ) 

是否存在置為1的二進位制位?和none()相反

bool none( ) 

是否不存在置為1的二進位制位,即全部為0?和any()相反.

size_t count( )

二進位制位為1的個數.

size_t size( )

二進位制位的個數

flip()

把所有二進位制位逐位取反

flip(size_t pos)

把在pos處的二進位制位取反

bool operator( size_type _pos )

獲取在pos處的二進位制位

set()

把所有二進位制位都置為1

set(pos)

把在pos處的二進位制位置為1

reset()

把所有二進位制位都置為0

reset(pos)

把在pos處的二進位制位置為0

test(size_t pos)

在pos處的二進位制位是否為1?

unsigned long to_ulong( )

用同樣的二進位制位返回乙個unsigned long值

string to_string ()

返回對應的字串.

詳細請翻閱msdn.

另**

bitset的使用示例

std::bitset是stl的乙個模板類,它的引數是整形的數值,使用位的方式和陣列區別不大,相當於只能存乙個位的陣列。下面看乙個例子

view plaincopy to clipboardprint?

bitset<20> b1(5);   

cout< b1(5) is:"  

<< b1 < b1(5);

cout< b1(5) is:"

<< b1 結果是   the set bits in bitset<5> b1(5) is:00000000000000000101

它是以整數5傳遞進去,而以二進位制數列印出來。

bitset還可以用作字串轉為整型

view plaincopy to clipboardprint?

string bitval2;   

cin>>bitval2;    

//  int length = strlen("11101101100");   

// bitset<11>b2(bitval2);   

bitset<11> b2(bitval2);   

cout<>bitval2; 

//  int length = strlen("11101101100");

// bitset<11>b2(bitval2);

bitset<11> b2(bitval2);

cout以及整形轉為字串

view plaincopy to clipboardprint?

int interge1;   

cin>>interge1;   

cout<

cout<>interge1;

cout<

cout在網上看到還有一篇關於bitset寫的不錯的文章,不知到作者是誰,貼上自用之:

bitset如何初始化、如何轉化為double型別的小數、如何進行交叉(可以嘗試用string作為中間量,因為bitset可以用string初始化的,但是這樣的構造和傳遞會消耗很多的時間——我討厭這種不必要的消耗!)

假如說我希望計算的精度足夠高,將bitset取為64位,那麼什麼型別的數才能輸出?如果不需要輸出,那麼在取精度的時候,如何將乙個64位的bitset轉化為double型別的小數?(可能需要自己程式設計實現了)

如何將乙個double型別的數字轉化為bitset,也就是二進位制編碼,方便我們做交叉、變異。

(說得簡單點,以上兩個就是解碼和編碼的問題)——文字很亂,整理一下!

如何實現兩個bitset的合併?小數部分、整數部分,如果能夠合併,那寫程式又會方便多了!比如:兩個32位的bitset合併成乙個64位的bitset!(是不是又要利用string進行轉換呢?如何轉換?)

**說明:將bitset的某一位置為1

bitset<32> bits; 

for  ( int  i =0;i<5;i++) 

bits. set (i); //i為需要被置為1的位數 

注意事項

你看得出來下面的**為什麼輸出7和9嗎?

#include

#include

using   namespace  std;  

void  main()  

問題補充:

那對於以下的**呢 編譯結果為9 如何解釋呢 #include#includeusing namespace std;void main()  

bitset 用法整理

建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0 5 則 b0 為 00101 bitsetb s...

bitset用法整理

bitset用法整理 2008 01 17 14 15 建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5...

bitset 用法整理

建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0 5 則 b0 為 00101 bitsetb s...