想请教下C语言中a<<2为什么不起作用?

如下代码:

 #include <stdio.h>

int main()
{
    int a =8;
    a<<2;
    printf("%d\n",a);
}

为什么打印出来还是8呢?

因为a<<2只是一个表达式,没有对a进行赋值,如果a=a<<2;那么打印出来的结果就会变了

类似的

 a *= 2;
 a<<2 ->
a<<=2;

a<<2这个表达式,确实是将a的值左移2位,但是由于缺少赋值语句a=a<<2,所以a的值没有变化,还是8.

应该改为a<<=2,意义代表a=a*4 。而a=a<<1,代表a=a*2 。

因为a的值没变。就像正常的 a+1并不改变a的值一样。