C++ c++;带输出的位集问题

C++ c++;带输出的位集问题,c++,binary,bitset,C++,Binary,Bitset,我一直在研究比特集,所以我想知道将base-10转换为base-2的最佳方法是什么,因为出于某种原因,我得到了错误的答案: 给出数字19,我希望看到: 10011(16-2-1),为什么输出(00011) #包括 #包括 使用名称空间std; int main(){ 位集温度(19); 对于(int x=4;x>=0;x--) coutsizeof给出的是字符数,而不是比特数。sizeof(int)很可能是4,因此temp[4]是UB。 使用bitsetsizeof给出的是字符数,而不是位数。s

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

#包括
#包括
使用名称空间std;
int main(){
位集温度(19);
对于(int x=4;x>=0;x--)

coutsizeof给出的是字符数,而不是比特数。sizeof(int)很可能是4,因此temp[4]是UB。
使用
bitset

sizeof给出的是字符数,而不是位数。sizeof(int)很可能是4,因此temp[4]是UB。
使用
位集

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


int 19需要5位。

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


int 19需要5位。

您的代码中有一个错误。由于
sizeof(int)的事实,
bitset
的大小是4,因此无法访问索引4处的元素
生成了4,它只允许从0-3访问。至于你的问题,括号内的模板参数是位集的大小。在你的例子中,19用超过4位表示,因此结果被截断。将参数更改为5,你应该会得到预期的结果。顺便说一句,
位集
已经重载了操作ator您的代码中有一个bug。由于
sizeof(int)的事实,
位集的大小是4,因此您无法访问索引4处的元素
生成了4,它只允许从0-3访问。至于你的问题,括号内的模板参数是位集的大小。在你的例子中,19用超过4位表示,因此结果被截断。将参数更改为5,你应该会得到预期的结果。顺便说一句,
位集
已经重载了操作非常感谢你,我非常感谢C++,我不知道SeZoof(int)是这样读的,我认为比特集把它作为一个整数的长度来计算,“siZeof”是C++的一部分。它给出了字节的大小。是C++的一部分,它以字节表示大小。
#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;
}
#include <iostream>
#include <bitset>

using namespace std;

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