工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 産業技術

バイナリオーバーフロー

符号付き2進数の注意点の1つは、オーバーフローの場合です。この場合、加算または減算の問題に対する答えが、割り当てられたビット数で表すことができる大きさを超えます。符号ビットの場所は問題の最初から固定されていることを忘れないでください。

最後の例の問題では、5つの2進ビットを使用して数値の大きさを表し、左端(6番目)のビットを負の重み(符号)ビットとして使用しました。大きさを表す5ビットでは、2 5 の表現範囲があります。 、または0から最大までの32の整数ステップ。

これは、+ 31 10 までの数値を表すことができることを意味します (011111 2 )、または最低-32 10 (100000 2

6ビットの数値フィールドの制限

2つの2進数、符号に使用される6番目のビットで加算問題を設定し、結果が+31 10 を超える場合 または-32 10 未満 、私たちの答えは正しくありません。 17 10 を追加してみましょう および19 10 このオーバーフロー条件が過剰な正の数に対してどのように機能するかを確認するには:

答え(100100 2 )、6番目のビットで-32 10 として解釈されます 場所は、実際には-28 10 に等しい 、+ 36 10 ではありません +17 10 で取得する必要があるため および+19 10 一緒に追加!明らかに、これは正しくありません。何が悪かったのですか?

答えは、真の適切な合計の大きさ(36 10 )以降、作業している6ビットの数値フィールドの制限にあります。 )指定されたビットフィールドの許容制限を超えると、オーバーフローエラーが発生します 。

簡単に言えば、6つの場所では正しい合計を表すのに十分なビットが得られないため、左端の「キャリー」ビットを破棄する戦略を使用して取得した数値はすべて正しくありません。

2つの負の数を足し合わせて、6ビットの2進フィールドに対して低すぎる合計を生成すると、同様のエラーが発生します。 -17 10 を追加してみましょう および-19 10 一緒にこれがどのように機能するかを確認します(または、場合によっては機能しません!):

(間違った)答えは肯定的 二十八。負の17と負の19の実際の合計が低すぎて、5ビットの大きさのフィールドと6番目の符号ビットで適切に表現できないという事実が、この問題の根本的な原因です。

符号ビットに7番目のビットを使用する

今回は符号ビットに7番目のビットを使用し、大きさを表すために6ビットを使用できるようにすることを除いて、これら2つの問題をもう一度試してみましょう。

合計の大きさを処理するのに十分な大きさのビットフィールドを使用することにより、正しい答えに到達します。これらのサンプル問題では、10進数形式で加算問題を実行し、結果を2進数の回答と比較することで、オーバーフローエラーを検出できました。

たとえば、+ 17 10 を追加する場合 および+19 10 一緒に、私たちは答えが想定されたであることを知っていました +36 10 になります 、したがって、バイナリ合計が-28 10 であることがチェックアウトされたとき 、私たちは何かが間違っている必要があることを知っていました。これはオーバーフローを検出する有効な方法ですが、あまり効率的ではありません。

結局のところ、補完の全体的な考え方は、2進数を確実に加算できるようにすることであり、同じ数値を10進数で加算して結果を再確認する必要がないことです。これは、2進数を加算する電子回路を構築する目的で特に当てはまります。回路は、正解が何であるかをすでに知っている人間の監督なしに、オーバーフローがないかどうかをチェックできる必要があります。

必要なのは、追加の演算を必要としない単純なエラー検出方法です。おそらく最も洗練された解決策は、記号を確認することです。 合計を計算し、追加された数字の符号と比較します。

明らかに、2つの正の数を足し合わせると正の結果が得られ、2つの負の数を足し合わせると負の結果が得られるはずです。問題の例でオーバーフローの状態が発生した場合は常に、合計の符号が常に反対であることに注意してください。 追加された2つの数字のうち:+17 10 プラス+19 10 -28 10 を与える 、または-17 10 プラス-19 10 +28 10 を与える 。

兆候だけをチェックすることで、何かがおかしいことがわかります。しかし、正の数が負の数に追加される場合はどうでしょうか?正確にするために、合計はどのような符号である必要がありますか。または、より正確には、合計のどの符号が必ずしもオーバーフローエラーを示しますか?

これに対する答えも同様にエレガントです。決してありません 反対の符号が2つ足し合わされると、オーバーフローエラーになります。この理由は、オーバーフローの性質を考慮すると明らかです。数値の大きさがビットフィールドのサイズで許可されている範囲を超えると、オーバーフローが発生します。

2つの同じ符号の数値の合計は、これら2つの数値のビットフィールドの範囲をはるかに超える可能性があるため、この場合、オーバーフローが発生する可能性があります。ただし、正の数が負の数に追加された場合、合計は2つの追加された数のいずれよりも常にゼロに近くなります。その大きさは必須 どちらかの元の数の大きさよりも小さいため、オーバーフローは不可能です。

幸い、このオーバーフロー検出の手法は電子回路に簡単に実装でき、デジタル加算器回路の標準機能です。後の章で取り上げます。

関連するワークシート:


産業技術

  1. 科学としてのエレクトロニクス
  2. ホームラボのセットアップ
  3. 電圧計の使用法
  4. 3ビットバイナリカウンタ
  5. 10進数と2進数
  6. 8進数と16進数の数値
  7. バイナリ加算
  8. バイナリ減算
  9. オーバーフロー パイプとは?
  10. x86 上のアーム用のコンテナー ビルド
  11. Go on PLCnext を使ってみる