先看一个简单的例子:
main()
{
int x = 5; // 0000 0101
printf("%d %d %d",x,x<<2,x>>2);
}
我第一遍做的答案是:5,20,5
但是正确的答案却是:2,20,1
应该注意的是,位移运算并不是对原有的数据进行位移,也就是说,x 位移之后,x的值并没有改变,除非x = x << 2。
所以上面例子中,x << 2输出了20 是没错,但是并没有改变x = 5的事实,第三个输出x >> 2,是对x = 5进行右移,答案是1。
emmm…我也不知道这到底算不算陷阱,可能只是我太粗心了。
左移右移操作还涉及有符号数和无符号数的问题,这里不再赘述。