2の補数について

目次

2の補数の考え方を知る

2の補数は、マイナスの数を2進数で表すための表現方法です。

2の補数がどのようなものかを知るために、まずはマイナスの数を2進数で表す考え方をまず理解します。

自然な考え方

1バイト(=8ビット)で表現できるパターン数は、2の8乗=256通りとなります。

これらを0以上の整数に割り当てると、0~255の数を表現できます。

では、マイナスの数を表現したい場合はどのようにしたらよいでしょうか?

真っ先に思いつくのは、先頭1ビットを符号とみなす方法です。

この方法によれば、7ビットで表現できるパターン数が2の7乗=128通りなので、-127~127の数を表現できます。

8765432110進数補足
01111111127正の数の最大値
11111111-127負の数の最小値(絶対値の最小値)

人間にとっては、この表現方法が自然で、10進数→2進数、2進数→10進数の変換も容易に連想できるでしょう。

ただし、この表現方法によると「0」を表すのに、「+0」と「ー0」の2とおりの表現があって冗長となります。
人間にはとっては自然に見えるこの方法も、コンピューターにとっては最善ではありません。

2の補数

下記は、コンピューターにとって最適なマイナスの表現である、「2の補数」による表現方法です。

8765432110進数補足
01111111127正の数の最大値
000000011正の数の最小値
000000000±0(ゼロ)
11111111-1負の数の最大値(絶対値の最小値)
11111110-2
10000001-127
10000000-128負の数の最小値(絶対値の最大値)

もはや、2進数→10進数、10進→2進数の連想は不可能かもしれません。

それでは、2の補数の特徴を詳しく見ていきましょう。

「127」と「-127」、「1」と「-1」をそれぞれ加算してみてください。

いずれも、「00000000(オーバーフロー)」となったはずです。

つまり、オーバーフローを無視すれば、足し合わせた結果が0になります。

逆に言えば、プラスマイナスが正反対の2つの2進数を足したとき、結果が0となるように恣意的にマイナスの数を表現したものが「2の補数」ということです。

大事なのでもう一度繰り返します。

「2の補数」とは、マイナスの数を2進数で表現する際に、絶対値が同じプラスの数を足したときに結果が0となるように恣意的に表現したもの。

ここで、「恣意的に」というところがポイントです。「恣意的に」という表現を言い換えるならば、「工夫して」となるでしょうか?つまり、扱いやすくなるようにということです。

2の補数の計算方法

上記で2の補数の本質を知ってしまったあなたならもう計算は簡単なはずです。

まず、絶対値を7ビットで表現します。(例:-67)

1000011(67)

次に、0と1を反転させます。

0111100

1をプラスします。

0111101

先頭ビットに1を付加します。

10111101(-67)

確認

67と-67を足して0になることを確認してみましょう。

98765432110進数
0100001167
10111101-67
(1)オーバーフロー000000000
よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

目次
閉じる