こんにちは。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進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2進数 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
「符号なし2進数」での10進数と2進数の対応付けは、上のようになります。
符号あり2進数
2進数 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
10進数 | 0 | 1 | 2 | 3 | -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 です。
今回はこれで以上になります。
仕組みが分かれば簡単に解くことができますので、この解説が参考になれば嬉しいです。