我不是很熟悉汇编语言或反汇编二进制代码,有人可以告诉我,如果"x << = 0;" 或"x >> = 0;" 会实际生成指令吗?
如果x
是一个整数类型,x >>= 0
而x <<= 0
不应产生任何代码.然而,在某些特定情况下编译器可以并且确实应该生成代码:
如果关闭(clang -O0
或gcc -O0
)优化,编译器可能会生成代码,如果是clang
,则会生成代码.但它不是必须的.
如果x
是volatile
限定类型,则编译器需要生成代码以读取其值并写回读取的值.实际的移位对值没有任何作用,因此生成的代码可能与生成的代码相同x = x;
.