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