This page is also available in 2 other languages
Change language 

>>

[Bitwise Operators]

Description

The right shift operator >> causes the bits of the left operand to be shifted right by the number of positions specified by the right operand.

Syntax

variable >> number_of_bits;

Parameters

variable: Allowed data types: any integer type (byte, short, int, long, unsigned short…​).
number_of_bits: a positive number smaller than the bit-width of variable. Allowed data types: int.

Example Code

int a = 40;     // binary: 0000000000101000
int b = a >> 3; // binary: 0000000000000101, decimal: 5

Notes and Warnings

When you shift x right by y bits (x >> y), the y rightmost bits of x “fall off” and are discarded. If x has an unsigned type (e.g. unsigned int), the y leftmost bits of the result are filled with zeroes. If x has a signed type (e.g. int), its leftmost bit is the sign bit, which determines whether it is positive or negative. In this case, the y leftmost bits of the result are filled with copies of the sign bit. This behavior, called “sign extension”, ensures the result has the same sign as x.

int x = -16;          // binary: 1111111111110000
int y = 3;
int result = x >> y;  // binary: 1111111111111110, decimal: -2

This may not be the behavior you want. If you instead want zeros to be shifted in from the left, you can use a typecast to suppress sign extension:

int x = -16;                        // binary: 1111111111110000
int y = 3;
int result = (unsigned int)x >> y;  // binary: 0001111111111110, decimal: 8190

Sign extension causes the right-shift operator >> to perform a division by powers of 2, even with negative numbers. For example:

int x = -1000;
int y = x >> 3; // integer division of -1000 by 8, causing y = -125.

But be aware of the rounding with negative numbers:

int x = -1001;
int y = x >> 3; // division by shifting always rounds down, causing y = -126
int z = x / 8;  // division operator rounds towards zero, causing z = -125

See also