优先级和结合性
c语言中
![](/icons/35721dou.gif)
运算符
![](/icons/35721de.gif)
运算优先级共分为15级
![](/icons/35721dou2.gif)
1级最高
![](/icons/35721dou.gif)
15级最低
![](/icons/35721dou2.gif)
在表达式中
![](/icons/35721dou.gif)
优先级较高
![](/icons/35721de.gif)
先于优先级较低
![](/icons/35721de.gif)
进行运算
![](/icons/35721dou2.gif)
而在
![](/icons/35721yi.gif)
个运算量两侧
![](/icons/35721de.gif)
运算符优先级相同时
![](/icons/35721dou.gif)
则按运算符
![](/icons/35721de.gif)
结合性所规定
![](/icons/35721de.gif)
结合方向处理
![](/icons/35721dou2.gif)
c语言中各运算符
![](/icons/35721de.gif)
结合性分为两种
![](/icons/35721dou.gif)
即左结合性(自左至右)和右结合性(自右至左)
![](/icons/35721dou2.gif)
例如算术运算符
![](/icons/35721de.gif)
结合性是自左至右
![](/icons/35721dou.gif)
即先左后右
![](/icons/35721dou2.gif)
如有表达式x-y+z则y应先和“-”号结合
![](/icons/35721dou.gif)
执行x-y运算
![](/icons/35721dou.gif)
然后再执行+z
![](/icons/35721de.gif)
运算
![](/icons/35721dou2.gif)
这种自左至右
![](/icons/35721de.gif)
结合方向就称为“左结合性”
![](/icons/35721dou2.gif)
而自右至左
![](/icons/35721de.gif)
结合方向称为“右结合性”
![](/icons/35721dou2.gif)
最典型
![](/icons/35721de.gif)
右结合性运算符是赋值运算符
![](/icons/35721dou2.gif)
如x=y=z,由于“=”
![](/icons/35721de.gif)
右结合性
![](/icons/35721dou.gif)
应先执行y=z再执行x=(y=z)运算
![](/icons/35721dou2.gif)
c语言运算符中有不少为右结合性
![](/icons/35721dou.gif)
应注意区别
![](/icons/35721dou.gif)
以避免理解
![](/icons/35721cuowu.gif)
算术运算符和算术表达式基本
![](/icons/35721de.gif)
算术运算符
1.加法运算符“+”加法运算符为双目运算符
![](/icons/35721dou.gif)
即应有两个量参和加法运算
![](/icons/35721dou2.gif)
如a+b,4+8等
![](/icons/35721dou2.gif)
具有右结合性
2.减法运算符“-”减法运算符为双目运算符
![](/icons/35721dou2.gif)
但“-”也可作负值运算符
![](/icons/35721dou.gif)
此时为单目运算
![](/icons/35721dou.gif)
如-x,-5等具有左结合性
3.乘法运算符“*”双目运算
![](/icons/35721dou.gif)
具有左结合性
4.除法运算符“/”双目运算具有左结合性
![](/icons/35721dou2.gif)
参和运算量均为整型时
![](/icons/35721dou.gif)
结果也为整型
![](/icons/35721dou.gif)
舍去小数
![](/icons/35721dou2.gif)
如果运算量中有
![](/icons/35721yi.gif)
个是实型
![](/icons/35721dou.gif)
则结果为双精度实型
void
![](/icons/35721main.gif)
![](/icons/35721kh.gif)
{
pr
![](/icons/35721int.gif)
f(\"\\n\\n%d,%d\\n\",20/7,-20/7);
pr
![](/icons/35721int.gif)
f(\"%f,%f\\n\",20.0/7,-20.0/7);
}
双目运算具有左结合性
![](/icons/35721dou2.gif)
参和运算量均为整型时
![](/icons/35721dou.gif)
结果也为整型
![](/icons/35721dou.gif)
舍去小数
![](/icons/35721dou2.gif)
如果运算量中有
![](/icons/35721yi.gif)
个是实型
![](/icons/35721dou.gif)
则结果为双精度实型
![](/icons/35721dou2.gif)
pr
![](/icons/35721int.gif)
f(\"\\n\\n%d,%d\\n\",20/7,-20/7);
pr
![](/icons/35721int.gif)
f(\"%f,%f\\n\",20.0/7,-20.0/7);
本例中
![](/icons/35721dou.gif)
20/7
![](/icons/35721dou.gif)
-20/7
![](/icons/35721de.gif)
结果均为整型
![](/icons/35721dou.gif)
小数全部舍去
![](/icons/35721dou2.gif)
而20.0/7和-20.0/7由于有实数参和运算
![](/icons/35721dou.gif)
因此结果也为实型
5.求余运算符(模运算符)“%”双目运算
![](/icons/35721dou.gif)
具有左结合性
![](/icons/35721dou2.gif)
要求参和运算
![](/icons/35721de.gif)
量均为整型
![](/icons/35721dou2.gif)
求余运算
![](/icons/35721de.gif)
结果等于两数相除后
![](/icons/35721de.gif)
余数
void
![](/icons/35721main.gif)
![](/icons/35721kh.gif)
{
pr
![](/icons/35721int.gif)
f(\"%d\\n\",100%3);
}
双目运算
![](/icons/35721dou.gif)
具有左结合性
![](/icons/35721dou2.gif)
求余运算符% 要求参和运算
![](/icons/35721de.gif)
量均为整型
![](/icons/35721dou2.gif)
本例输出100除以3所得
![](/icons/35721de.gif)
余数1
自增1
![](/icons/35721dou.gif)
自减1运算符
自增1运算符记为“
![](/icons/35721jiajia.gif)
”
![](/icons/35721dou.gif)
其功能是使变量
![](/icons/35721de.gif)
值自增1
![](/icons/35721dou2.gif)
自减1运算符记为“--”
![](/icons/35721dou.gif)
其功能是使变量值自减1
![](/icons/35721dou2.gif)
自增1
![](/icons/35721dou.gif)
自减1运算符均为单目运算
![](/icons/35721dou.gif)
都具有右结合性
![](/icons/35721dou2.gif)
可有以下几种形式:
![](/icons/35721jiajia.gif)
i i自增1后再参和其它运算
![](/icons/35721dou2.gif)
--i i自减1后再参和其它运算
i
![](/icons/35721jiajia.gif)
i参和运算后
![](/icons/35721dou.gif)
i
![](/icons/35721de.gif)
值再自增1
i-- i参和运算后
![](/icons/35721dou.gif)
i
![](/icons/35721de.gif)
值再自减1
在理解和使用上容易出错
![](/icons/35721de.gif)
是i
![](/icons/35721jiajia.gif)
和i--
![](/icons/35721dou2.gif)
特别是当它们出在较复杂
![](/icons/35721de.gif)
表达式或语句中时
![](/icons/35721dou.gif)
常常难于弄清
![](/icons/35721dou.gif)
因此应仔细分析
void
![](/icons/35721main.gif)
![](/icons/35721kh.gif)
{
![](/icons/35721int.gif)
i=8;
pr
![](/icons/35721int.gif)
f(\"%d\\n\",
![](/icons/35721jiajia.gif)
i);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",--i);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",i
![](/icons/35721jiajia.gif)
);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",i--);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",-i
![](/icons/35721jiajia.gif)
);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",-i--);
} i<--8
i<--i+1
i<--i-1
i<--i+1
i<--i-1
i<--i+1
i<--i-1
![](/icons/35721int.gif)
i=8;
pr
![](/icons/35721int.gif)
f(\"%d\\n\",
![](/icons/35721jiajia.gif)
i);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",--i);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",i
![](/icons/35721jiajia.gif)
);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",i--);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",-i
![](/icons/35721jiajia.gif)
);
pr
![](/icons/35721int.gif)
f(\"%d\\n\",-i--);
i
![](/icons/35721de.gif)
初值为8
第2行i加1后输出故为9;
第3行减1后输出故为8;
第4行输出i为8的后再加1(为9);
第5行输出i为9的后再减1(为8) ;
第6行输出-8的后再加1(为9);
第7行输出-9的后再减1(为8)
void
![](/icons/35721main.gif)
![](/icons/35721kh.gif)
{
![](/icons/35721int.gif)
i=5,j=5,p,q;
p=(i
![](/icons/35721jiajia.gif)
)+(i
![](/icons/35721jiajia.gif)
)+(i
![](/icons/35721jiajia.gif)
);
q=(
![](/icons/35721jiajia.gif)
j)+(
![](/icons/35721jiajia.gif)
j)+(
![](/icons/35721jiajia.gif)
j);
pr
![](/icons/35721int.gif)
f(\"%d,%d,%d,%d\",p,q,i,j);
}
i<--5,j<--5,p<--0,q<--0
i+i+i--->p,i+1-->i,i+1-->i,i+1-->i
j+1->j,j+1->j,j+1->j,j+j+j->q
![](/icons/35721int.gif)
i=5,j=5,p,q;
p=(i
![](/icons/35721jiajia.gif)
)+(i
![](/icons/35721jiajia.gif)
)+(i
![](/icons/35721jiajia.gif)
);
q=(
![](/icons/35721jiajia.gif)
j)+(
![](/icons/35721jiajia.gif)
j)+(
![](/icons/35721jiajia.gif)
j);
这个
![](/icons/35721chengxu.gif)
中
![](/icons/35721dou.gif)
对p=(i
![](/icons/35721jiajia.gif)
)+(i
![](/icons/35721jiajia.gif)
)+(i
![](/icons/35721jiajia.gif)
)应理解为 3个i相加
![](/icons/35721dou.gif)
故p值为15
![](/icons/35721dou2.gif)
然后i再自增1 3次相当于加3故i
![](/icons/35721de.gif)
最后值为8
![](/icons/35721dou2.gif)
而对于q
![](/icons/35721de.gif)
值则不然
![](/icons/35721dou.gif)
q=(
![](/icons/35721jiajia.gif)
j)+(
![](/icons/35721jiajia.gif)
j)+(
![](/icons/35721jiajia.gif)
j)应理解为q先自增1
![](/icons/35721dou.gif)
再参和运算
![](/icons/35721dou.gif)
由于q自增1 3次后值为8
![](/icons/35721dou.gif)
3个8相加
![](/icons/35721de.gif)
和为24
![](/icons/35721dou.gif)
j
![](/icons/35721de.gif)
最后值仍为8
![](/icons/35721dou2.gif)
算术表达式表达式是由常量、变量、
![](/icons/35721hanshu.gif)
和运算符组合起来
![](/icons/35721de.gif)
式子
![](/icons/35721yi.gif)
个表达式有
![](/icons/35721yi.gif)
个值及其类型
![](/icons/35721dou.gif)
它们等于计算表达式所得结果
![](/icons/35721de.gif)
值和类型
![](/icons/35721dou2.gif)
表达式求值按运算符
![](/icons/35721de.gif)
优先级和结合性规定
![](/icons/35721de.gif)
顺序进行
![](/icons/35721dou2.gif)
单个
![](/icons/35721de.gif)
常量、变量、
![](/icons/35721hanshu.gif)
可以看作是表达式
![](/icons/35721de.gif)
特例
延伸阅读
- 2011-7-30-- 类型转换运算符,C++标准转换运算符reinterpret_cast
- 2010-12-9-- 运算符,LESS 让css也支持变量,运算符,include,嵌套规则等等
- 2010-12-9-- 运算符,JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
- 2011-8-1-- 类型转换运算符,C++标准转换运算符dynamic_cast
- 2010-11-24-- 运算符与表达式,C#知识点之运算符与表达式
- 2010-12-9-- 运算符,LESS 让css也支持变量,运算符,include,嵌套规则等等
- 2010-11-24-- c语言运算符,C语言逻辑运算(&&,>>,<<......)
- 2011-2-16-- c语言中的运算符,C#中的Equals() 和运算符 ==
- 2011-6-14-- c语言运算符,C#系列四《C#运算符与表达式》
- 2011-3-21-- c语言运算符,C语言运算符另类分类法
最新评论