コンピューターでは、CPU、メモリ、などで扱う全ての情報の表現は "0" と "1"だけ。この 0/1 の2進数で全ての計算を行っているのだそうです。(実際は電気信号の ON/OFF や電圧の差を使って動かしているそうです。)
2進数と16進数
普段、生活の中では10進数を使用しています。PCを使って、一般的な表計算ソフトなどで四則演算処理をする時は10進数で入力し、10進数で答えが表示されます。しかし、コンピューター内部では、通常2進数が使用されます。コンピューターのCPUやメモリなどは電気信号の ON/OFF を使用して計算処理を行なっているので、データの最小単位、2進数での1桁の "bit(ビット)" を使用してデータ処理をしているそうです。
10進数を2進数で表現すると、例えば、987を2進数で表すと 1111011011 。百、千、万、億と桁数が増えると、2進数では膨大な桁数になってしまいますし、分かりにくいです。
そこで、コンピューターで2進数のように扱えて、人にとって扱いやすいような書き方が16進数(16進数を表すには、 0~9 と a~f を使用)なのだそうです。
2進数 | 16進数 | 10進数 | 2進数 | 16進数 | 10進数 | |
---|---|---|---|---|---|---|
0000 | 0 | 0 | 1000 | 8 | 8 | |
0001 | 1 | 1 | 1001 | 9 | 9 | |
0010 | 2 | 2 | 1010 | A | 10 | |
0011 | 3 | 3 | 1011 | B | 11 | |
0100 | 4 | 4 | 1100 | C | 12 | |
0101 | 5 | 5 | 1101 | D | 13 | |
0110 | 6 | 6 | 1110 | E | 14 | |
0111 | 7 | 7 | 1111 | F | 15 |
1桁の16進数が最大値 F のとき、4桁の2進数も最大値 1111 になることが分かると思います。2進数を16進数に変換する場合、2進数を4桁毎に区切れば簡単ですし、その区切毎に上のような対応表を用意しておけば、それを見て16進数に置き換えができます。16進数から2進数へは、n桁の16進数→(4×n)桁の2進数で変換可能。
また、 "1Byte(バイト)" は、 8bit なので、2桁の16進数で表すことができます。
コード内での表記は、10進数はそのまま10進数の表記ですが、2進数と16進数は言語などによって異なるそうで、例として、2進数では先頭に "0b" を付けて 0b1100 のように、16進数では先頭に "0x" を付けて 0x3F9C のように表記して区別するそうです。
このように、プログラミングする際には、2進数と16進数は相性が良く、コンピューターの内部処理を理解するために、2進数とそれを表す際に多く用いられている16進数を学ぶことで、少なからずプログラミングにも役立つようになるのだそうです。