JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでバイナリ配列(2進数)を10進数に変換する方法

問題

0と1のみで構成されるバイナリ配列(2進数の配列)を受け取るJavaScript関数を作成する必要があります。

この関数は、まず配列内のすべてのビットを1つの2進数として連結し、その2進数に対応する10進数の値を返すものとします。

例えば、[1, 0, 1, 1]という配列が与えられた場合、これを「1011」という2進数とみなし、対応する10進数である「11」を返します。

解決策:累乗を使った実装

各ビットの位置に応じた2の累乗を計算し、合計することで10進数への変換を行います。以下がそのコード例です。

const arr = [1, 0, 1, 1];

const binaryArrayToNumber = arr => {
   let num = 0;
   // 最上位ビットから順に処理するため、指数は「配列の長さ - 1」から開始
   for (let i = 0, exponent = arr.length - 1; i < arr.length; i++) {
      if (arr[i]) {
         num += Math.pow(2, exponent);
      };
      exponent--;
   };
   return num;
};

console.log(binaryArrayToNumber(arr));

出力

11

コードの解説

このコードでは、配列の先頭(最上位ビット)から順に処理を行います。指数は初期値として「配列の長さ - 1」が設定され、ループが進むごとに1ずつ減少していきます。

具体的には、[1, 0, 1, 1]の場合、次のように計算されます。

  • 1番目のビット「1」 → 2³ = 8
  • 2番目のビット「0」 → 0(ビットが0のため加算されない)
  • 3番目のビット「1」 → 2¹ = 2
  • 4番目のビット「1」 → 2⁰ = 1

合計:8 + 0 + 2 + 1 = 11

別の解決策:parseIntを活用する簡潔な方法

JavaScriptには、文字列を指定した基数の数値に変換できるparseInt()という便利な組み込み関数があります。これを利用すると、より簡潔に記述できます。

const binaryArrayToNumber = arr => parseInt(arr.join(''), 2);

console.log(binaryArrayToNumber([1, 0, 1, 1])); // 11

この方法では、join('')で配列を「1011」という文字列に連結し、第2引数に基数「2」を指定してparseInt()を呼び出すことで、一発で10進数に変換できます。コードが短く可読性も高いため、実務ではこちらのアプローチが推奨されることが多いです。

  1. JavaScriptのArray.prototype.map()メソッドの使い方を徹底解説

    Array.prototype.map()とは? JavaScriptのArray.prototype.map()メソッドは、配列の各要素に対してコールバック関数を実行し、その戻り値から新しい配列を作成するためのメソッドです。元の配列は変更されないため、安全にデータ変換を行いたい場合に非常に便利です。 構文 arr.map(function callback(currentValue[, index[, array]]) 各引数の意味は以下のとおりです。 currentValue:現在処理している要素の値 index(省略可能):現在処理している要素のインデックス番号 array(省略可能

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の