いろいろな進数
出典: YKAwiki
デジタル信号はHigh(1)とLow(0)の2つの信号しかない。 この「0」と「1」の組み合わせをbitと呼び、bit数が増えるにつれ表現できる数は2倍に増えていく。
例えば1bitだと「0」と「1」の2種類しか表せないが、2bitになると「00」、「01」、「10」、「11」の4つの数を表すことができる。さらに3bitになると8種類、4bitになると16種類の数を表すことができるが、あまりにbit数が大きくなると、それを全て「0」と「1」で扱うのがめんどくさくなってくる。そこで、状況に応じて以下で説明する進数を使い分けて扱いやすくしたりしなかったり。
目次 |
2進数
デジタル信号の「0」と「1」をそのまま並べて表現する方法。バイナリ。
0,1,10,11,100...
「0」と「1」しかないため、1+1=10であり、1+1+1=11である。
bit数(桁数)が増えるにつれ表現できる数が2倍に増えていく。
信号のHighとLowが一目でわかるので、デジタル回路に用いられやすい。
ただし、桁が大きくなると素人目ではパッと見で何を言っているのかわかりにくい。
一例として12bitだと011100011010のように表現できる。
8進数
3bitごとに区切って対応する数で表現する方法。
0,1,2,3,4,5,6,7,10,11,12...
上の12bitだと、011|100|011|010と区切って3432となる。
2進数より桁が小さくて済み、きっと数の大小なんかはわかりやすい。
現在ではあまり使われていない。それでもUnixのパーミッションなんかで使う。
16進数
4bitごとに区切って対応する数(アルファベット)で表現する方法。
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12...
先の12bitだと、0111|0001|1010と区切って71aなんてことになる。
プログラムで用いることもあり、0x71aとか0h71aなんて表現をする。
一昔前(?)のゲームだと、パラメータが4bitしかなく、0xffが最高値だったりする。ちなみにこれは10進数でいう255のこと。
自分を若く見せたいときには16進数を使って年齢を言えばあながち嘘ではないだとか。
10進数
日常使われる数字の表現方法。直感的にわかりやすい。
時計なんかは24進法とか60進法を使ってるんで、他の進法も結局は慣れなのかなぁと思ったり思わなかったり。
3bitで8、4bitで16なので、デジタル信号で直接表現するにはBCDという工夫が必要である。
BCD
Binary Coded Decimal。二進化十進表現。
16進数のように1桁を表すのに4bit使いつつ、a,b,c,d,e,fに対応する部分は使わずに次の4bitを使う。 具体的には下の対応表を参照。
対応表
| 10進数 | 2進数 | 8進数 | 16進数 | BCD |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0000 |
| 1 | 1 | 1 | 1 | 0001 |
| 2 | 10 | 2 | 2 | 0010 |
| 3 | 11 | 3 | 3 | 0011 |
| 4 | 100 | 4 | 4 | 0100 |
| 5 | 101 | 5 | 5 | 0101 |
| 6 | 110 | 6 | 6 | 0110 |
| 7 | 111 | 7 | 7 | 0111 |
| 8 | 1000 | 10 | 8 | 1000 |
| 9 | 1001 | 11 | 9 | 1001 |
| 10 | 1010 | 12 | a | 00010000 |
| 11 | 1011 | 13 | b | 00010001 |
| 12 | 1100 | 14 | c | 00010010 |
| 13 | 1101 | 15 | d | 00010011 |
| 14 | 1110 | 16 | e | 00010100 |
| 15 | 1111 | 17 | f | 00010101 |
| 16 | 10000 | 20 | 10 | 00010110 |
| 17 | 10001 | 21 | 11 | 00010111 |
| ... | ... | ... | ... | ... |
| 255 | 11111111 | 377 | ff | 001001010101 |
| ... | ... | ... | ... | ... |
