【独学するコンピュータサイエンス】16進数→2進数への変換
どうして16進数、10進数があるのか?
それは人間にとってわかりやすいからという意味があります。
コンピュータはわたしたちが書いたコードとか、マウスのクリックとか、そういうものをどのように理解しているかというと、すべてを1と0に変換することで理解しています。
コンピュータのなかでいろんな処理をやっていますが、結局は0と1への変換なのです。つまり、2進数でものごとを理解するのがコンピュータなのです。じゃあ、どうやってコンピュータは0と1を認識するの?って疑問にもつかと思いますが、それは電圧で認識します。CPUがコンピュータに送られてくるいろいろな命令を処理することで、その結果を0か1に変換します。いろいろな命令というのは何かというと電気信号です。電気信号が半導体でできたCPUに流れてきます。半導体の中にはたくさんの抵抗素子があります。学校の理科の授業でならったオームの法則、あのV=RIの式を思い出してください。いま半導体の抵抗のなかに電流がながれてくるので、V(電圧)=R(抵抗)×I(電流)の式より、電圧Vの値が抵抗と電流から求めることができます。ここで求まった電圧が2.5Vよりも大きければ1それよりも小さければ0として、CPUは電気信号としてやってきたアナログなデータを0と1というデジタルなデータに変換することで、さまざまな計算を行うのです。
16進数を2進数に変換してみる
実際に2進数を10進に変換したり、16進数を10進にはするのはCPUでなくてもたまに必要になります。なので、ここで理解しましょう。数の小さな物なら暗算できます。
16進数をおさらいします。
10 | F | E | D | C | B | A | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
注意)この表は0からカウントしていません。(上段が16進、下段が10進です)
0xFの次が0x10になることを確認してください。
では、0x1A を10進に変換してみます。簡単ですね。
0x10+0x0Aです。つまり10進にすると16+10で、26ですね。関数電卓で確認
してみてください。Windowsをつかっているひとなら電卓アクセサリがあってそれを関数電卓にできますよ。
では、この26を2進数に変換してみます。
10進で、16+10です。
下表は8ビット(1バイト)の各ビットが1のときの10進換算表です。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
2進数で16(=右から5番目の2^4だけビット1が立っているとき)は、
16 ->10000 です。
10は先の表で考えると8+2なので01000+00010です。
10 ->01010
すなわち
1 0 0 0 0 +0 1 0 1 = 11010 になりますね。
慣れてくると、ビットパターン(2進数)を見るだけで10進に出来ますよ。
そのためには、1、2、4、8、・・・を暗記しましょう。
こういう計算処理をCPUが行うことによってコンピュータは16進数や10進数の計算を行うことができるのです。
コンピュータのことを独学していくのはなかなか大変ですが、いまはとても良い時代でUdemyなどで独学は十分可能だとおもっています。ものによっては参考書一冊よりも安い値段で一流の講師から動画で学べるのは、ひかえめに言ってもなかなか素晴らしいことです。もしも、学習意欲があるならば、こちらでいろいろ探してみるのもおすすめです。
ではでは!