2011-06-05 73 views
0

我正在使用bitset,所以我想知道什麼是將base-10轉換爲base-2的最佳方式,因爲某些原因,我得到了錯誤的答案: 19號,我希望看到: 10011(16-2-1),爲什麼它的輸出(00011)輸出的C++ bitset問題

#include <iostream> 
#include <bitset> 

using namespace std; 

int main() { 

    bitset<sizeof(int)> temp(19); 
    for (int x = 4; x>=0;x--) 
     cout << temp[x]; 
    cout << endl; 
    system("pause"); 
    return 0; 
} 

回答

1

代碼中存在一個錯誤。由於sizeof(int)取值爲4,因此bitset的大小爲4,因此您無法訪問索引4處的元素,因爲它只允許從0-3訪問。至於你的問題,<>括號內的模板參數是bitset的大小。在你的情況下,19表示超過4位,因此結果被截斷。將參數更改爲5,您應該可以得到預期的結果。順便說一句,bitset已經超載了運算符< <,所以你實際上並不需要遍歷整個數組來輸出結果。 這應該做的工作:

#include <iostream> 
#include <bitset> 

using namespace std; 

int main() { 
    bitset<5> temp(19); 
    cout << temp; 
    return 0; 
} 
2

的sizeof給出了一些字符,而不是一個數位。 sizeof(int)最可能是4,因此temp [4]是UB。 使用bitset<sizeof(int)*CHAR_BIT>

2

你聲明temp爲bitset,其中sizeof(int)== 4,所以它聲明瞭一個4位的bitset。

int 19需要5位。

+0

啊,好的!非常感謝你,我不知道sizeof(int)是以這種方式讀取的,我認爲bitset將它評估爲一個整數的位長。 – Buster 2011-06-05 18:58:59

+0

「sizeof」是C++的一部分。它給出了*字節*的大小。 – MRAB 2011-06-05 19:21:10