0

2つの補数を使用して2つの値を互いに減算しようとしています。オーバーフロービットに問題があります。私のコンテナは無制限のビットサイズの整数を保持しているので、結果の一番上のビットが本当に結果からのものなのか、それとも単にオーバーフローからのものなのかわかりません。使用せずにオーバーフローを取り除くにはどうすればよいですか(まだ機能していないコンテナを使用する必要があるため、-私はそれを行うことはできません)1 << bits - 1operator-

0b1111011111 - 0b111010000 -> 0b1111011111 + 0b000110000 -> 1000001111

vs(通常)

0b00000101 - 0b000000001 -> 0b00000101 + 0b11111111 -> 0b100000100 -> 0b00000100

4

2 に答える 2

2

a --bを計算する場合は、単語を「配置」する必要があります。これは、2を補うために、ビット幅m = max(bitwidth(a)、bitwidth(b))の否定を作成する必要があるためです。

オーバーフローを取り除くには、mask = negate(1 << m)を実行し、ビット単位のandを使用してマスクを適用します。(または、そのビットをチェックして、それに応じて処理することもできます)。

于 2011-06-25T20:50:29.093 に答える
0

問題は111010000、10ビットから9ビットを減算していることです1111011111。2の補数は111010000です。ドットは、必要な数のビットを...11111000110000左側にパディングする必要があることを示しています。1ここでは、10ビットが必要なので、の2の補数はで111010000はありませ0001100001000110000

したがって、を計算する必要が1111011111 + 1000110000 = 11000001111あります。これを10ビットに切り捨てて、正しい答えを取得します1000001111

于 2011-06-25T21:20:54.227 に答える