Using Shift Operators in C
By: Fazal Emailed: 1674 times Printed: 2157 times
Latest comments

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
C Home  All C Tutorials  Latest C Tutorials
Sponsored Links 
If this tutorial doesn't answer your question, or you have a specific question, just ask an expert here. Post your question to get a direct answer.

Comments(9)
1.  View CommentThe result shown in the left shift is wrong... View Tutorial By: krishnalal.K.K at 20080521 03:05:07 
2.  View CommentThis is first time i am using this net View Tutorial By: selvam at 20080819 00:04:44 
3.  View CommentYes Left shift result is wrong its like View Tutorial By: Ragunath k at 20100510 04:45:33 
4.  View Comment510 View Tutorial By: sky at 20100717 06:54:46 
5.  View Commentthis is good, but i need a simple program about shift operater . View Tutorial By: ramalakshmi at 20110105 03:38:26 
6.  View Commentleft shift output is wrong, for this results so many people get confused View Tutorial By: naga sudha at 20110420 04:26:40 
7.  View Commenthow to multiply 2.54*0.7071 using only bitwise operator in C View Tutorial By: vindya at 20120112 07:23:08 
8.  View CommentThe example shown in this article uses 8bit operation. So, I think the results are true View Tutorial By: wisnu at 20121004 05:11:51 
9.  View Commenti need help in writing code for multiplication program in C using bitwise operation : i got for 2,3,4,5 and 8,9 but not able to find for 6th and 7th multiplication: becoz this type logic is working for 6th and 7th table with: "result = (X <<1)+X ;" (while increment the number from 2 to 3 : the table is shifting from 5 to 9 th table. so please help me in this. Thanks in advance. View Tutorial By: viswanath at 20130223 14:13:40 
Most Viewed Articles (in C )

Most Emailed Articles (in C)
