0

私はビットセットを扱っていたので、基数 10 を基数 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をビットセットとして宣言しています。sizeof(int)== 4であるため、4ビットのビットセットを宣言しています。

int19には5ビットが必要です。

于 2011-06-05T18:55:47.017 に答える
1

コードにバグがありました。インデックス 4 の要素にはアクセスできません。これは、0 ~ 3 からのアクセスのみを許可する 4が生成bitsetされたため、サイズが 4であったためです。sizeof( int )あなたの質問に関しては、 <> ブラケット内のテンプレート引数はビットセットのサイズです。あなたの場合、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 に答える