在專案中需要使用到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...