Two shift operators shift the bits in an integer variable by a specified
number of positions. The << operator shifts bits to the left, and the
>> operator shifts bits to the right. The syntax for these binary
operators is
x << n
and
x >> n
Each operator shifts the bits in x by n positions in the specified direction.
For a right shift, zeros are placed in the n highorder bits of the variable;
for a left shift, zeros are placed in the n loworder bits of the variable. Here
are a few examples:
Binary 00001100 (decimal 12) rightshifted by 2 evaluates to binary 00000011
(decimal 3).
Binary 00001100 (decimal 12) leftshifted by 3 evaluates to binary 01100000
(decimal 96).
Binary 00001100 (decimal 12) rightshifted by 3 evaluates to binary 00000001
(decimal 1).
Binary 00110000 (decimal 48) leftshifted by 3 evaluates to binary 10000000
(decimal 128).
Under certain circumstances, the shift operators can be used to multiply and
divide an integer variable by a power of 2. Leftshifting an integer by n
places has the same effect as multiplying it by 2n, and rightshifting an
integer has the same effect as dividing it by 2n. The results of a
leftshift multiplication are accurate only if there is no overflowthat is, if
no bits are "lost" by being shifted out of the highorder positions. A
rightshift division is an integer division, in which any fractional part of the
result is lost. For example, if you rightshift the value 5 (binary 00000101) by
one place, intending to divide by 2, the result is 2 (binary 00000010) instead
of the correct 2.5, because the fractional part (the .5) is lost. Sample program
demonstrates the shift operators.
Using the shift operators.
1: /* Demonstrating the shift operators. */
2:
3: #include <stdio.h>
4:
5: main()
6: {
7: unsigned int y, x = 255;
8: int count;
9:
10: printf("Decimal\t\tshift left by\tresult\n");
11:
12: for (count = 1; count < 8; count++)
13: {
14: y = x << count;
15: printf("%d\t\t%d\t\t%d\n", x, count, y);
16: }
17: printf("\n\nDecimal\t\tshift right by\tresult\n");
18:
19: for (count = 1; count < 8; count++)
20: {
21: y = x >> count;
22: printf("%d\t\t%d\t\t%d\n", x, count, y);
23: }
24: return(0);
25: }
Decimal shift left by result
255 1 254
255 2 252
255 3 248
255 4 240
255 5 224
255 6 192
255 7 128
Decimal shift right by result
255 1 127
255 2 63
255 3 31
255 4 15
255 5 7
255 6 3
255 7 1
