关于优先级和结合性
2009-03-22 01:35
260 查看
运算符的优先级: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,结果为真。
运算符的结合性: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,结果为真。
相关文章推荐
- 关于C/C++种运算符的优先级,结合性以及操作数的求值顺序
- 关于优先级、结合性和求值顺序的讲解
- 关于“算术表达式”、“优先级”和“结合性”的胡扯
- 关于C语言中的运算符的优先级和结合性
- CSS中选择器的优先级 ( ※关于相同属性的覆盖问题 )
- c/c++操作符优先级及其结合性
- C语言运算符的优先级和结合性实例详解
- android 关于提高第三方app的service优先级
- 关于CSS的优先级,CSS优先级计算
- 【C语言】C语言运算符的优先级和结合性一览表
- c语言运算符优先级,结合性(左/右结合详解)
- 浅谈C/C++中运算符的优先级、运算符的结合性以及操作数的求值顺序
- 优先级与结合性
- 第03天C语言(03):算术运算符-优先级以及结合性
- c语言运算符的优先级和结合性
- 关于优先级队列STL
- 详解Cocos2d 开发关于CCLayer中Touch事件 以及优先级
- 关于CSS样式优先级
- 关于选择器优先级的误解[刷新三观,深入理解选择器优先级]
- 关于有序广播优先级问题