ビットごとの右シフト演算子 (>>)

更新 : 2007 年 11 月

式の各ビットを指定されたビット数分だけ右へシフトします。ただし、符号は保持されます。

expression1 >> expression2

引数

  • expression1
    任意の数式を指定します。

  • expression2
    任意の数式を指定します。

解説

>> 演算子は、expression1 の各ビットを expression2 で指定されたビット数分だけ右へシフトします。上位ビットは、expression1 の符号ビットで埋められます。シフトされて最下位ビットより右へ移動した桁は破棄されます。この演算子が返すデータ型は、expression1 のデータ型で決まります。

>> 演算子は expression2 をマスクして、expression1 のビットが過剰にシフトされるのを防ぎます。マスクを行わないと、シフト量が expression1 のデータ型のビット数より大きい場合、単純な結果を得るために元のビットがすべてシフトされることになります。元のビットが少なくとも 1 ビットは残るように、シフト演算子は expression2expression1 のビット数より 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

必要条件

Version 1

参照

概念

演算子の優先順位

演算子の一覧

ビット処理演算子による型の強制変換

参照

ビットごとの左シフト演算子 (<<)

右シフト代入演算子 (>>=)

符号なし右シフト演算子 (>>>)