我对汇编语言或反汇编二进制代码不太熟悉,有人可以告诉我,如果" x<< = 0;"或" x>> = 0;"会实际生成说明吗?
答案 0 :(得分:8)
如果TrxnID, MarkedTrxnID, MarkedAmount
------------------------------------
d1,c3,2000 **Rem : D1 balance=0, c3 balance= 1000
d2,c3,2000 **Rem : D2 balance=1000, c3 balance= 0
d2,c5,1000 **Rem : D2 balance=0, c5 balance= 0
d4,c6,5000 **Rem : D4 balance=0, c6 balance= 1000
d7,c6,1000 **Rem : D7 balance=2000, c6 balance= 0
是整数类型,则x
和x >>= 0
不应生成任何代码。然而,在某些特定情况下编译器可以并且确实应该生成代码:
如果关闭优化(x <<= 0
或clang -O0
),编译器可能会生成代码,如果是gcc -O0
,则会生成代码。但它不是必需的。
如果clang
是x
限定类型,则编译器必需生成代码以读取其值并写回读取的值。实际的转移对该值没有任何作用,因此生成的代码可能与为volatile
生成的代码相同。
答案 1 :(得分:2)