導入:なぜ「基数変換」の理解が重要なのか
プログラミングにおいて、10進数を2進数や16進数に変換したり、あるいはその逆を行ったりする処理は、データ通信やカラーコードの操作、ハッシュ値の計算などで頻繁に必要となります。しかし、JavaScriptの標準仕様に「Math.radix」という名前のAPIは存在しません。よくある誤解ですが、JavaScriptには標準で備わっている「基数(Radix)を指定した変換メソッド」が存在します。この仕組みを正しく理解することは、数値演算のバグを防ぎ、複雑なデータ処理を効率化するために非常に重要です。
基礎知識:基数(Radix)とは何か
「基数(Radix)」とは、数値を表現するための土台となる数字の個数のことです。私たちが日常で使うのは「10進数(0-9)」ですが、コンピュータの世界では「2進数(0-1)」や、Web開発では色指定の「16進数(0-9, a-f)」が多用されます。JavaScriptでは、これらを相互に変換するために、数値型(Number)が持つメソッドや、parseInt関数を利用します。
実装:基数変換の解決策
JavaScriptで基数変換を行うには、以下の2つの手法を使い分けます。
1. 10進数から他の進数へ:数値型メソッドの .toString(radix) を使用します。
2. 他の進数から10進数へ:グローバル関数である parseInt(string, radix) を使用します。
ここで重要なのは、radixには「2から36」までの整数を指定できるという点です。これにより、特殊な進数表現も一行で処理可能になります。
サンプルプログラム:基数変換の実装コード
// 1. 10進数から他の進数へ変換 (toString) const num = 255; console.log(num.toString(2)); // 出力: "11111111" (2進数) console.log(num.toString(16)); // 出力: "ff" (16進数) // 2. 他の進数から10進数へ変換 (parseInt) const binaryStr = "1010"; const hexStr = "1a"; // 第2引数に基数(Radix)を指定するのがポイントです console.log(parseInt(binaryStr, 2)); // 出力: 10 (10進数) console.log(parseInt(hexStr, 16)); // 出力: 26 (10進数) // 応用:36進数(数字+アルファベット)の変換 // 短縮URLの生成などで使われることがあります const specialNum = 12345; const encoded = specialNum.toString(36); console.log(encoded); // 出力: "9ix"
応用・注意点:現場で陥りやすいバグ
現場で最も注意すべきは、parseIntを使用する際に第2引数(基数)を省略しないことです。
かつてのJavaScriptでは、先頭が「0」で始まる文字列を自動的に「8進数」として解釈する挙動がありました(現在は改善されていますが、古いブラウザや特定の環境では注意が必要です)。意図しない進数として計算されることを防ぐため、parseInt(value, 10) のように必ず基数を明示するのがプロとしての習慣です。
また、基数変換は「整数」に対して行うのが基本です。小数を含む計算を行いたい場合は、一度文字列を分解するか、Math.floorなどで整数化してから処理を行う必要がある点にも留意してください。正確な型変換を心がけることで、堅牢なアプリケーション開発が可能になります。