Generic Operator

# >>=(_:_:)

Stores the result of shifting a value’s binary representation the specified number of digits to the right in the left-hand-side variable.

## Parameters

`lhs`

The value to shift.

`rhs`

The number of bits to shift `lhs` to the right.

## Discussion

The `>>=` operator performs a smart shift, which defines a result for a shift of any value.

• Using a negative value for `rhs` performs a left shift using `abs(rhs)`.

• Using a value for `rhs` that is greater than or equal to the bit width of `lhs` is an overshift. An overshift results in `-1` for a negative value of `lhs` or `0` for a nonnegative value.

• Using any other value for `rhs` performs a right shift on `lhs` by that amount.

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 value is shifted right by two bits.

If you use `11` as `rhs`, `x` is overshifted such that all of its bits are set to zero.

Using a negative value as `rhs` is the same as performing a left shift using `abs(rhs)`.

Right shift operations on negative values “fill in” the high bits with ones instead of zeros.

### Bit Shift

`static func << <Other>(Int, Other) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the left.

`static func << <RHS>(Int, RHS) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the left.

`static func <<= <Other>(inout Int, Other)`

Stores the result of shifting a value’s binary representation the specified number of digits to the left in the left-hand-side variable.

`static func >> <Other>(Int, Other) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the right.

`static func >> <RHS>(Int, RHS) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the right.

`static func &<< (Int, Int) -> Int`

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.

`static func &<< (Int, Int) -> Int`

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.

`static func &<< <Other>(Int, Other) -> Int`

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.

`static func &<<= (inout Int, Int)`

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, and stores the result in the left-hand-side variable.

`static func &<<= <Other>(inout Int, Other)`

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, and stores the result in the left-hand-side variable.

`static func &>> (Int, Int) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the right, masking the shift amount to the type’s bit width.

`static func &>> (Int, Int) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the right, masking the shift amount to the type’s bit width.

`static func &>> <Other>(Int, Other) -> Int`

Returns the result of shifting a value’s binary representation the specified number of digits to the right, masking the shift amount to the type’s bit width.

`static func &>>= (inout Int, Int)`

Calculates the result of shifting a value’s binary representation the specified number of digits to the right, masking the shift amount to the type’s bit width, and stores the result in the left-hand-side variable.

`static func &>>= <Other>(inout Int, Other)`

Calculates the result of shifting a value’s binary representation the specified number of digits to the right, masking the shift amount to the type’s bit width, and stores the result in the left-hand-side variable.