源作者:日常生活博客
c程序中优先级最低的运算符正文共:2574 字 预计阅读时间:7 分钟
写在前面
这个月以来基本没更新文章了,懒了!今天讲一下C语言的优先级和结合性,是百度的一位同学上周私信给我希望能给发一篇关于运算符的优先级和结合性的文章,他不是太明白。以前也经常有留言的,我都写了。以后有什么问题需要我写教程来讲解的都可以私信喔。明天就再更一篇关于C语言位运算的,我发现许多初学者都经常把运算符和位运算搞混。
C语言运算符的优先级和结合性表
C语言的运算符和结合性主要还是要记住一个表,不明白的时候我们就翻看一下。C语言的运算符众多,具有不同的优先级和结合性,将它们全部列了出来,方便大家对比和记忆:
C语言运算符表
注:同一优先级的运算符,运算次序由结合方向所决定。
上面的表无需死记硬背,很多运算符的规则和数学中是相同的,用得多,看得多自然就记得了。如果你是在记不住,可以使用( )。
从一个例子入手讲解
请看下面的代码:
#includeint main(){
int a = 16, b = 4, c = 2;
int d = a + b * c;
int e = a / b * c;
printf( "d=%d, e=%d ", d, e);
return 0;
}
运行结果:
d=24, e=8
1) 对于表达式a + b * c,如果按照数学规则推导,应该先计算乘法,再计算加法;b * c的结果为 8,a + 8的结果为 24,所以 d 最终的值也是 24。从运行结果可以看出,我们的推论得到了证实,C语言也是先计算乘法再计算加法,和数学中的规则一样。
先计算乘法后计算加法,说明乘法运算符的优先级比加法运算符的优先级高。所谓优先级,就是当多个运算符出现在同一个表达式中时,先执行哪个运算符。
C语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同,C语言运算符很多,大家可以查看上面的表格,有C语言书籍的也可以查看后面的附录,一般也是有的。一下子记住所有运算符的优先级并不容易,还好C语言中大部分运算符的优先级和数学中是一样的,大家在以后的编程过程中也会逐渐熟悉起来。如果实在搞不清,可以加括号,就像下面这样:
int d = a + (b * c);
括号的优先级是最高的,括号中的表达式会优先执行,这样各个运算符的执行顺序就一目了然了。
2) 对于表达式a / b * c,除法和乘法的优先级是相同的,这个时候到底该先执行哪一个呢?按照数学规则应该从左到右,先计算除法,在计算乘法;a / b的结果是 4,4 * c的结果是 8,所以 e 最终的值也是 8。这个推论也从运行结果中得到了证实,C语言的规则和数学的规则是一样的。
当乘法和除法的优先级相同时,编译器很明显知道先执行除法,再执行乘法,这是根据运算符的结合性来判定的。所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。/和*的优先级相同,又都具有左结合性,所以先执行左边的除法,再执行右边的乘法。
3) 像 +、-、*、/ 这样的运算符,它的两边都有要计算的数据,每份这样的数据都称作一个操作数,一个运算符需要 n 个操作数就称为 n 目运算符。例如:
+、-、*、/、= 是双目运算符;
++、-- 是单目运算符;
? : 是三目运算符(这是C语言里唯一的一个三目元算符,这个就必须强行记住了呀)。
一些容易出错的优先级问题
上表中,优先级同为1 的几种运算符如果同时出现,那怎么确定表达式的优先级呢?这是很多初学者迷糊的地方。下表就整理了这些容易出错的情况:
放大仔细看
这些容易出错的情况,好好在编译器上调试调试,这样印象会深一些。一定要多调试,光靠看代码,水平是很难提上来的。调试代码才是最长水平的。
当一个表达式中出现多个运算符时,C语言会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。
还是那句话:不上机的练习就不是编程!
写在最后
现在不怎么更新了,大家想交流学习的就加入qq群:247229464
现在一直在折腾网站这个新家,大家可以百度的搜索:编程世界网。
第一个就是喔!
明天发一篇关于C语言的位运算文章。
关注我们:源世界Z
关注头条号每天收听我们的消息,源世界为您奉上精品文章。欢迎订阅点赞,谢谢!