2011-01-26 6 views
1

私は4ビットからなる2つの2進数を加算するのがオーバーフローするかどうかを判断するために、AND OR XORとNOTを使用しようとしています。 私は、例えば、1100 + 0100のようなものが1 |しかし、これらの論理演算子を使用してこれをどのように見つけることができますか?AND OR NOTとXORを使用してオーバーフローが発生したかどうかを確認するにはどうすればよいですか?

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

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

+0

これは完全に言語に依存していますが、何を使って作業していますか? – berry120

+0

私は今、紙でこれをやろうとしています。私は実際にそれを行う方法を理解したら、そこから上に上がるでしょう。 – John

+0

今のところ、(紙面上で)演算子を使って2つの2進数を加算することからオーバーフローを検出する方法を理解しようとしています。 – John

答えて

0

これは、ループやシフトを使用しないで動作すると思います。しかし、その醜い:

 
if (
(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))) 
) { 
    // overflow 
} 
0

数字はABCDとEFGH、^はANDです、 ORである。

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

パターンを見ることができるので、再帰的な解法はビット数の多い。

関連する問題