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

标签 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

最佳答案

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

如果您想将类似操作的结果存储回 x ,您有以下选项:

x = x * 2;
x *= 2;

<<运算符是相同的:

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

关于c - 为什么增量运算符会修改原始值而位运算符不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101178/

相关文章:

c - 为 Blackberry 应用程序将 C 库移植到 Java

c - 段错误 - sscanf 到 C 中的数组

c - 在 BST 中插入节点的问题(迭代方法)

c - 质数生成算法

C返回字符串计数和字符串问题(rusty in C....)

c - 为什么我的直接计数器的值始终为零?

c - 使用 FreeScale Code Warrior 将 GCC 目标文件与 main 中的 __eabi 调用链接起来

c - 定义具有多个步骤的函数宏

c - 使用 realloc 增加数组的大小

c - 初学者 C 程序的意外行为