5

2進数を10進数に変換する方法を知っています。私は少なくとも2つの方法を知っています:テーブルとパワー;-)

2進数を10進数に変換して、この10進数を出力したいと思います。さらに、私はこの「10進数」には興味がありません。印刷したいだけです。

しかし、上で書いたように、私は2進数を10進数に変換する方法を2つしか知らず、両方とも加算が必要でした。したがって、バイナリで1または0の値を計算し、それを記憶されている値に追加します。これは薄い場所です。私は本当に本当に大きな数(1と64のゼロ)を持っています。変換中は、中間結果を「変数」に配置する必要があります。Cでは、「int」型があります。これは4バイトのみで、10^11以下です。

そのため、2進数から10進数に変換するときに、中間結果を保存するのに十分なメモリがありません。上で書いたように、私はその小数には興味がなく、結果を出力したいだけです。しかし、私はそれを解決する他の方法を見ていません;-(バイナリから「ただ印刷する」ための解決策はありますか?

または、中間表現にBCD(Binary Coded Decimal)のようなものを使用する必要がありますか?クロスプラットフォームではないので、私は本当にこれを使いたくありません(Intelのプロセッサには組み込みの機能がありますが、他の場合は独自の実装を作成する必要があります)。

ご意見をお聞かせいただければ幸いです。しばらくお待ちいただきますようお願いいたします。

言語:C。

4

5 に答える 5

6

GMP (GNU multiprecision library)などのライブラリを使用することを強くお勧めします。mpz_t大きな整数のデータ型、さまざまなインポート/エクスポート ルーチンを使用してデータを に取得し、mpz_tを使用mpz_out_str()して 10 進法で出力できます。

于 2009-06-06T20:02:56.293 に答える
4

最大の標準整数データ型はunsigned long long int、私のシステム (x86 上の 32 ビット Linux) では範囲が 0 から 1.8*10^20 であり、十分ではないため、独自の型 (構造体または配列) を作成して書き込む必要があります。そのタイプの基本的な数学(基本的には足し算が必要です)。

もし私があなたなら (そしてメモリは問題ではありません)、私は配列を使用します - BCD ではなく 10 進数あたり 1 バイトです。BCD は、1 バイトあたり 2 桁の 10 進数を格納するため、よりコンパクトですが、上位ニブルと下位ニブルを別々に処理するために、より多くの労力を費やす必要があります。

そして、印刷するには、配列のすべてのバイトに(数字ではなく文字)を追加するだけ'0'で、印刷可能な文字列が得られます。

于 2009-06-06T19:56:13.797 に答える
0

ええと、2進数から10進数に変換するとき、実際にはすべての2進数ビットを同時に必要とするわけではありません。現在計算しているビットと、結果を保持するためのおそらくdouble変数が必要です。バイナリ値を配列に入れることができます。たとえば、i [64]と繰り返し、その位置に応じてパワーを取得し、doubleに追加し続けることができます。

于 2009-06-06T18:45:33.747 に答える
0

10 進数に変換するということは、実際には 10 の各べき乗を計算することを意味するので、これらを単にバイト配列に格納しないのはなぜでしょうか? 次に、印刷は配列をループするだけです。

于 2009-06-06T20:35:05.450 に答える
-2

たとえば、5つの整数にメモリを割り当て、配列の先頭に数値を格納できませんでしたか?次に、intサイズのチャンクで配列を手動で繰り返します。おそらく次のようなものです:

int* big = new int[5];
*big = <my big number>;
于 2009-06-06T18:40:02.417 に答える