c中操作员的分配和优先顺序

时间:2014-02-01 23:13:10

标签: c

在以下代码中:

int main()
{
    int x = 2, y = 1;
    x *= x + y;
    printf("%d\n", x);
    return 0;
}

运营商的优先级如何运作? ,因为*的优先级高于+,所以我希望首先进行乘法运算,但结果表明它的计算结果为x * =(x + y),所以首先进行加法!

以下代码中存在同样的混淆:

  int main()
    {
        int x = 2, y = 2;
        x /= x / y;
        printf("%d\n", x);
        return 0;
    }

不知道运营商优先权将如何运作......感谢任何人都有解释。

3 个答案:

答案 0 :(得分:2)

速记运算符(* =,/ =等)的优先级低于单个(+,/等)运算符。

请参阅:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

答案 1 :(得分:0)

运营商的优先权仍然相同。 *的优先级高于+。但是,因为您正在使用* =,所以在等待乘法之前首先完成操作。

基本相同的是(x + y)* x

答案 2 :(得分:0)

给定标识符aba op= b形式的运算符(其中op可以是+*等。 ),完全等同于(a) = (a) op (b),唯一的区别是(a)仅被评估一次。

逗号运算符的优先级最低。