IT用語を超やさしく理解する

符号付き数と補数

別名: 符号付き整数 / 補数 / 2の補数 / two's complement

先に知っておくと分かりやすいことば(1語)

必要なら先に確認できます。知っていることばは、そのまま読み進めて大丈夫です。

  • 2進数2進数の桁が1、2、4、8…の重みを持つことと、10進数との基本的な変換方法を初心者向けに説明します。

30秒で思い出す

コンピュータで負の整数を表す代表的な方法が 2の補数 です。

n bitの2の補数では、最上位bitが0なら0以上、1なら負の値を表し、範囲は -2^(n-1) 〜 2^(n-1)-1 になります。

超やさしく理解

4bitで10進数の5を表すと 0101 です。

この5を負の数 -5 として表したいときは、2の補数では次の手順を使えます。

+5        0101
0と1を反転 1010
1を足す    1011

したがって、4bitの2の補数表現では 1011 が -5 を表します。

正確にはどういうもの?

2の補数表現では、n bitの各bitに通常の2進数と少し違う重みを考えられます。

4bitなら、

bitの重み   -8   4   2   1
             1   0   1   1

なので、

-8 + 0 + 2 + 1 = -5

となり、1011 が -5 だと直接読み取れます。

最上位bitが1なら「残りのbitがそのまま絶対値」という意味ではありません。2の補数ではbit列全体で値を表します。

なぜ2の補数を使う?

正の数と負の数を同じ加算回路で扱いやすいからです。

4bitで +5 と -5 を足してみます。

  0101   (+5)
+ 1011   (-5)
------
1 0000

4bitの範囲では、最上位bitより左へ出た繰り上がり(carry)を捨てるため、結果は 0000、つまり0になります。

このように、減算を「負の数を足す」として扱いやすいことが2の補数の大きな利点です。

どこで使う?

符号付き整数をbit列として保存し、加減算するときの基本的な考え方として使われます。

デバッガやバイナリデータで同じbit列を見ても、符号なし整数として読むか2の補数の符号付き整数として読むかで値は変わります。bit列だけでなく、どの形式として解釈するかが必要だと理解することが重要です。

2の補数を作る

n bitの正の値から負の値を作る基本手順は、

  1. 0と1を反転する
  2. 1を足す

です。

たとえば8bitの 00000101(+5)なら、

00000101
↓ 反転
11111010
↓ +1
11111011

なので 11111011 が -5 です。

負の2の補数から値を読む

最上位bitが1なら負数です。

たとえば8bitの 11111011 を読むときは、

  1. 0と1を反転 → 00000100
  2. 1を足す → 00000101
  3. 10進数では5
  4. 元は負数なので -5

と考えられます。

表現できる範囲

n bitの2の補数で表せる整数は、

-2^(n-1) 〜 2^(n-1)-1

です。

bit数 最小値 最大値
4bit -8 7
8bit -128 127

正の側より負の側が1つ多いのは、0を1通りだけで表し、最上位bitの重みが負になるためです。

よくある勘違い

最上位bitが1なら、残りのbitが絶対値?

2の補数では違います。最上位bitは負の重みを持ち、bit列全体で値を表します。

0と1を反転するだけで2の補数になる?

反転したものは1の補数です。2の補数にするには、さらに1を足します。

2の補数ならどんな大きさの整数でも表せる?

bit数が固定されているため範囲があります。範囲を超える計算で起きるオーバーフローの詳細は別Knowledgeで扱います。

このKnowledgeで扱わないこと

ここでは整数の符号と2の補数を扱います。

固定小数点、浮動小数点、丸め誤差、オーバーフロー判定の詳細は後続Knowledgeへ分けます。

ここまで分かればOK

  • 2の補数が負の整数を表す代表的な方法だと説明できる
  • 正の2進数から2の補数を作れる
  • 負の2の補数表現を10進数へ読み替えられる
  • n bitで表せる範囲が -2^(n-1) 〜 2^(n-1)-1 だと分かる
  • 最上位bitを単純な符号と絶対値に分けて読まない

資格との関係

基本情報技術者試験

シラバス
Ver.9.2
必要な理解
問題で応用できる
重要度
分野
テクノロジ

関連するIT用語

次に読む

もっと知りたい

理解できたか確認しよう

答えを選んで、なぜそうなるのかまで確認できます。

確認問題 1

8bitの符号付き整数を読む

ある処理で8bitの符号付き整数が11111011として記録されていました。この値は2の補数表現です。

このbit列が表す10進数として最も適切なものはどれですか?

回答を1つ選んでください

確認問題 2

4bitで-5を表す

4bitの2の補数表現で、10進数の-5を表すbit列はどれですか?

回答を1つ選んでください