1

私のプログラムでは、160ビットの数値を表すためにBitArraysを使用しています。これらの数値を加算、減算、インクリメント、およびデクリメントできるようにしたいのですが、これを行うためのアルゴリズムは何ですか?

現時点では掛け算や割り算には興味がありませんが、将来的にはボーナスポイントになるかもしれません。

私はC#で実装していますが、言語に精通していない場合は擬似コードで問題ありません

4

4 に答える 4

2

C# を使用しているため、最近リリースされた .NET 4.0 に追加されたBigIntegerを確認することをお勧めします。

于 2010-04-26T23:46:03.777 に答える
1

より良い方法があります。高校の数学では、標準の「リップルキャリー」アプローチを使用します。これには、一度に1ビットずつ作業する必要があるという欠点があります。「キャリールックアヘッド」はあなたがグーグルしたい、または単に読みたい用語です:

http://en.wikipedia.org/wiki/Carry_look-ahead_adder

ビットをグループ化し、いくつかの巧妙なロジックを実行して、数値を合計するためのステップ数を大幅に削減します。引き算には並行したプロセスがあります。名前を思い出せません。

于 2010-04-27T00:31:35.160 に答える
0

インクリメントとデクリメントは手で書くことができ、加算、減算は write メソッドで行うことができます。この方法を知っているのは、基数 2 と 10 だけでなく、すべての数値システムで機能するこの方法を基数学校で使用しているためです。

このような:

100100
010110 +
--------
111010
于 2010-04-26T23:12:35.587 に答える
0

符号なし 8 ビット バイトの配列を使用すると、はるかに簡単になる場合があります。次に、最下位バイトを加算/減算し、キャリーを処理するだけです。

バイナリ加算に関する情報はたくさんあります。

別の方法として、自分自身の苦痛を軽減し、他の誰かの実装を再利用することもできます:-)

于 2010-04-26T23:23:00.300 に答える