2011-03-01 3 views
0

私は奇妙な問題があります。私は10進数から2進数に変換する簡単な関数を作成しました。引数は10進数の数値を表すint値で、関数は2進数を表すビットセットを返します。10進数から2進数に変換してビットセットを返すときの問題

10000000000000000000000000000000(10進数で2,147,483,648)より小さい2進数の変換は完全に機能しますが、変換する数値が高いほど変換が正しく機能しません。間違いはどこですか?ここで

私はあなたの機能を送る:すべてのあなたの助けを事前に

bitset<15000> Utilities::getDecToBin(int dec) 
{ 
    bitset<15000> columnID; 
int x; 
    for(x=0;x<columnID.size();x++) 
    { 
     columnID[x]=dec%2; 
     dec=dec/2; 
    } 

    return columnID; 
} 

感謝を! :D

+0

算術演算の代わりに論理演算子を使用することをお勧めします: 'columnID [x] = dec & 1; dec >> = 1;' –

答えて

0

long intの配列、long intの配列、またはstringのメソッド(データのソースと関数の呼び出し方法によって異なります)を使用する必要があります。

1

32ビット整数の範囲は-2,147,483,648〜2,147,483,647です。

大きい場合は1073741825を意味する場合、私は何か間違って見ることはできません。

最も重要な位置(つまり2147483648)に余分なビットを追加する場合は、署名付き/署名なしの問題が発生している可能性があります。

ループをcolumnIDのサイズで制限しています。これは、ビットのdecのサイズでも制限するか、decが0のときに停止することをお勧めします。

+0

あなたは正しいです!問題は32ビット以上です...だから1つの質問?最大の整数を持つ変数型はどれですか?おそらく、15,000ビットの整数ではないかもしれないが、何か類似しているかもしれないから。 – thomas

0

30ビットまでしか動作しないことに驚いています.31を管理できるはずですが、32あなたは符号なし整数が必要になります。符号なしの64ビット整数を使用すると、それ以上のものを管理することができますが、15,000ビットの整数は特別なクラスでしか実装できないものです。

+0

アップ!あなたは書きます!問題は32ビット以上です...だから1つの質問?最大の整数を持つ変数型はどれですか?おそらく、15,000ビットの整数ではないかもしれないが、何か類似しているかもしれないから。 – thomas

+0

私が知っていることが分かっている最大の通常の整数型は64ビットであり、それを使用するならば、それらの64個すべてを使用できます。実装はC++に固有ですが、しばしばuint64_tまたはそれに類するものとしてtypedefされています。 – CashCow

関連する問題