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

JavaScriptでパリティビットを計算してバイナリに追加する方法

パリティビットとは

パリティビット(チェックビットとも呼ばれます)とは、ビット列に付加される1ビットのことで、ビット列全体に含まれる「1」の総数が偶数(偶数パリティ)または奇数(奇数パリティ)になるように調整するために使用されます。データ通信や記憶装置における誤り検出の基本的な手法として、古くから広く利用されています。

問題

ここでは、次の2つの引数を受け取るJavaScript関数を作成します。

  • 希望するパリティ('even' または 'odd' のいずれか)
  • チェック対象の数値を表すバイナリ文字列

関数の役割は、そのバイナリ表現に追加すべきパリティビット(0または1の整数)を返すことです。返されたビットを付加することで、ビット列全体のパリティが期待どおりになります。

コード例

以下がその実装コードです。

const parity = 'even';
const bin = '0101010';
const findParity = (parity, bin) => {
  const arr = bin.toString().split("");
  let countOnes = 0;
  let res = 0;
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] == 1) {
      countOnes += 1;
    }
  };
  if (parity == 'even') {
    res = countOnes % 2 == 0 ? 0 : 1;
  } else {
    res = countOnes % 2 !== 0 ? 0 : 1;
  }
  return res;
};
console.log(findParity(parity, bin));

出力

1

解説

この例では、バイナリ文字列 '0101010' に含まれる「1」は3個(奇数)です。希望するパリティが 'even'(偶数)であるため、全体の「1」の個数を偶数にするには「1」を1個追加する必要があります。そのため、関数は 1 を返します。

処理の流れは次のとおりです。

  1. バイナリ文字列を1文字ずつ配列に分割する
  2. ループで「1」の個数をカウントする
  3. カウント結果と希望するパリティを比較し、追加すべきビット(0または1)を決定する

より簡潔な実装例

同じ処理は、配列メソッドを活用するとさらに簡潔に書くこともできます。

const findParity = (parity, bin) => {
  const ones = bin.split('').filter(bit => bit === '1').length;
  const isEven = ones % 2 === 0;
  return parity === 'even' ? (isEven ? 0 : 1) : (isEven ? 1 : 0);
};

どちらの実装でも、パリティビットの計算ロジックは同じです。用途やコードスタイルに応じて使い分けるとよいでしょう。

  1. JavaScriptで2次元行列を水平方向に反転し、さらにビット反転する方法

    問題0と1のみで構成される2次元のバイナリ配列 arr を唯一の引数として受け取るJavaScript関数を作成する必要があります。この関数は、まず行列を水平方向に反転(フリップ)し、その後に行列表現上の各値を反転(インバート)して、最終的な結果の行列を返すものとします。用語の定義水平方向への反転とは、行列の各行を逆順に並べ替えることを意味します。たとえば、[1, 1, 0] を水平方向に反転すると [0, 1, 1] になります。反転(インバート)とは、行列内のすべての0を1に、すべての1を0に置き換えることを意味します。たとえば、[0, 1, 1] を反転すると [1, 0, 0] になり

  2. C++のSTLを使ってバイナリ配列内の1と0の個数を数える方法

    このチュートリアルでは、C++のSTL(標準テンプレートライブラリ)を使用して、バイナリ配列に含まれる「1」と「0」の個数を数えるプログラムについて解説します。具体的には、0と1のみで構成された配列が与えられ、その中に「1」がいくつ、「0」がいくつ含まれているかを求めるのが目的です。実装のポイントこの問題は、STLが提供する count_if() 関数を使うことで、非常にシンプルに解決できます。count_if() は、指定した範囲内の要素のうち、条件を満たす要素の個数を返すアルゴリズムです。まず、要素が「1」であるかどうかを判定する関数を用意し、それを count_if() の第3引数として