Returns the result of shifting a value’s binary representation the specified number of digits to the left, masking the shift amount to the type’s bit width.
The value to shift.
The number of bits to shift
lhsto the left. If
rhsis outside the range
0..<lhs.bitWidth, it is masked to produce a value within that range.
Use the masking left shift operator (
&<<) when you need to perform a shift and are sure that the shift amount is in the range
0..<lhs.bitWidth. Before shifting, the masking left shift operator masks the shift to this range. The shift is performed using this masked value.
The following example defines
x as an instance of
UInt8, an 8-bit, unsigned integer type. If you use
2 as the right-hand-side value in an operation on
x, the shift amount requires no masking.
let x: UInt8 = 30 // 0b00011110 let y = x &<< 2 // y == 120 // 0b01111000
However, if you use
8 as the shift amount, the method first masks the shift amount to zero, and then performs the shift, resulting in no change to the original value.
let z = x &<< 8 // z == 30 // 0b00011110
If the bit width of the shifted integer type is a power of two, masking is performed using a bitmask; otherwise, masking is performed using a modulo operation.