有一串代码如下
int a=1;
printf("%d\n",a<<1);
其中的a<<1代表的便是a向左移动一个位
由于int是4字节存储,所以其实1的二进制是
00000000 00000000 00000000 00000001
而此时执行命令向左移一位,便成为
0000000 00000000 00000000 000000010
即删去高位的一位,随后在末尾添0,即为
00000000 00000000 00000000 00000010
也就是2
假如再向左移动一位,则变成
00000000 00000000 00000000 00000100
即为4
那么如果3向左移一位呢
int b=3;
printf("%d\n",b<<1);
3的二进制是
00000000 00000000 00000000 00000011
此时向左移动一位,得到
0000000 00000000 00000000 000000110
也就是6
再看右移,道理与左移相同,c>>1代表c向右移动一位
int c=2;
printf("%d\n",c>>1);
2的二进制为
00000000 00000000 00000000 00000010
向右移动一位
00000000 00000000 00000000 00000001
变成了1