chr*_*ris 5 c operator-precedence
我正在阅读以下代码:
if( (i%2) == 0 ){
*d = ((b & 0x0F) << 4);
}
else{
*d++ |= (b & 0x0F);
};
Run Code Online (Sandbox Code Playgroud)
我正在专注于这个else声明,并想知道这种情况发生的顺序是什么?我没有常规的C编译器,所以我无法测试这个.当我们表演时*d++ |= (b & 0x0F);,这会发生什么顺序?
unw*_*ind 11
++应用于指针d,而不是应用于的左值*d.
如果你真的想,你可以这样想:
bbitwise-AND:ed与常量0x0fd指向的值.d递增以指向下一个值.d ++返回增加之前的值d.然后由*取消引用,该位置是执行| =的位置.因此,在递增d之前的位置处的数据将具有(b&0x0F).
通常,如果一行代码中的操作顺序一目了然,则将该行重构为其组成操作,直到它为止.只需将大量操作压缩到一行C上,生成的代码就不会变得更快或更紧凑!没有充分理由以这种方式牺牲可理解性.替换为
*d |= (b & 0x0F);
d++;
Run Code Online (Sandbox Code Playgroud)