0

我正在使用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;
}
4

3 回答 3

2

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

于 2011-06-05T18:54:29.910 回答
2

您将 temp 声明为 bitset,其中 sizeof(int) == 4,因此它声明了一个 4 位的 bitset。

int 19 需要 5 位。

于 2011-06-05T18:55:47.017 回答
1

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

#include <iostream>
#include <bitset>

using namespace std;

int main() {
    bitset<5> temp(19);
    cout << temp;
    return 0;
} 
于 2011-06-05T19:02:17.090 回答