0

我试图制作一个将数字转换为二进制的程序。

代码:

    #include<iostream>
    #include<algorithm>
    #include<bitset>
    using namespace std;
    int main()
    {
        int a;
        string k;
        bitset<CHAR_BIT> n;
        cin>>a;
        n=bitset<CHAR_BIT>(a);
        cout<<n<<" ";
            return 0;
   }

该程序对 585 给出了错误的答案,因为它包含超过 6 个二进制数字。我怎么能有这么大的数字?

4

2 回答 2

4

585 mod 256 = 73(假设 CHAR_BIT 为 8)
73 in base 2 = 0b01001001
该程序确实打印01001001 。
我看不出有什么问题。

如果要存储 的整个范围a,则应将位集声明为

bitset<CHAR_BIT * sizeof(a)> n (a);
于 2010-09-01T14:44:08.703 回答
0

位集具有固定数量的位。您指定bitset<CHAR_BIT>-- 在大多数系统上,CHAR_BIT 为 8,因此您将拥有一个 8 位的位集。当您尝试将更大的数字填充到位集中时,最高有效位将被丢弃。

如果您事先知道您必须处理的最大数字,您可以指定 egbitset<16>bitset<32>。如果不这样做,您可能必须使用其他一些数据类型

于 2010-09-01T14:47:58.800 回答