# Bitwise left and right shift operators << >>

The bitwise shift operators move the bit values of a binary object. The left operand specifies the value to be shifted. The right operand specifies the number of positions that the bits in the value are to be shifted. The result is not an lvalue. Both operands have the same precedence and are left-to-right associative.

Operator | Usage |
---|---|

<< | Indicates the bits are to be shifted to the left. |

>> | Indicates the bits are to be shifted to the right. |

Each operand must have an integral or enumeration type. The compiler
performs integral promotions on the operands, and then the right operand
is converted to type `int`

. The result has the same type
as the left operand (after the arithmetic conversions).

The right operand should not have a negative value or a value that is greater than or equal to the width in bits of the expression being shifted. The result of bitwise shifts on such values is unpredictable.

If the right operand has the value `0`

, the result is
the value of the left operand (after the usual arithmetic conversions).

`<<`

operator fills vacated bits with
zeros. For example, if `left_op`

has the value `4019`

,
the bit pattern (in 16-bit format) of `left_op`

is:
`0000111110110011`

`left_op << 3`

yields:
`0111110110011000`

`left_op >> 3`

yields:
`0000000111110110`