
画像参照:https://frontiesta.com/plus-minus/
負の数を表す方法
2の補数は、主にコンピュータが2進数で負の数を表現する際に用いる手法であり、ある2進数の全ビットを反転(1の補数)させ、最後に1を加えたものです。この方式を使うと、加算器で引き算(減算)も行えるため、計算回路を簡素化できるメリットがあります。
2の補数の計算方法
例えば「0010(2)」の2の補数を求める手順は以下の通りです。
- ビットを反転(1の補数にする):
0010 → 1101
- 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
)。

コメント