在C/C++中,ZERO左移还是右移实际生成指令?

dgu*_*uan 1 c c++ bit-manipulation bit

我不是很熟悉汇编语言或反汇编二进制代码,有人可以告诉我,如果"x << = 0;" 或"x >> = 0;" 会实际生成指令吗?

chq*_*lie 8

如果x是一个整数类型,x >>= 0x <<= 0不应产生任何代码.然而,在某些特定情况下编译器可以并且确实应该生成代码:

  • 如果关闭(clang -O0gcc -O0)优化,编译器可能会生成代码,如果是clang,则会生成代码.但它不是必须的.

  • 如果xvolatile限定类型,则编译器需要生成代码以读取其值并写回读取的值.实际的移位对值没有任何作用,因此生成的代码可能与生成的代码相同x = x;.