2 の補数システムはコンピュータ アーキテクチャで広く使用されています。
N ビット 2 の補数システムは、-2n-1 から 2n-1-1 までの数値を表現できます。
4 ビットは、(-8 から 7) までの数値を表現できます。
5 ビットは、2 の補数系で (-16 ~ 15) の数値を表現できます。
オーバーフローは、2 つの N ビット 2 の補数が追加され、答えが大きすぎてその N ビット グループに収まらない場合にも発生します。
コンピュータには N ビットの固定レジスタが含まれています。 2 つの N 桁の数を加算した結果が、最大の N 桁の 1 桁の数になります。
キャリー フラグは追加ビットを格納します。ただし、キャリーは必ずしもオーバーフローを示すわけではありません。
場合-
2 つの負の数を加算した結果が正の数、または
2 つの負の数を加算した結果は負の数になります。
したがって、両方のオペランドと結果の最上位ビット (MSB) を検証することで、オーバーフローを検出できます。ただし、3 ビット コンパレータを実装する代わりに、桁上げと MSB からの桁上げ出力を検証することでオーバーフローを検出できます。 2 の補数の N ビット加算を考えます。
#オーバーフローは、キャリー入力がキャリー出力と等しくない場合に発生します。上記のオーバーフロー式は、次の分析から議論できます。#最初の図では、2 つの数値の最上位ビットは 0 であり、それらが正の数値であることを示しています。ここで、キャリー入力が 1 の場合、結果の最上位ビットは 1 になり、結果が負 (オーバーフロー) であることを示し、キャリー出力は 0 になります。キャリーインとキャリーアウトは等しくないため、オーバーフローが発生します。
2 番目の図では、2 つの数値の最上位ビットは 1 であり、負の数値であることを示しています。ここで、キャリー入力が 0 の場合、結果の最上位ビットは 0 になり、結果が正 (オーバーフロー) であることを示し、キャリー出力は 1 になります。キャリーインとキャリーアウトは等しくないため、オーバーフローが発生します。
したがって、MSB のキャリーインとキャリーアウトはオーバーフローを検出するのに十分です。
#上記の XOR ゲートは、オーバーフローの検出に使用できます。以上が2 進数システム - C/C++ での算術加算オーバーフロー?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。