Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

2進数システム-C/C ++での算術加算のオーバーフロー?


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つの負の数を加算した結果は負になります。

したがって、オーバーフローは、2つのオペランドの最上位ビット(MSB)と結果を検証することで検出できます。ただし、3ビットコンパレータを実装する代わりに、MSBからのキャリーインとキャリーアウトを確認するだけで、2ビットコンパレータを実装してオーバーフローを検出することもできます。 2の補数のNビット加算を検討します。

2進数システム-C/C ++での算術加算のオーバーフロー?


キャリーインがキャリーアウトと等しくない場合、オーバーフローが発生します。オーバーフローの上記の式は、以下の分析から説明できます。

2進数システム-C/C ++での算術加算のオーバーフロー?


最初の図の場合、2つの数値のMSBは0であり、正であることを示しています。ここで、キャリーインが1の場合、1は結果が負(オーバーフロー)であり、キャリーアウトは0であることを示すため、結果のMSBを取得します。キャリーインはキャリーアウトと等しくないため、オーバーフローします。

2番目の図の場合、2つの数値のMSBは1であり、負であることを示します。ここで、キャリーインが0の場合、結果MSBは0であり、結果は正(オーバーフロー)であり、キャリーアウトは1です。キャリーインはキャリーアウトと等しくないため、オーバーフローします。

したがって、MSBでのキャリーインとキャリーアウトはオーバーフローを検出するのに十分です。

2進数システム-C/C ++での算術加算のオーバーフロー?


XORゲートの上に実装してオーバーフローを検出できます。


  1. 三角マッチ棒番号のC/C ++プログラム?

    マッチ棒を使用して作成された三角形は、正三角形を作成するように配置されます。これは、三角形のマッチ棒番号と呼ばれます。三角形のマッチ棒の数は、マッチ棒を三角形にするために必要なマッチ棒の数です。 この問題では、数はマッチ棒のピラミッドXの床であり、私たちのタスクは、x階のマッチ棒のピラミッドを形成するために必要なマッチ棒の最小総数を印刷するプログラムを作成することです。 概念をより明確にする例を見てみましょう。 Input: 7 Output: 84 説明 これは三角数の拡張です。整数Xの場合、必要なマッチ棒はX番目の三角数の3倍、つまり(3 * X *(X + 1))/ 2になります。

  2. n番目のカタラン数のC/C ++プログラム?

    カタラン数は一連の数です。カタラン数は、さまざまなカウントの問題で発生する一連の自然数を形成します。多くの場合、再帰的に定義されたオブジェクトが関係します。 C n 長さ2nのディック言語の数です。ディックワードは、n個のXとn個のYで構成される文字列であり、文字列の最初のセグメントにXより多くのYが含まれることはありません。たとえば、次は長さ6のディック言語です XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY. 記号Xを開き括弧として、Yを閉じ括弧として再解釈します。C n 正しく一致するn組の括弧を含む式の数をカウントします ((()