IT

2進数で負数を表現する方法とは?2の補数を用いた方法を解説します

こんにちは。Tama(@tamateur_com)です!

今回は、2進数において負数を表現する方法について解説します。
前提知識として、2の補数の考え方が必要になるので、以下の記事を理解してから読み進めると良いと思います。

10進数で負数を表現するには、数字の前にマイナス記号を付ければよいです。
(例)-3、-256
※10進数では正数に対してプラス記号は省略しています。わざわざ「+10」とはしません

それなら、2進数でもマイナス記号を使えばよいと思われるかもしれませんが、2進数では、「0」と「1」しか使用できないため、マイナス記号などは使えません。
そこで、2進数では「符号なし2進数」と「符号あり2進数」というものを使い分けます。

符号なし2進数:正数だけを表現する時
符号あり2進数:負数も表現する時

「符号あり2進数」の時は、最上位ビットが「0」の時は正数を、「1」の時は負数を表します。符号ビットと呼ばれたりします。
(例)010110→正数  1011101→負数

ここからは、もう少し具体的に説明していきます。

符号なし2進数

10進数01234567
2進数000001010011100101110111

「符号なし2進数」での10進数と2進数の対応付けは、上のようになります。

符号あり2進数

2進数000001010011100101110111
10進数123-4-3-2-1

「符号あり2進数」での10進数と2進数の対応付けは、上のようになります。
最上位ビットが「1」の場合は10進数のでは負数になっていますね。
それでは、2の補数を用いて実際に求めてみましょう。

10進数「-3」を2進数に変換する手順を説明します。たった2ステップです。

①10進数を2進数に変換

「-3」を2進数に変換するには、「3」を2進数に変換します。
すると、”011″になります。

②”011″の2の補数を求める

2の補数を求めるには「0」「1」を反転(ビット反転)して1を加算でしたね。
つまり、011→100→101 になります。

どうでしたか?2の補数の求め方を知っていれば、2進数で負数を表現するのは簡単ですね!
ちなみに、「符号あり2進数」から10進数に変換するときは、逆の手順をするだけです。
“101”の2の補数は、”011″で、10進数に変換すると「3」になる。つまり「-3」です。

おまけ


「符号なし2進数」と「符号あり2進数」で表現できる範囲について解説します。
試験でも出題される可能性があるため知っておくと良いです。
知っていれば瞬殺できます。

符号なし2進数の場合、0~2n-1となります。
n=3のとき、0~23-1 となり、表現できる範囲は、0~7 です。

符号あり2進数の場合、-2n-1~2n-1-1となります。
n=3のとき、-23-1~23-1-1 となり、表現できる範囲は、-4~3 です。

今回はこれで以上になります。
仕組みが分かれば簡単に解くことができますので、この解説が参考になれば嬉しいです。