2進数と8進数と16進数

http://d.hatena.ne.jp/piyo2-moko/20080324#1206364751

我々人間は0〜9の数字で数を表す10進数を使っている。けど、コンピュータの話をしていると8進数や16進数がよく出てくる。
8進数は0〜7の数字で数を表す。16進数は0〜15の数字で表すのだが、10〜15を表す数字が存在しないので代わりにA〜Fを使う。つまり10=A、11=B、〜、15=F。
なぜこんなのが出て来るのか不思議に思っている?コンピュータはもともと0と1しか扱えない…つまり2進数で数を表している。off/onのスイッチが無数にあると思えばいい。画面に数字を表示する場合は内部で2進数→10進数に変換しているのだ。
で、2進数で数を表現すると、とても長くなってしまう問題がある。たとえば10進数の「130」を2進数で表すと「10000010」になる。1億なんか「101111101011110000100000000」と、とんでもない長さになってしまう。
そこで8進数や16進数が出てくる。2進数の「10000010」を8進数に直すには、まず「10,000,010」と3桁ずつに区切る。そして、それぞれの3つ組の数字に対して「000→0」、「001→1」、「010→2」、「011→3」、「100→4」、「101→5」、「110→6」、「111→7」の置き換えをする。そうすると「202」になる。これが8進数だ。8進数から2進数に直すには逆の置き換えをすればいい。16進数は4桁ずつに区切って置き換えをしていく。単純な置換だけなので相互変換が簡単にできる利点がある。
こんな感じで8進数と16進数は2進数と仲がいいのだ。

ちなみに2進数の桁をビットと言う。ビットを8つまとめたものをバイトと言う。1バイトで0〜255までの数字を表現できるのだが、バイトを表現するときにはよく16進数が使われる。16進数だと1バイトを2桁で表現できるからだ。こんな感じ。

10進数 16進数
   100     64
   255     FF
   256    100

あれだ、色の番号も#ff9900とかあるからそういう感じかな?

色の番号は6桁の16進数だよ。2桁ずつに区切って光の三原色(赤緑青)をどれだけ混ぜるかを表している。「ff(赤)」、「99(緑)」、「00(青)」って感じにね。WikiPediaに詳しく載ってるけど難しいかな…

RGB - Wikipedia

追記

require 'nkf'
NKF.nkf("-Se", "\202\351\202\321\202\253\202\277\202\263\202\361\202\240\202\350\202\252\202\306\202\244\202\262\202\264\202\242\202\334\202\267") # => "るびきちさんありがとうございます"

8進表記文字列でお礼を書いてくれるとは、なかなかユーモアあるものだ^^