離散数学 04:補数と負の数の表現
コンピュータは、負の数もビット列で表します。情報処理技術者試験では、特に2の補数表現がよく出ます。補数表現を使うと、引き算を足し算として扱いやすくなります。
2の補数の作り方
nビットで正の数 x の負数を表すには、次の手順を使います。
- x を nビットの2進数にする
- 0 と 1 を反転する
- 1 を足す
例: 8ビットで -5 を表す。
5 は 00000101 です。反転すると 11111010、1 を足すと 11111011 になります。したがって、8ビットの2の補数表現では -5 は 11111011 です。
表せる範囲
nビットの符号付き2の補数では、表せる範囲は -2^(n-1) から 2^(n-1)-1 です。8ビットなら -128 から 127 です。正の側が 127 で止まるのは、0 を正側に含むからです。
オーバーフローの見方
8ビット符号付きで 127 に 1 を足すと、01111111 + 00000001 = 10000000 になります。これは -128 を表します。数学では 128 になるはずなのに、8ビットでは表せないためオーバーフローです。
試験での見方
補数問題では、何ビットで表すかを最初に確認します。4ビット、8ビット、16ビットでは同じ -1 でも表記の長さが変わります。-1 は、どのビット幅でも全ビットが 1 になるのが特徴です。
確認問題
4ビットの2の補数表現で -3 はどう表されるでしょうか。
3 は 0011、反転して 1100、1 を足して 1101 です。