しかし、すべてを格納するために必要なビット数を正確に知るための絶対的な法則を思いつくことはできませんでした。両方の数値が処理しているビット数だけを知っていました (その表現が正か負かは問題ではありません)。
また、「両方の数値が処理しているビット数のみ」を指定する方法はありません。
同じ符号の数値の場合、追加のビットが 1 つ必要になる場合があります。小さい数値の最上位ビットから開始して、キャリーの影響を吸収する 0 をスキャンできます。例えば:
1010111011101 +
..10111010101
..^ start here
ここでは両方の数値が 1 であるため、0 にヒットするまで (結果が大きい方の入力と同じ桁数になる)、または大きい方の数値の最上位ビットに到達するまで左にスキャンする必要があります。結果にもう 1 桁ある場合)。
1001111011101 +
..10111010101
..^ start here
長い方の入力の開始位置が 0 であるこの場合、最初に右移動スキャンを実行して、上記の左移動スキャンを開始する前に、その開始位置の右からキャリーがあるかどうかを確認する必要があります。 .
符号が異なる場合:
- 1 つの値が他の値より 2 桁以上少ない場合、結果に必要な桁数は、大きい方の入力の桁数と同じか、1 桁少なくなります。
- そうしないと、結果に必要な桁数を計算するためだけに、加算のためにさらに多くの作業を行う必要があります。
これは、符号ビットが絶対値ビットのカウントとは別のものであると仮定しています。