在以下代码中:
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;
}
不知道运营商优先权将如何运作......感谢任何人都有解释。
答案 0 :(得分:2)
速记运算符(* =,/ =等)的优先级低于单个(+,/等)运算符。
请参阅:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
答案 1 :(得分:0)
运营商的优先权仍然相同。 *的优先级高于+。但是,因为您正在使用* =,所以在等待乘法之前首先完成操作。
基本相同的是(x + y)* x
答案 2 :(得分:0)
给定标识符a
和b
,a op= b
形式的运算符(其中op
可以是+
,*
等。 ),完全等同于(a) = (a) op (b)
,唯一的区别是(a)
仅被评估一次。
逗号运算符的优先级最低。