C. ++ vs | =中的操作顺序,首先出现?

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.

如果你真的想,你可以这样想:

  1. 值为bbitwise-AND:ed与常量0x0f
  2. 结果位模式是按位OR:编入d指向的值.
  3. 指针d递增以指向下一个值.


moo*_*dow 5

d ++返回增加之前的值d.然后由*取消引用,该位置是执行| =的位置.因此,在递增d之前的位置处的数据将具有(b&0x0F).

通常,如果一行代码中的操作顺序一目了然,则将该行重构为其组成操作,直到它为止.只需将大量操作压缩到一行C上,生成的代码就不会变得更快或更紧凑!没有充分理由以这种方式牺牲可理解性.替换为

*d |= (b & 0x0F); 
d++;
Run Code Online (Sandbox Code Playgroud)