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