0

数値を2進数に変換するプログラムを作成しようとしています。

コード:

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

プログラムには6桁を超える2進数が含まれているため、585に対して間違った答えが返されます。どうすればこんなに大きな数になれますか?

4

2 に答える 2

4

585 mod 256 = 73(CHAR_BITが8であると仮定)
ベース2の73=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 に答える