C中的运算符优先级和关联性

运算符优先级确定表达式中术语的分组,并确定如何评估表达式。某些运算符具有更高的优先级;例如,乘法运算符的优先级高于加法运算符。

例如,x = 7 + 3 * 2; 在这里,x被赋值为13,而不是20,因为运算符*的优先级比+高,因此它首先与3 * 2相乘,然后加到7。

在此,优先级最高的运算符出现在表格的顶部,优先级最低的运算符出现在表格的底部。在表达式中,优先级较高的运算符将首先被评估。

类别 运算符 关联性 
后缀 ()[]->。++--  左到右 
一元 +-!〜++--(type)*&sizeof 右到左 
乘性  * /% 左到右 
添加剂  +- 左到右 
转移  << >> 左到右 
关系型  <<=>> = 左到右 
平等  ==!= 左到右 
按位与 和 左到右 
按位异或 左到右 
按位或 左到右 
逻辑与 && 左到右 
逻辑或 || 左到右 
有条件的 ?: 右到左 
分配 = + =-= * = / =%= >> = << =&= ^ = | = 右到左 
逗号 , 左到右 

范例程式码

#include <stdio.h>
main() {
   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;
   e = (a + b) * c / d; // ( 30 * 15 ) / 5
   printf("Value of (a + b) * c / d is : %d\n", e );
   e = ((a + b) * c) / d; // (30 * 15 ) / 5
   printf("Value of ((a + b) * c) / d is : %d\n" , e );
   e = (a + b) * (c / d); // (30) * (15/5)
   printf("Value of (a + b) * (c / d) is : %d\n", e );
   e = a + (b * c) / d; // 20 + (150/5)
   printf("Value of a + (b * c) / d is : %d\n" , e );
   return 0;
}

输出结果

Value of (a + b) * c / d is : 90
Value of ((a + b) * c) / d is : 90
Value of (a + b) * (c / d) is : 90
Value of a + (b * c) / d is : 50