ビットを操作して加算、減算、除算、乗算する方法を理解しようとしています。
イベントが発生した後に多くの計算が実行されるため、JavaScript プログラムでいくつかの最適化を行う必要があります。
以下のコードを参考にすると、キャリーが &ing 値を保持していることがわかります。次に、合計変数を各 n1 / n2 変数で一致しないビットに設定する XOr を実行します。
これが私の質問です.;) (n1 & n2)<<1 を 1 ずつシフトするとどうなりますか? これを行うことによる目標は何ですか?XOr と同様に、これらのビットで他に何もする必要がないことは明らかです。これらのビットの 10 進値は、合計変数にあるため問題ありません。& shift 操作によって何が達成されているのか、頭の中で想像できません。
function add(n1,n2)
{
var carry, sum;
// Find out which bits will result in a carry.
// Those bits will affect the bits directly to
// the left, so we shall shift one bit.
carry = (n1 & n2) << 1;
// In digital electronics, an XOR gate is also known
// as a quarter adder. Basically an addition is performed
// on each individual bit, and the carry is discarded.
//
// All I'm doing here is applying the same concept.
sum = n1 ^ n2;
// If any bits match in position, then perform the
// addition on the current sum and the results of
// the carry.
if (sum & carry)
{
return add(sum, carry);
}
// Return the sum.
else
{
return sum ^ carry;
};
};
上記のコードは期待どおりに機能しますが、浮動小数点値を返しません。浮動小数点値とともに合計を返す必要があります。
浮動小数点値を扱うのに役立つ、上記で使用できる関数を誰かが持っていますか? 私が探しているものを明確に説明しているウェブサイトはありますか? 最終日を検索してみましたが、見に行くものが見つかりません。
このリソースから上記のコードを取得しました。 http://www.dreamincode.net/code/snippet3015.htm
お早めにどうぞ!
それについて考えた後、左シフトを 1 の位置に行うことは 2 の乗算です。
次のように &ing することにより:キャリー = (n1 & n2) << 1; キャリー変数は、n1 と n2 の一致した位置からコンパイルされたバイナリの文字列を保持します。したがって、n1 が 4 で n2 が 4 の場合、両方とも同じ値を保持します。したがって、2 つを結合して 1 インデックスに右シフトすると、4 x 2 = 8 が乗算されます。したがって、キャリーは 8 になります。
1.) var キャリー = 00001000 =8 & 00001000 =8
2.) キャリー = 00001000 = 8 の単一の値を保持するようになりました
左シフトは 8 x 2 =16、または 8 + 8 = 16 を乗算します。
3.)carry = キャリー <<1 、すべてのビットを 1 つの位置にシフトする
4.) キャリーは 00010000 = 16 の単一の値を保持するようになりました
浮動小数点値の操作についてはまだ何も見つかりません。誰かが何かを持っている場合は、リンクを投稿してください。