Javaのシフト演算のルールは何ですか。
Javaでは左シフト(<<)、右シフト(>>)、符号なし右シフト(>>>)の3種類のシフト演算子が使えます。
- 数値の各2進数ビットを指定したビット数だけ左にシフトする演算で、上位ビットは削除され、下位ビットは0で補充されます。左にnビットシフトすると、2のn乗を乗算したのと同じです。例えば、3 << 2 = 12、つまり3を2ビット左にシフトすると12になります。
- 右シフト(>>): 2進数の各ビットをすべて右にシフト指定回数分だけシフトします。下位ビットは破棄され、上位ビットは符号ビットで置き換えられます。 nビット右シフトは、2のn乗で除算したときの切り捨てに相当します。たとえば、12 >> 2 = 3、つまり 12 を 2 ビット右シフトすると 3 になります。
- >>>:バイナリで表した数の桁をすべて右に何桁かシフトし、最下位桁を捨てて最上位桁を0で埋める。>>> n桁は、2のn乗で割った結果の整数部分に相当する。例:-3 >>> 1 = 2147483646(-3を1ビット右シフトすると2147483646になる)
注意すべき点は、シフト演算は整数のデータ(バイト、ショート、イント、ロング)の2 進数表現にのみ適用でき、浮動小数点数や他のデータ型には適用できません。また、シフト演算は元の数値自体を変更するのではなく、シフト後の新しい値を返します。