ビットごとの左シフト演算子 (<<)
式の各ビットを指定されたビット数分だけ左へシフトします。
expression1 << expression2
引数
expression1
任意の数式を指定します。expression2
任意の数式を指定します。
解説
<< 演算子は、expression1 の各ビットを expression2 で指定されたビット数分だけ左へシフトします。 この演算子が返すデータ型は、expression1 のデータ型で決まります。
<< 演算子は expression2 をマスクして、expression1 のビットが過剰にシフトされるのを防ぎます。 マスクを行わないと、シフト量が expression1 のデータ型のビット数より大きい場合、単純な結果を得るために元のビットがすべてシフトされることになります。 元のビットが少なくとも 1 ビットは残るように、シフト演算子は expression2 を expression1 のビット数より 1 小さい値で (ビットごとの AND 演算子を使用して) マスクし、実際のシフト量を計算します。
使用例
次に例を示します。
var temp
temp = 14 << 2
変数 temp の値は、14 (2 進数で 00001110) から 2 ビット分だけ左シフトされて 56 (2 進数で 00111000) になります。
マスクの動作を次の例に示します。
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 00111100
// The value of y is 60
print(y); // Prints 60