Cでの2つの整数のビット単位の再帰的加算
この問題では、2つの数字が与えられます。私たちのタスクは、2つの整数をビット単位で再帰的に加算するためのCプログラムを作成することです。
ビット演算を使用して合計を求めるロジックは、就学前のときに行っていたものと似ています。合計を求めるために、以前は数値の各桁を加算し、キャリーがある場合は次の桁に加算していました。
同様のことを行い、XOR演算子を使用して合計を見つけ、AND演算を使用してキャリーをチェックします。キャリーがある場合は、それを番号に追加します。それ以外の場合は追加しません。
これは、半加算器のロジックです。 あなたがデジタルエレクトロニクスで学んだかもしれないこと。こちらをご覧ください…
ここで、合計はa ^ b、つまりXOR bを使用して計算され、両方の最初のビットが設定されている場合に伝播する必要がある余分なキャリーをチェックする必要があります。そして、その数に追加のセットビットを追加する必要があります。
したがって、ビットアルゴリズムは
ステップ1 − aとbのXOR、つまりa ^ bを見つけて、結果変数に格納します。
ステップ2 − {(a&b)<<1} ==0
かどうかを確認しますステップ2.1 − 0に等しい場合は、結果を出力します。これが最終結果です。
ステップ2.2 − 0に等しくない場合は、ステップ1に進みます。a={(a&b)<<1}およびb=結果です。
例
アルゴリズムの動作を説明するプログラム-
#include <stdio.h> int addNumbers(int a, int b) { int carry = (a & b) << 1; int result = a^b; if (carry == 0) return result; else addNumbers(carry, result); } int main(){ int a = 54, b = 897; printf("The sum of %d and %d using bitwise adding is %d", a, b, addNumbers(a, b)); return 0; }
出力
The sum of 54 and 897 using bitwise adding is 951’
-
JavaScriptの整数リストの2つの数値の最大積
最初で唯一の引数として整数の配列を受け取るJavaScript関数を作成する必要があります。 関数は、配列の任意の2つの要素を乗算して達成できる最大の積を見つける必要があります。私たちの条件は、線形時間と一定の空間でこれを行わなければならないということです。 例- 入力配列が-の場合 const arr = [3, 9, 2, 1, 0]; その場合、出力は-になります。 const output = 27; これは最高の製品であり、3と9を掛けることで達成できるからです。 例 以下はコードです- const arr = [3, 9, 2, 1, 0]; const maxPair
-
ビット演算を使用した2による加算と乗算のCプログラム。
ビット演算子はビットを操作します(つまり、onオペランドのバイナリ値を操作します) オペレーター 説明 & ビットごとのAND | ビットごとのOR ^ ビット単位のXOR < 左シフト 右シフト - 1の補数 ビットごとのAND a b a&b 0 0 0 0 1 0 1 0 0 1 1 1 ビットごとのOR a b a | b 0 0 0 0 1 1 1 0