Javascript:2つの2進数を追加します(2進数を返します)

patrickhuang94

バイナリで2つの入力があり、加算結果もバイナリで返します。

var addBinary = function(a, b) {
    var dec = Number(parseInt(a, 2)) + Number(parseInt(b, 2));
    return dec.toString(2);
};

のようなめちゃくちゃ大きなバイナリの場合

a = 10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101

b = 110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011

出力しています

110111101100010011000101110110100000011101000101011000000000000000000000000000000000000000000000000

ここで、想定される正しい出力は

110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000

オーバーフローのせいですか?もしそうなら、バイナリ加算オーバーフローのJavascriptの制限は何ですか?1と0の束でごめんなさい。

カサンドラウィルコックス

私はJavascriptでバイナリ加算のソリューションを開発しました。

私の最初の目標は、Javascriptのデジタルバイナリ加算回路で使用されるメカニズムを複製することにより、バイナリロジックの理解を固めることでした(基数変換やビット演算子は使用されません)。

私の元のプロジェクトの作業バージョンはCodePenにあります。

おそらく必要以上にDOMを使って多くのことを行っていますが、番号を(以下で説明するように)プラグインしたとき、それが機能することを嬉しく思いました!

実用的なソリューションコード<<このプロジェクトは私の元のプロジェクトから変更されており、正解を出力するために必要なコードのみが含まれています。

このソリューションは、abが同じ長さの文字列であること前提とています。このソリューションを使用するには、入力変数を次のように変更する必要があります。

var a = "000010100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"

var b = "110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"

(先頭の欠落している数字var aをゼロで埋めただけです。)

ご覧のとおり、バイナリ加算回路の物理的な実装で使用されるすべてのコンポーネントを再作成しました。

半加算器:

function halfAdder(a, b){
  const sum = xor(a,b);
  const carry = and(a,b);
  return [sum, carry];
}

全加算器:

function fullAdder(a, b, carry){
  halfAdd = halfAdder(a,b);
  const sum = xor(carry, halfAdd[0]);
  carry = and(carry, halfAdd[0]);
  carry = or(carry, halfAdd[1]);
  return [sum, carry];
}

論理ゲート:

function xor(a, b){return (a === b ? 0 : 1);}
function and(a, b){return a == 1 && b == 1 ? 1 : 0;}
function or(a, b){return (a || b);}

主な機能:

function addBinary(a, b){

  let sum = '';
  let carry = '';

  for(var i = a.length-1;i>=0; i--){
    if(i == a.length-1){
      //half add the first pair
      const halfAdd1 = halfAdder(a[i],b[i]);
      sum = halfAdd1[0]+sum;
      carry = halfAdd1[1];
    }else{
      //full add the rest
      const fullAdd = fullAdder(a[i],b[i],carry);
      sum = fullAdd[0]+sum;
      carry = fullAdd[1];
    }
  }

  return carry ? carry + sum : sum;
}

それでaddBinary(a,b)、正しい答えを出します!

var a = "000010100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"
var b = "110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"
var answer = "110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000";

console.log(addBinary(a, b) == answer); //true

私がここで行ったことのいくつかがあなたにも役立つことを願っています!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaScriptで2つの10進数を追加して比較する

分類Dev

2つの10進数文字列を追加し、doubleとして解析します

分類Dev

文字列に2つの10進数を追加し、精度を維持します

分類Dev

bashに2つの256ビット16進数を追加しますか?

分類Dev

2進数の2進数文字列をintに変換します

分類Dev

2つの16進数を追加する

分類Dev

Rの数値文字列の最後の2つの数値に10進数を追加します

分類Dev

2進数を10進数に変更します

分類Dev

16進数を2進数に変換します

分類Dev

Matlabで10進数を2進数に変換しますか?

分類Dev

16進数を2進数から16進数に変換しますか?

分類Dev

DataGridセル-10進数と2進数を16進数に変換します

分類Dev

10進数のすべての2進数の近傍を選択します

分類Dev

10進数を2進数に変換し、1つのインデックスを変更します

分類Dev

2進数-数値の右側のゼロを削除します

分類Dev

Pythonで2進数の0と1の数を取得します

分類Dev

負の16進数を追加します

分類Dev

2つの整数を16進数で連結し、long long intCに保存します。

分類Dev

JavaScript-10進数を文字列の形式で4ビットの2進数に変換します

分類Dev

2つの16進数を追加し、シェルスクリプトに16進数として格納します

分類Dev

繰り返しの2進数を10進数に変換する

分類Dev

16進数を含む2つのtxtファイルを比較します

分類Dev

文字列の10進数の2桁を確認します

分類Dev

Javaでは整数を1つの10進数で2倍にします

分類Dev

自動四捨五入で2つの10進数を取得します

分類Dev

2進数を10進数に変換しようとしています

分類Dev

文字列値を10進数の2桁に変換します

分類Dev

2進数を16進数に変換するCプログラムは、2進数が16進数に等しい場合、3つ以上の2進数を変換できません。

分類Dev

継続する2進数をCで10進数に変換します

Related 関連記事

  1. 1

    JavaScriptで2つの10進数を追加して比較する

  2. 2

    2つの10進数文字列を追加し、doubleとして解析します

  3. 3

    文字列に2つの10進数を追加し、精度を維持します

  4. 4

    bashに2つの256ビット16進数を追加しますか?

  5. 5

    2進数の2進数文字列をintに変換します

  6. 6

    2つの16進数を追加する

  7. 7

    Rの数値文字列の最後の2つの数値に10進数を追加します

  8. 8

    2進数を10進数に変更します

  9. 9

    16進数を2進数に変換します

  10. 10

    Matlabで10進数を2進数に変換しますか?

  11. 11

    16進数を2進数から16進数に変換しますか?

  12. 12

    DataGridセル-10進数と2進数を16進数に変換します

  13. 13

    10進数のすべての2進数の近傍を選択します

  14. 14

    10進数を2進数に変換し、1つのインデックスを変更します

  15. 15

    2進数-数値の右側のゼロを削除します

  16. 16

    Pythonで2進数の0と1の数を取得します

  17. 17

    負の16進数を追加します

  18. 18

    2つの整数を16進数で連結し、long long intCに保存します。

  19. 19

    JavaScript-10進数を文字列の形式で4ビットの2進数に変換します

  20. 20

    2つの16進数を追加し、シェルスクリプトに16進数として格納します

  21. 21

    繰り返しの2進数を10進数に変換する

  22. 22

    16進数を含む2つのtxtファイルを比較します

  23. 23

    文字列の10進数の2桁を確認します

  24. 24

    Javaでは整数を1つの10進数で2倍にします

  25. 25

    自動四捨五入で2つの10進数を取得します

  26. 26

    2進数を10進数に変換しようとしています

  27. 27

    文字列値を10進数の2桁に変換します

  28. 28

    2進数を16進数に変換するCプログラムは、2進数が16進数に等しい場合、3つ以上の2進数を変換できません。

  29. 29

    継続する2進数をCで10進数に変換します

ホットタグ

アーカイブ