2進数の文字列を10進数に変換するJavaScriptプログラム
文字列として与えられた2進数を受け取り、それに相当する10進数の数値を返すJavaScript関数を作成してみましょう。
アルゴリズムの考え方
実装は非常にシンプルです。forループで文字列を左から順に走査し、各ビットを読み込むたびに「現在の数値を2倍してから、そのビットの値(0または1)を加算する」という処理を繰り返します。これはホーナー法として知られる手法です。
例えば「1101」の場合、計算は次のように進みます。
1 → 1×2+1=3 → 3×2+0=6 → 6×2+1=13
コード例
const binaryToDecimal = binaryStr => {
let num = 0;
for(let i = 0; i < binaryStr.length; i++){
num *= 2;
num += Number(binaryStr[i]);
};
return num;
};
console.log(binaryToDecimal('1101'));
console.log(binaryToDecimal('1101000'));
console.log(binaryToDecimal('10101'));出力結果
コンソールには以下のように出力されます。
13
104
21
補足:組み込みメソッドを使う方法
なお、独自のロジックを実装せずに済ませたい場合は、第2引数に基数を指定できる組み込みメソッド parseInt(binaryStr, 2) を使うことでも、まったく同じ結果を得られます。ただし、変換の仕組みを理解するためにも、上記のような手動実装の考え方を押さえておくことは非常に有用です。
-
【JavaScript入門】文字列と数値を連結せずに足し算する方法
JavaScriptでは、文字列と数値を「+」演算子で組み合わせると、加算ではなく連結(文字列の結合)が実行されます。これは、片方のオペランドが文字列である場合、もう片方も自動的に文字列へ変換されるためです。意図した計算結果を得るためには、文字列をあらかじめ数値へ変換しておく必要があります。 本記事では、単項プラス演算子「+」やparseInt()を使って、文字列と数値を正しく加算する方法を具体例とともに解説します。 例1:そのまま加算すると連結される 次の例では、変換を行わずに文字列を数値と直接足しています。この場合、加算ではなく連結が行われ、「1005」という結果が出力されます。 &l
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod