スポンサーリンク

【応用情報技術者試験】コンピュータ科学基礎理論を学ぼう!     ~第2章~負数の表現

画像参照:https://frontiesta.com/plus-minus/

負の数を表す方法

2の補数は、主にコンピュータが2進数で負の数を表現する際に用いる手法であり、ある2進数の全ビットを反転(1の補数)させ、最後に1を加えたものです。この方式を使うと、加算器で引き算(減算)も行えるため、計算回路を簡素化できるメリットがあります。 

2の補数の計算方法

例えば「0010(2)」の2の補数を求める手順は以下の通りです。

  1. ビットを反転(1の補数にする):0010 → 1101
  2. 1を加える 1101 + 1 =1110

結果:0010 の2の補数は 1110 (-2を表す)

特徴と役割

  • 負の数表現: 最上位ビットが1の場合、負の数と解釈されます。
  • 計算の自動化: A – B を A + (Bの2の補数) として計算できるため、減算専用の回路が不要になります。
  • 定義: 元の数と足し合わせた時に、桁あふれ(キャリー)を除いて結果が0になる数です。
  • 補数計算: 1の補数に1を加えることでも求まります。 

この手法により、ハードウェア側で「加算」と「符号反転」の機能を組み合わせるだけで、効率的に数値演算が行われています。

正負の判定
正の数:0から始まる2の補数(例:0010)・・・2
負の数:1から始まる2の補数(例:1110)・・・-2

10進数値への変換

負の数の2の補数を10進数に変換する場合は、そのまま計算してはいけません。
まずは、表の姿に戻す必要があります。基本的には、2の補数を作る時と逆の手順を踏んで、最後に-(マイナス)をつけます。

例:1110の場合

1. ビットを反転:0001
2. 1を加える:0010
3. 10進数に戻す:2
4. -(マイナス)をつける:-2

符号付き表現と符号なし表現
符号付き表現の場合:「1110」は-2となります。
符号なし表現の場合:「1110」は14となります。
※何も記載がなければ符号なし表現と判断する。

2の補数での表現範囲

2の補数表現(nビット)の表現範囲は、-2n-1から2n-1-1までです。符号ビット(最上位桁)が1の場合は負、0の場合は正を表します。また、正の数より負の数が1つ多い(-128〜127)という特性があり、0は1種類(全ビット0)に統合されます。

2の補数表現範囲(ビット数別)

ビット数表現範囲
4-8 〜 7(-23 〜 23-1)
8-128 〜 127(-27 〜 27-1)
16-327568 〜 32767(-215 〜 215-1)
n-2n-1 〜 2n-1-1

特徴と注意点

  • 符号ビット: 最上位桁が1なら負、0なら正。
  • 負の数の方が広い: 最小値(-2n-1)の絶対値は、最大値(2n-1-1)よりも1大きい。
  • オーバーフロー: 範囲外の計算結果は正しく表現できない(例: 8ビットで-128-1)。

コメント