説明
右シフト演算子 >> は、左側オペランドのビットを右側オペランドで指定された数だけ右にシフトさせます。
構文
variable >> number_of_bits;
変数を使用します。許容されるデータ型:byte、int、long。
number_of_bits: < = 32 である数。許可されるデータ型:int。
プログラム例
int a = 40; // binary: 0000000000101000 int b = a >> 3; // binary: 0000000000000101, or 5 in decimal
注意と警告
xを右にyビットシフトし(x >> y)、xの最上位ビットが1の場合、その動作はxの正確なデータ型に依存します。xがint型の場合、最上位ビットは符号ビットであり、前述したようにxが負であるかどうかを決定します。この場合、歴史的に難解な理由から、符号ビットは下位ビットにコピーされます。
int x = -16; // binary: 1111111111110000 int y = 3; int result = x >> y; // binary: 1111111111111110
この動作は符号拡張と呼ばれますが、多くの場合、希望する動作ではありません。代わりに、ゼロを左からシフトしたい場合があります。右シフトのルールはunsigned int式では異なることがわかっているので、型キャストを使って左からコピーされるものを抑制することができます。
int x = -16; // binary: 1111111111110000 int y = 3; int result = (unsigned int)x >> y; // binary: 0001111111111110
符号の拡張に注意すれば、右シフト演算子 >> を2の累乗で割る方法として使うことができます。 例えば
int x = 1000; int y = x >> 3; // integer division of 1000 by 8, causing y = 125.