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.
Implements requirement of
static func &<< (lhs: Self, rhs: Self) -> Self
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.