ビットごとの右シフト演算子 (>>)
式の各ビットを指定されたビット数分だけ右へシフトします。ただし、符号は保持されます。
expression1 >> expression2
引数
expression1
任意の数式を指定します。expression2
任意の数式を指定します。
解説
>> 演算子は、expression1 の各ビットを expression2 で指定されたビット数分だけ右へシフトします。 上位ビットは、expression1 の符号ビットで埋められます。 シフトされて最下位ビットより右へ移動した桁は破棄されます。 この演算子が返すデータ型は、expression1 のデータ型で決まります。
>> 演算子は expression2 をマスクして、expression1 のビットが過剰にシフトされるのを防ぎます。 マスクを行わないと、シフト量が expression1 のデータ型のビット数より大きい場合、単純な結果を得るために元のビットがすべてシフトされることになります。 元のビットが少なくとも 1 ビットは残るように、シフト演算子は expression2 を expression1 のビット数より 1 小さい値で (ビットごとの AND 演算子を使用して) マスクし、実際のシフト量を計算します。
使用例
たとえば次に示すコードでは、変数 temp の値は、-14 (2 の補数バイナリで 11110010) から 2 ビット分だけ右へシフトされて -4 (2 の補数バイナリで 11111100) になります。
var temp
temp = -14 >> 2
マスクの動作を次の例に示します。
var x : byte = 15;
// A byte stores 8 bits.
// The bits stored in x are 00001111
var y : byte = x >> 10;
// Actual shift is 10 & (8-1) = 2
// The bits stored in y are 00000011
// The value of y is 3
print(y); // Prints 3