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

JavaScriptで「+」「-」「*」「/」を使わずに2つの数値の合計を求める方法

JavaScriptで、2つの数値 mn を引数として受け取る関数 add() を作成する必要があります。この関数は、四則演算(加算・減算・乗算・除算)を使用せずに入力された2つの数値を加算し、その合計を返すものです。

実装例

実際のコードは以下のようになります。

const m = 67, n = 33;
const add = (x, y) => {
    while(y !== 0){
        let carry = x & y;
        x = x ^ y;
        y = carry << 1;
    };
    return x;
};
console.log(add(m, n));

解説

この手法のポイントは、ビット演算を活用することです。

2つのビットの和は、排他的論理和であるXOR(^)によって求めることができます。また、桁上がり(キャリー)のビットは、論理積であるAND(&)によって取得できます。

ここでは、1ビット同士の加算を行う「半加算器(Half Adder)」のロジックを拡張し、2つの整数の加算に応用しています。もし xy の間で同じ位置にセットされたビットが存在しなければ、x ^ y だけでそのまま2つの数の合計が得られます。

しかし、両方に共通してセットされているビットがある場合には、キャリーを考慮する必要があります。そこでビットごとのAND(x & y)を計算すると、すべてのキャリーの位置がわかります。これを左に1ビットシフトした (x & y) << 1 を新しい加算対象として、x ^ y の結果と繰り返し足し合わせていくことで、最終的な合計が求まります。

whileループは、キャリーがなくなる(y === 0 になる)まで繰り返され、その時点での x が求める合計値となります。

出力結果

コンソールには以下のように出力されます。

100
  1. C#で2つの2進数の合計を求める方法【サンプルコード付き】

    C#で2つの2進数の合計を求めるには、まず対象となる2進数を変数に設定します。本記事では、剰余演算と繰り上がり(キャリー)処理を組み合わせて、2進数同士の加算を行うプログラムの実装方法を解説します。 手順1:2進数を設定する はじめに、加算したい2つの2進数を変数として定義します。ここでは例として次の値を使用します。 val1 = 11110; val2 = 11100; 手順2:displaySum()メソッドを呼び出す 次に、合計を計算して表示するために作成した displaySum() メソッドを呼び出します。 sum = displaySum(val1, val2); displayS

  2. C#でメソッドを使わずに2つの2進数の合計を求める方法

    この記事では、C#において組み込みメソッドを使用せずに、2つの2進数の合計を求める方法を解説します。剰余演算とループ処理を組み合わせることで、各桁を手動で加算していくアプローチを紹介します。手順1:変数の宣言と初期化まず、2進数を格納する2つの変数を宣言し、初期化します。val1 = 11010; val2 = 10100; Console.WriteLine(Binary one: + val1); Console.WriteLine(Binary two: + val2);手順2:ループで各桁を加算する合計を求めるには、両方の値が0になるまでループ処理を続けます。各反復処理の中で、最