5.2 运算符优先级和结合性

运算符的种类非常多,通常不同的运算符构成了不同的表达式,因此他们的运算方法应该有一定的规律性。所谓优先级,就是当有多个运算符在同一个表达式中出现时,先执行哪个运算符。所谓结合性,就是当一个运算符多次出现时,先执行哪个运算符。先执行右边的叫右结合性,先执行左边的叫左结合性。C语言的运算符众多,具有不同的优先级和结合性,将它们罗列出来,如表5-10所示。

表5-10 运算符的运算优先级及结合性

注意:

(2)在写表达式的时候,无法确定运算符的实际顺序,则尽量采用括号来保证运算的顺序,这样也使得程序一目了然,而且自己在编程时能够思路清晰。

(2)同一优先级的运算符,运算次序由结合方向所决定。

【例5-11】编写程序,观察运算符的优先级和结合性。(源代码\ch05\5-11)

    #include <stdio.h>
    int main()
    {
    int a=2,b=4,c=6;              // 定义三个变量
    a=b=c;                    // 一次赋值
    printf( "10+2*5=%d\n", 10+2*5);
    printf( "a=%d, c=%d\n", a, c);
    return 0;
    }

运行上述程序,结果如图5-11所示。

图5-11 运算符的优先级和结合性

【代码解析】

对于表达式“10+2*5”,很明显先进行乘法运算,计算2*5,结果为10,再进行加法运算,计算10+10,结果为20。也就是说,乘法的优先级比加法高,要先计算,这与数学中的规则是一样的。如果不想按照默认的规则执行,可以加“()”,例如“(10+2)*5”的结果为60。大部分情况下,它们的规则和数学中是相同的。

对于赋值语句“a=b=c”,先执行b=c,再执行a=b,而不是反过来,这说明赋值运算符“=”具有右结合性。