1

AND OR XORのみを使用し、4ビットで構成される2つの2進数を加算してもオーバーフローするかどうかを判断しようとはしていません。たとえば、1100+0100のようなものは1|になります。0000.しかし、これらの論理演算子だけを使用してこれを見つけるにはどうすればよいですか?

オーバーフローが発生した場合は1000を取得し、発生しなかった場合は0000を取得しようとしています。XORをマスクと一緒に使用して最後の3ビットをクリアできるので、これは十分に簡単です。

誰かがこれを理解するための提案がありますか?

4

3 に答える 3

1

数字は ABCD と EFGH、^ は AND、| またはです。

(A^E) | (B^F^(A|E)) | (C^G^(B|F)^(A|E)) | (D^H^(C|G)^(B|F)^(A|E))

そこにパターンが見られると確信しているので、再帰的な解決策は、より多くのビットを持つ数値に対して非常に簡単です。

于 2011-01-26T15:06:36.400 に答える
0

ループやシフトを使用せずに、これでうまくいくと思います。しかし、それは醜いです:

もしも (
(a & 0x8) && (b & 0x8) ||
(((a & 0x8) || (b & 0x8)) && ((a & 0x4) && (b & 0x4)) ||
(((a & 0x8) || (b & 0x8)) && ((a & 0x4) || (b & 0x4)) && ((a & 0x2) && (b & 0x2))) ||
(((a & 0x8) || (b & 0x8)) && ((a & 0x4) || (b & 0x4)) && ((a & 0x2) || (b & 0x2)) && ((a & 0x1) && (b & 0x1)))
) {
  // オーバーフロー
}
于 2011-01-26T15:05:00.817 に答える