基数の変換
(1) このページでは,10進法で書かれた整数を2進法に直すなど,一般に○進法で書かれた数を△進法に直す方法を考えてみます.
(2) 10進法の10や2進法の2は,基数と呼ばれます.
【10進法】
10進法では各位の数に0, 1, 2, … 9 までの10種類の数を使って表します.
例えば473は,4×102+7×101+3を表します.
【2進法】
2進法では各位の数に0, 1の2種類の数を使って表します.
例えば2進法で書かれた数101(2)を10進法に直すと,1×22+0×21+1=5になります.
【3進法】
3進法では各位の数に0, 1, 2の3種類の数を使って表します.
例えば3進法で書かれた数120(3)を10進法に直すと,1×32+2×31+0=15になります.
【16進法】
16進法の数字を表すには,各位の数に16種類の数が必要になります.0, 1, 2, … 9 までの10種類の数だけでは足りませんので,アルファベットの a, b, c, d, e, f を追加して合計16種類の数字を使います.16進法では1文字 a だけで10進法の10を, b だけで10進法の11を,…, f だけで10進法の15を表します.
例えば16進法で書かれた数ff(16)を10進法に直すと,15×161+15=255になります.
【36進法】
各位の数に0, 1, 2, … 9 までの10文字とアルファベットのa, b, c, … , y, z までの26文字を追加すると,36進法の数字が書けます.
例えば36進法で書かれた数y5(36)を10進法に直すと,34×361+5=1229になります.
※このページでは,36進法までを扱います.

(3) javascriptのビルドイン関数(ブラウザに初めから組み込まれている関数)parseInt(str, radix)は,第1引数strで与えられた文字列を第2引数radixを基数とする数字と見なして,その数を10進法に直した整数を返します.
i) 第1引数に小数点以下を含む文字列を指定したときは,小数点以下は切り捨てになります.
ii) 第2引数の基数に対してあり得ない文字が第1引数に含まれる場合は,NaN(=Not a Number 数字ではない)というエラーメッセージが返されます.
【例1】
<script type="text/javascript">〜</script>の中で
aa1 = '1f';
aa2 = parseInt(aa1, 16);
document.write(aa2);
とすると,16進法の1fを10進法に直した数31が表示されます.
1×161+15=31
【例2】
同様にして
aa1 = '101.1';
aa2 = parseInt(aa1, 2);
document.write(aa2);
とすると,2進法と解釈して小数点以下を切り捨てた数101を10進法に直した数5が表示されます.
1×22+0+1=5
【例3】
同様にして
aa1 = 'xz';
aa2 = parseInt(aa1, 36);
document.write(aa2);
とすると,36進法のxzを10進法に直した数1223が表示されます.
33×361+35=1223
【例4】
同様にして
aa1 = 'g7';
aa2 = parseInt(aa1, 16);
document.write(aa2);
とすると,16進法にはgという数がないのでNaNが表示されます.

(4) 10進法の数字をNumberオブジェクトにしておいて,toString(radix)を使うと,radixを基数とする文字列に変換した結果が返されます.
基数には2から36までが指定できます.
【例5】
<script type="text/javascript">〜</script>の中で
bb1 = new Number(322);
bb2 = bb1.toString(36);
document.write(bb2);
とすると,10進法の322を36進法に直した数8yが表示されます.
8×361+34=322
【例6】
同様にして
bb1 = new Number(90);
bb2 = bb1.toString(3);
document.write(bb2);
とすると,10進法の90を3進法に直した数10100が表示されます.
1×34+0+1×32+0+0=81+9=90

(5) 上記のparseInt()toString()を組み合わせると,基数の変換ができます.(ただし,変換元も変換先も36進法までの正の整数とします.)
【例7】
<script type="text/javascript">〜</script>の中で
aa1 = 'fe';
aa2 = parseInt(aa1, 16);
bb1 = new Number(aa2);
bb2 = bb1.toString(7);
document.write(bb2);
とすると,16進法のfeを7進法に直した数512が表示されます.
15×161+14=254=5×72+1×71+2
【例8】
同様にして
aa1 = 'a19';
aa2 = parseInt(aa1, 12);
bb1 = new Number(aa2);
bb2 = bb1.toString(35);
document.write(bb2);
とすると,12進法のa19を35進法に直した数16qが表示されます.
10×122+1×121+9=1461=1×352+6×351+26
【練習用の問題
元の数の添え字が基数を表すものとして,次の各々の数を指定された基数に変換してください.
元の数3進法7進法8進法
1010(2)


123(10)


元の数10進法16進法36進法
ab1(13)


pq2(32)