左シフト代入演算子 (<<=)

変数の値を式で指定されたビット数分だけ左へシフトし、その結果を変数に代入します。

result <<= expression

引数

  • result
    任意の数値変数を指定します。

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

解説

この演算子は、result = result << expression と指定する場合とほぼ同じ結果になります。ただし、result は一度しか評価されません。

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

使用例

次に例を示します。

var temp
temp = 14
temp <<= 2 

変数 temp の値は、14 (2 進数で 00001110) から 2 ビット分だけ左シフトされて 56 (2 進数で 00111000) になります。 下位ビットは 0 で埋められます。

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

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 00111100
// The value of x is 60
print(x); // Prints 60

必要条件

Version 1

参照

参照

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

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

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

代入演算子 (=)

概念

演算子の優先順位

演算子の一覧