这是今天的每日小知识-位运算
先看一下代码:
#include <stdio.h>
int main()
{
int a=2;
int b;
int i=0;
for(i=1;i<=3;i+=2)
{
b=a<<i;
printf("a<<%d=%d\n",i,b);
}
return 0;
}
运行结果如下:
可以看到2<<1=4
这里的<<可不是两个小于号,两个符号连接在一起组成左移运算符,表示操作为数据转成二进制然后整体往左移动
比如题目中a = 2
二进制表示为
0000 0000 0000 0000 0000 0000 0000 0010
左移一位,就变为
0000 0000 0000 0000 0000 0000 0000 0100
结果就是十进制的4
同理接下来输出2 << 3
左移三位,就变为
0000 0000 0000 0000 0000 0000 0001 0000
也就是十进制的16,这也就是题目的输出答案了。
左移规则:高位丢弃,低位补0,但要注意的是,如果这个数已经是负数了,那么最高位一定是用1来表示,所以不受这些影响
你学会了吗?
特别注意的是,还有一个右移,主要是搞清楚右移动补0还是补1
右移规则: 右移分为逻辑右移和算数右移
有符号数的最高位是零,则右移时高位补零
如果是负数,即高位是1有的系统会移入1,称算术右移,有的会移入0,称逻辑右移