```
operator >> {
associativity
precedence
}
```

### Declarations

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

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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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

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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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.

`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.

```
let x: UInt8 = 30 // 0b00011110
let y = x >> 2
// y == 7 // 0b00000111
```

If you use `11`

as `rhs`

, `x`

is overshifted such that all of its bits
are set to zero.

```
let z = x >> 11
// z == 0 // 0b00000000
```

Using a negative value as `rhs`

is the same as performing a left shift
using `abs(rhs)`

.

```
let a = x >> -3
// a == 240 // 0b11110000
let b = x << 3
// b == 240 // 0b11110000
```

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

```
let q: Int8 = -30 // 0b11100010
let r = q >> 2
// r == -8 // 0b11111000
let s = q >> 11
// s == -1 // 0b11111111
```

**Parameters:**
**lhs:** The value to shift.
**rhs:** The number of bits to shift `lhs`

to the right.

#### Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

#### Declared In

`FixedWidthInteger`

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

The

`>>`

operator performs asmart shift, which defines a result for a shift of any value.`rhs`

performs a left shift using`abs(rhs)`

.`rhs`

that is greater than or equal to the bit width of`lhs`

is anovershift. An overshift results in`-1`

for a negative value of`lhs`

or`0`

for a nonnegative value.`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.

Parameters:lhs:The value to shift.rhs:The number of bits to shift`lhs`

to the right.## Declaration

`func >><Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger`

## Declared In

`FixedWidthInteger`