私は常にこれら 2 つの演算子を混同しています。何が数値を小さくしたり大きくしたりするのかわかりません。
これらの各演算子が何をするかを覚える方法を誰か教えてくれませんか? (記号、いくつかの例など)
私は常にこれら 2 つの演算子を混同しています。何が数値を小さくしたり大きくしたりするのかわかりません。
これらの各演算子が何をするかを覚える方法を誰か教えてくれませんか? (記号、いくつかの例など)
数字を大きくしたり小さくしたりすることとは考えられません。どちらの種類のシフトも、入力に応じて数値を大きくしたり小さくしたりできます。
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).
それらは、数値を上下に「押す」矢印と考えてください。
<<
オペレーターは、バイト内のより高い値のスロットに向かってビットを押し上げることによって、数値のサイズを増やします。次に例を示します。
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)
<< --- it tells going left direction and this means left side decreasing.
>> --- it tells going right direction and this means right side decreasing.
シフトは、10 進数と同じ方向に 2 進数で機能します。左にシフトすると (1、10、100、...)、数値が大きくなります。右にシフトすると数値が小さくなります。
<< は左シフト演算子です。たとえば、0b10 << 2 = 0b1000 (構成された 0b 構文)。>> は右シフト演算子で、その逆です。0b10 >> 1 = 0b1。符号付き数値の右シフトの場合、符号は変わりません。符号付き左シフトの場合、何が起こっているのかを理解するには、 2 の補数を理解する必要があります。