输出的c ++ bitset问题

时间:2011-06-05 18:50:16

标签: c++ binary bitset

我正在使用bitset,所以我想知道将base-10转换为base-2的最佳方法是什么,因为出于某种原因我得到了错误的答案: 给出数字19,我希望看到: 10011(16-2-1),为什么输出(00011)

#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;
}

3 个答案:

答案 0 :(得分:2)

sizeof给出了一些char,而不是一些bit。 sizeof(int)最可能是4,因此temp [4]是UB。 使用bitset<sizeof(int)*CHAR_BIT>

答案 1 :(得分:2)

你将temp声明为bitset,其中sizeof(int)== 4,所以它声明了4位的bitset。

int 19需要5位。

答案 2 :(得分:1)

您的代码中存在错误。您无法访问索引4处的元素,因为bitset的大小为4,因为sizeof( int )产生了4,这只允许从0-3进行访问。至于你的问题,&lt;&gt;中的模板参数括号是bitset的大小。在您的情况下,19表示超过4位,因此结果被截断。将参数更改为5,您应该得到预期的结果。顺便说一句,bitset已经重载了运算符&lt;&lt;,因此您实际上不需要遍历整个数组来输出结果。 这应该做的工作:

#include <iostream>
#include <bitset>

using namespace std;

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