2 進数や1 6進数って?
本筋とは離れますが、ところどころに出てくるので少しだけお話ししておきます。
数を表す際に数字をいくつ使いますか? それは当然10個でしょうか? 日常生活の中ではそれが当たり前ですが、別に10個の数字を使わなくてはならないと、数学的に決まっているわけではありません。
これは純粋に人間の都合によるもので、たぶん人間の指が10本あるので、抽象化するときに馴染みやすかったのでしょう。
どんな数字がキリがいいのか、というのは国によっても違うくらいです。
日本人は10とか5で(五十日なんて言葉もあります)一区切りつけるのが好きです。
硬貨も5 円・10円・50円と続きますよね。
でも、アメリカには25セント硬貨というものがあります。
同様に、コンピュータにとって都合のいい区切りの数というのがあります。
コンピュータは、「ある回路に電流が流れている・流れていない」という2 通りの数え方しかできません。
仮に「流れている=l 」「流れていない= 0 」というように決めると、2 や3 は理解できないのです。
この世界の捉え方を(数字を2 個しか使えないので) 2 進数と呼びます。
2 進数の世界では、まず0 があって、1 がきて、その次はもうケタが上がって10になります。
次は11でその次は100です。
数字が2 種類だけですから、がんがんケタ数が大きくなっていきます。
「ええっ? ふつうにコンピュータに10進数の計算をさせてるけど? 」って思われますか? そうです。
コンピュータは10進数の計算も可能です。
しかしそれは2 進数と10進数を両替して計算しているのです。
人間が10進数を入力すると、コンピュータはまずそれを「2 進数だといくつになるだろう」と直してみて、2 進数として計算します。
その計算結果( 当然2 進数で出てきます) は、人間には分かりづらいですから、10進数に直して表示するのです。
この2 進数←→10進数の変換のことを「基数変換」 といいます。
基数は2 進数、10進数の他にも、3 進数や4 進数など、なんでも考えられます。
でも、2種類あればたくさんだと思いませんか?2 進数→ コンピュータが使いやすい数字10進数→人間が使いやすい数字2 種類あればおなかいっぱいです。
でも、コンピュータを使っていると、よく16進数というのに出くわします。
なんでこんなややこしい3 つめの基数が出てくるのでしょうか。
2 進数というのは、先ほども見たように、ある数値を表すのにとてもケタ数が大きくなってしまう特徴があります。
コンピュータにはよくても、人間にはとっても読みにくい数字なのです。
「だから10進数に直すんでしょ?」 って、その通りなのですが、2 進数と10進数の相性が実はあまりよろしくありません。
例えば、4 ケタの2 進数が表せる数の範囲は、( 10進数でいう) 0~15です。
これが8 ケタになると0~255になります。
別にこれでもいいんですが、ケタが繰り上がる箇所が2 進数と10進数で、ぴったり合ってくれないので、計算がしにくいときがあります。
そこで用いられるのが16進数という、数字を16種類使う基数です。
16は2 × 2 × 2 … … という計算で得られる数なので、2 進数との相性がばっちりです。
なお、アラビア数字には、10種類しか数字のバリエーションがないので、16進数を使うときは足りない6種類をアルファベットのA~Fで補います。
0 ~ 9 までは10進数と同じですが、( 10進数でいう)15 までをl ケタで表さなければならないので、10→A、1 1 →B と読み替えるのです。
するとどうでしょうか? 2 進数4 ケタで表せる数の最大値が、1 6進数l ケタで表せる数の最大値とぴったり重なっていますね。
このように、基数変換において2 進数と1 6進数は相性がよいのです。
「2進数は長すぎて読みにくいなあ」というケースで、10進数の代わりに変換されることがよくあります。
コンピュータのエンジニアでもなければ、暗算で基数変換するような技能を持つ必要はありませんが、「そういう数字もあるんだな」 程度に頭に入れておいてください。
第2章パスワードにはなぜ有効期限があるのか?――破られることを前提とした防護システム