基数の変換
(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) |
【練習用の問題】 元の数の添え字が基数を表すものとして,次の各々の数を指定された基数に変換してください.
11120, 234, 173 1834, 72a, 1ey 26432, 6742, kea →閉じる← |