0

私は常にこれら 2 つの演算子を混同しています。何が数値を小さくしたり大きくしたりするのかわかりません。

これらの各演算子が何をするかを覚える方法を誰か教えてくれませんか? (記号、いくつかの例など)

4

5 に答える 5

1

数字を大きくしたり小さくしたりすることとは考えられません。どちらの種類のシフトも、入力に応じて数値を大きくしたり小さくしたりできます。

  • left shift (unsigned interpretation): a 0-bit can fall off the left side, making the number bigger, or a 1-bit can fall off the left side, making the number smaller.
  • left shift (signed interpretation): a 0-bit can be shifted into the sign that was previously 0, making the number bigger; a 0-bit can be shifted into the sign that was previously 1, making the number much bigger; a 1-bit can be shifted into the sign that was previously 1, making the number smaller; a 1-bit can be shifted into the sign that was previously 0, making the number much smaller.
  • unsigned right shift: ok this one is simple, the number gets smaller.
  • signed right shift: negative numbers get bigger, positive numbers get smaller.

The reason I wrote "interpretation" for left shifts but not for right shifts is that there is only one kind of left shift, but depending on whether you interpret the result as signed or unsigned, it has a "different" result (the bits are the same, of course). But there are really two different kinds of right shift, one keeps the sign and the unsigned right shift just shifts in a 0-bit (that also has a signed interpretation, but it's usually not important).

于 2012-09-27T10:24:19.203 に答える
1

それらは、数値を上下に「押す」矢印と考えてください。

<<オペレーターは、バイト内のより高い値のスロットに向かってビットを押し上げることによって、数値のサイズを増やします。次に例を示します。

128  64  32  16  8   4   2   1
-------------------------------
 0   0   0   0   0   1   0   0    before push (value = 4)
 0   0   0   0   1   0   0   0    after << push (value = 8)

>>演算子は、バイト内の値の低いスロットに向かってビットを押し下げることにより、数値のサイズを小さくします。次に例を示します。

128  64  32  16  8   4   2   1
-------------------------------
 0   0   0   0   0   1   0   0    before push (value = 4)
 0   0   0   0   0   0   1   0    after >> push (value = 2)
于 2012-09-27T08:27:27.240 に答える
0
<< --- it tells going left direction and this means left side decreasing.

>> --- it tells going right direction and this means right side decreasing.
于 2012-09-27T08:30:55.550 に答える
0

シフトは、10 進数と同じ方向に 2 進数で機能します。左にシフトすると (1、10、100、...)、数値が大きくなります。右にシフトすると数値が小さくなります。

于 2012-09-27T08:24:30.937 に答える
0

<< は左シフト演算子です。たとえば、0b10 << 2 = 0b1000 (構成された 0b 構文)。>> は右シフト演算子で、その逆です。0b10 >> 1 = 0b1。符号付き数値の右シフトの場合、符号は変わりません。符号付き左シフトの場合、何が起こっているのかを理解するには、 2 の補数を理解する必要があります。

于 2012-09-27T08:24:31.073 に答える