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

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

expression1 >>> expression2

引数

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

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

解説

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

>>> 演算子は expression2 をマスクして、expression1 のビットが過剰にシフトされるのを防ぎます。 マスクを行わないと、シフト量が expression1 のデータ型のビット数より大きい場合、単純な結果を得るために元のビットがすべてシフトされることになります。 元のビットが少なくとも 1 ビットは残るように、シフト演算子は expression2expression1 のビット数より 1 小さい値で (ビットごとの AND 演算子を使用して) マスクし、実際のシフト量を計算します。

使用例

次に例を示します。

var temp
temp = -14 >>> 2

変数 temp の初期値は、-14 (2 の補数バイナリで 11111111 11111111 11111111 11110010) です。 右に 2 ビット分シフトすると、値は 1073741820 (2 進数で 00111111 11111111 11111111 11111100) になります。

マスクの動作を次の例に示します。

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

参照

参照

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

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

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

概念

演算子の優先順位

演算子の一覧

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