基数

いろいろなところ(カレンダーや時計etc)で「数字」が出てきます。
この数字というのは、ある事象の大きさを表すことに用いられますね。
10進数と言うのは普段一番よく使われる数字のことで、
0〜9までの10個(0,1,2,3,4,5,6,7,8,9)を基数とする表記法のことです。
10進数で「321」とあると、通常は「さんびゃくにじゅういち」と読み、
意味として、「3が100個、2が10個、1が1個」あるということを表しています。
なぜ「3」は「100」なのに「2」や「1」は「100」ではないかというと、
「10進数において右から3番(桁)目は10の二乗なので、3は100」であり、
「右から2番(桁)目は10の一乗で10、一番右の桁は10の〇乗で1」だから、です。
言い方を変えると、「右から3番目は10の重み(係数)が2つ(二乗)付いている」となります。
10進数において、係数は1,10,100,1000,…と桁数に比例して10倍ずつ増えます。
つまり、「右からX番目の桁は、10の重みが『X−1』乗だけ付いている」ということです。
各々の数字に、各々の係数を乗算することで、その数全体の大きさを知ることができます。
「321」は「『3×10の二乗』+『2×10の一乗』+『1×10の0乗』」
Xの0乗は、Xがどんな数字であっても答えは1となるので、知らなかった人は覚えておきましょう。 繰り上がりの話ですが、10進数では、基本である「0」から順に1ずつ増えて行き、 10種類目の「9」の次は再び「0」に戻り、上位(左側)桁に「1」が現れます。 この表現が分かりにくいなら、見えてないけど、元々全ての桁に初期値の0が入っていると考え、 「9」が「0」になり、左側の「0」に「1」足されて「1」になると考えてください。 これが、数字の繰り上がりと言うものです。

2進数や16進数と言うものも、10進数と原理は同じです。
例えば2進数なら、基本の「0」から2種類の数字(0,1)を用いて、
桁上がりは、用いる数字の中で最も大きい「1」の次ですので、
「0」「1」の次は「10」となり、「11」の次は「100」となります。
「10」や「11」の読み方ですが、「じゅう」や「じゅういち」ではなく、
「いちぜろ」「いちいち」と読むのが普通だと思います。
重み(係数)も「2のX−1乗」となり、右端桁は0乗の為に10進数と同じ「1」になりますが、
右から2番目の係数は「2」、3番目は「4」、4番目は「8」、5番目は「16」…となります。

16進数も同じですが、基数が10進数より大きく、1桁で16種類必要となります。
10種類(0〜9)はそのままで、以降はアルファベットをA(またはa)から順に用います。
つまり、16進数の場合は「0〜9」と「A〜F」ですね。
読み方も2進数と同じで、「いちいち」や「いちびー」等となる…と思います。
係数は「16のX−1乗」なので、右端桁から順に「1」「16」「256」「4096」…です。

10進数と2,16進数のそれぞれの値の対応表を書くと、
2進数10進数16進数
10
11
100
101
110
111
1000
1001
101010
101111
110012
110113
111014
111115
100001610
2,16進だけでなく5,7進数だって20進数だって存在します。 それらの基数を使用しないのは、単純に利用価値(メリット)がほとんどないから、です。 2進数は、コンピュータが理解するデジタル信号に使用されますし、 16進数は、2進数の延長で1KB(1,024)や1MB(1,048,576)を表すのに簡単です。 また、2進数の4桁分が16進数の1桁に相当し、考えてすぐに暗算でも変換できます。 例えば「11001001」という2進数ならば、「1100」「1001」と2つに分解し、 それぞれを16進数で表すと「C」と「9」になりますが、 実際「11001001」は10進数で「201」であり、16進数にすると「C9」です。 尚、通常は何進数を表しているのか「11001001(2)」という様にカッコ書きで表します。

HSP2用ですが、TIPSにある基数変換アルゴリズムは次のようにして計算しています。
10から2進数の変換を例にすると、10進数の数値を2で割って出たあまりを一番目の桁とします。
そして商(割って出た答え)を使って2で割り商、余りを出し、商が0になるまで繰り返します。
「11(10)」を2進数に変換する例を書いてみましょう。

111÷2(基数)の計算をする
2出てきた余り「1」を1桁目とする1(2)
3商「5」を使って5÷2を計算する
4出てきた余り「1」を2桁目とする11(2)
5商「2」を使って2÷2を計算する
6出てきた余り「0」を3桁目とする011(2)
7商「1」を使って1÷2を計算する
8出てきた余り「1」を4桁目とする1011(2)
9商が「0」になったので終了する

2進数から10進数に直すのも簡単で、
それぞれの桁の数値に、桁に付く重み(係数)を掛けて全ての桁を足すと答えが出ます。
「1101(2)」を例として流れを書いてみましょう。

11桁目の数値「1」×係数「1」を計算する1(10)
22桁目の数値「0」×係数「2」を計算する0(10)
33桁目の数値「1」×係数「4」を計算する4(10)
44桁目の数値「1」×係数「8」を計算する8(10)
5数値を全て足して終了13(10)

16進数にしろ、何進数にしろ、基数が変わっても計算方法は同じです。
おさらいとして、2進数「101101001」が10進数で幾つか係数付きで書いておきます。

256128643216係数
×××××××××
(2)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
2566432 361(10)


2,16進数についての説明をわかりやすく書いたつもりですが、ご理解いただけましたか?
ロジックが今ひとつ分からない方は、そのスクリプトを解析して研究してみてはいかがでしょう?