为什么增量运算符修改原始值而位运算符不修改?

时间:2018-08-30 15:57:51

标签: c

增量运算符修改原始值,例如

int i = 5;
i++;
printf("%d",i); //prints 6

但是位运算符不,例如

int x = 5;
x<<1;
printf("%d",x);//should print 10 but outputs the original value i.e. 5

1 个答案:

答案 0 :(得分:3)

x << 1类似于x * 2之类的操作。如果您不将结果存储在任何地方,则将其丢弃,并且优化的编译器可能会完全忽略该行。

如果要将类似操作的结果存储回x中,则可以使用以下选项:

x = x * 2;
x *= 2;

<<运算符相同:

x = x << 1;
x <<= 1;