こんにちは、もがちゃんです
以前の記事で、10進数を2進数表現に変換する方法を紹介しましたが、今回は負の10進数を2進数表現にする方法を説明します。
まだ、10進数を2進数表現に変換する方法を知らない方は、先に以下の記事を読んでください。
目次
2進数で負の値を表現する仕組み
2進数で負の値を表現する仕組みを、2進数8桁(8bit)の場合を例にして説明します。
2進数8桁で表現できる値とは、00000000(0) ~ 11111111(255) になりますが、これでは正と負の値を表現することはできません。
2進数で正の数と負の数を表現するため、最上位桁(最上位bit)の1桁を符号を表すために使用します。
具体的には、00000000(0) ~ 01111111(127) を 正の値、10000000(-128) ~ 11111111(-1) を負の値として表現します
負の10進数を2進数に変換する方法
負の10進数を2進数に変換する方法も、2進数8桁(8bit)の場合を例にして説明します。
まず、正の値と負の値の関係がどうなっているかを以下の表に記載します。
正の10進数 | 正の2進数 (符号ビットなし) | 負の2進数 (符号ビットあり) |
---|---|---|
1 | 00000001 | 11111111 |
2 | 00000010 | 11111110 |
3 | 00000011 | 11111101 |
4 | 00000100 | 11111100 |
5 | 00000101 | 11111011 |
: | : | : |
126 | 01111110 | 10000010 |
127 | 01111111 | 10000001 |
128 | 10000000 | 10000000 |
この表から、正の2進数と負の2進数を符号を意識しないで単純に加算するとすべて、100000000になる事がわかると思います。
この関係はから、負の2進数は補数になっている事が分かります。
補数(ほすう、complement)とは、ある基数法において、ある自然数 a に足したとき桁が1つ上がる(桁が1つ増える)数のうち最も小さい数をいう
Wikipedia 補数より引用
負の10進数を2進数に変換するには、変換したい負の値から符号を取った値(正の値)を 2進数に変換した後、変換した2進数の補数を求めれば変換することが出来ます。
補数を簡単に求めるには、変換前の2進数の0と1を反転させた結果に 1を加算すれば求められます。(1の補数を求めた結果に1を加算する方法)
以下は、補数の算出例になります。
00000001の補数は、11111110(0と1を反転させた結果) + 1 = 11111111
00000010の補数は、11111101(0と1を反転させた結果) + 1 = 11111110
01111111の補数は、10000000(0と1を反転させた結果) + 1 = 10000001
10000000の補数は、01111111(0と1を反転させた結果) + 1 = 10000000
基数変換(負の10進数を2進数へ変換)のまとめ
2進数で負の数を表現するために、最上位桁(最上位bit)を符号を表す桁で使用する。(0:正、1:負)
※コンピュータの場合、CPUには8bit、16bit、32bit、64bitなどがあるので、各桁(各bit)の最上位桁(最上位bit)が符号を表す桁として利用されます。
負の10進数を2進数に変換するには、以下の手順で変換することが出来る。
- 変換したい10進数(符号なし)を2進数に変換する。
- 変換した結果の1の補数を求める。
- 求めた1の補数に1を加算する。
どうでしたでしょうか?
負の10進数を2進数に変換するのは、正の10進数を2進数に変換することが出来れば、簡単に変換できることが分かっていただけたと思います。
この記事が少しでもあなたのお役に立てたなら幸いです。