9

一般的に言えば、ビットシフト ( >> , <<) により、除算/乗算が可能になります。^2

例 :

      9 (base 10): 00000000000000000000000000001001 (base 2)
                   --------------------------------
 9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)

の数の場合:

同様に、符号が保持されるため、yield は次のようになります-9 >> 2-3

     -9 (base 10): 11111111111111111111111111110111 (base 2)
                   --------------------------------
-9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)

しかし、>>>which を見ると、正の数については同じように動作しますが、負の数については異なる動作をします :

mdn

ゼロビットは左からシフトインされます

左からシフトする理由/使用法が見つかりません 0(これにより、整数が正になります)。

       -9 (base 10): 11111111111111111111111111110111 (base 2)
                     --------------------------------
 -9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)

質問 :

どのようなシナリオで使用する必要があります>>> か? 左からゼロを埋めて負の数を台無しにしたい理由がわかりません。

4

2 に答える 2

5

ハードウェア、具体的にはshift registerを模倣するために何かをプログラミングしていたとしましょう。

簡単にするために、質問のように 32 ビットではなく 8 ビットを使用します。

このシフト レジスタに上位ビットを入力するたびに 128 を追加できます。これは、左端のビットが 1 になるためです。

// Assume n is initialised to 0, so n = 00000000 in binary
n += 128;                    // now n = 10000000 in binary

クロック サイクルをシミュレートするたびに >>> を使用してシフトすると、8 つの「クロック サイクル」の後に、右端のビットに 1 が表示されます。その右端のビットを読み取ると、8 サイクル前に左端のビットに入力されたものの遅延バージョンが得られます。


これは、ビットが数値として解釈されない 1 つの例にすぎず、他にもたくさんあると確信しています。他の場所、特にハードウェア回路/ビルディングブロックを模倣することを目的としたソフトウェアで、さらにいくつかの用途が見つかると思います。

于 2013-11-18T17:48:25.450 に答える