C中的运算符优先级

Mar*_*ark 3 c math

理解这个表达式有困难:

(x + y - 1) / y * y
Run Code Online (Sandbox Code Playgroud)

运算符优先级如下(根据我的理解和K&R2,2.12表2.1):

1)评估parens中的内容:首先是(x + y),然后是(x + y)-1

2)'*'运算符的优先级高于'/'所以它应该先行,比特看起来(y*y)被评估,然后(x + y-1)的结果除以乘积(y)*Y).我不太清楚.

3)我听说过通常以这种形式写的:

(x + y - 1) / y * y
Run Code Online (Sandbox Code Playgroud)

那是对的吗?非常感谢你提前!

wkl*_*wkl 6

一元运算符的*优先级高于/,但这是指针解除引用.

乘法*和除法/具有相同的从左到右的优先级.


J-1*_*DiZ 5

不,*/具有相同的优先权.(它被称为" 优先 ",而不是"优先")

(x + y - 1) / y * y
Run Code Online (Sandbox Code Playgroud)

将会

( ( (x+y) - 1 ) / y ) * y
Run Code Online (Sandbox Code Playgroud)

操作树将是:

           *
          / \
         /   y
        ÷
       / \
      /   y
     -
    / \
   /   1
  +
 / \
x   y
Run Code Online (Sandbox Code Playgroud)