ビット演算子
ビット演算子は、数値型に対して演算を行います。
ビット演算子は、数値型の値同士で使用できます。
シフト演算子
シフト演算 とは、数値を2進数表記したときに桁を左右にずらす操作の事です。まずは次の例をご覧ください。
var a = 5;//2進数で 0000 0101
var b = 5 << 2;
print(b);//結果 20 : 2進数で 0001 0100
var c = 5 >> 2;
print(b);//結果 20 : 2進数で 0000 0001
// 0000 0101
//
// << 左に2ビットずらす
// 0001 0100
//
// >> 右に2ビットずらす
// 0000 0001
シフト演算子で行われる演算でのシフト数は、右の値の下位5ビットで定義されます。つまり、シフト数はcount & 0x1F
から計算されます。
左シフト演算子 <<
左シフト演算子<<
は、左の値が、右の値で指定されたビット数だけ左にシフトされます。先頭についたリテラルはその値の論理否定となります。
また、左シフト演算子では、演算結果が32ビットを超えるとき上位ビットは破棄され、下位ビットはゼロに設定されます。
次に例を示します。
右シフト演算子 >>
右シフト演算子>>
は、左の値が、右の値で指定されたビット数だけ右にシフトされます。先頭についたリテラルはその値の論理否定となります。
また、右シフト演算子では、下位ビットは破棄されます。
次に例を示します。
論理演算子
論理積演算子 &
論理積(AND)演算子&
は、左右の値のビットごとの論理積を計算します。
論理和演算子 |
論理和(OR)演算子|
は、左右の値のビットごとの論理和を計算します。
排他的論理和演算子 ^
排他的論理和(XOR)演算子^
は、左右の値のビットごとの排他的論理和を計算します。