- 运算符的优先级:C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
- 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
举例说明结合型:
考虑如下的赋值表达式。
int a = 0;
int n = 0;
n = a < 1 ? 1 : a== 0 ? 2 : 0;
如果? : 为左结合性,有
n = (a < 1 ? 1 : a==0) ? 2 : 0;
最终n = 2;
为右结合性,有
n = a < 1 ? 1 : (a==0 ? 2 : 0);
最终n = 1;
经验证,
n = a < 1 ? 1 : a== 0 ? 2 : 0;执行完后,有n = 1,故而 ?: 为右结合性。
结合性:
一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
例一: a = b = c;
运算量b的左右两侧都为=号,而=具有右结合性,故应该由右向左计算,即:a = (b = c);
例二: if (5 == 4 == 0) {}
由于关系运算符具有左结合性,那么先计算 5 == 4, 结果为0, 在计算 0 == 0,结果为真。