C语言运算符的优先级和结合性

天天见闻 天天见闻 2023-10-17 科技 阅读: 52
摘要: 本节将从一个示例开始说明,请查看下面的代码: #include stbio.h int main{ int a=16,b=4,c=2; int d=a+b*c; int e=a/b*c; printf(“d=%d,e=%d\n”,d,e); return0; 执行结果: d=24,e=8 1)对于式a+b*c,如果按照数学规则导出的话,应该计算乘法并计算加法,b*c的结果是8,a+8的结果是24,所以d的最终值也是24。从执行结果可以确认,我们的推论是,C语言也计算乘法来计算加法,和数学中的规则一样。

本节我们从一个例子入手讲解,请看下面的代码:

#include stdio.h

int main{

int a = 16, b = 4, c = 2;

int d = a + b * c;

int e = a / b * c;

printf( "d=%d, e=%d\n", d, e);

return 0;

运行结果:

d=24, e=8

1) 对于表达式a + b * c,如果按照数学规则推导,应该先计算乘法,再计算加法;b * c的结果为 8,a + 8的结果为 24,所以 d 最终的值也是 24。从运行结果可以看出,我们的推论得到了证实,C语言也是先计算乘法再计算加法,和数学中的规则一样。

先计算乘法后计算加法,说明乘法运算符的优先级比加法运算符的优先级高。所谓优先级,就是当多个运算符出现在同一个表达式中时,先执行哪个运算符。

C语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同。

一下子记住所有运算符的优先级并不容易,还好C语言中大部分运算符的优先级和数学中是一样的,大家在以后的编程过程中也会逐渐熟悉起来。如果实在搞不清,可以加括号,就像下面这样:

int d = a + (b * c);

括号的优先级是最高的,括号中的表达式会优先执行,这样各个运算符的执行顺序就一目了然了。

2) 对于表达式a / b * c,知道C语言运算符的优先级和结合性知识点的朋友会发现,除法和乘法的优先级是相同的,这个时候到底该先执行哪一个呢?

按照数学规则应该从左到右,先计算除法,在计算乘法;a / b的结果是 4,4 * c的结果是 8,所以 e 最终的值也是 8。这个推论也从运行结果中得到了证实,C语言的规则和数学的规则是一样的。

当乘法和除法的优先级相同时,编译器很明显知道先执行除法,再执行乘法,这是根据运算符的结合性来判定的。所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。

/和*的优先级相同,又都具有左结合性,所以先执行左边的除法,再执行右边的乘法。

3) 像 +、-、*、/ 这样的运算符,它的两边都有要计算的数据,每份这样的数据都称作一个操作数,一个运算符需要 n 个操作数就称为 n 目运算符。例如:

+、-、*、/、= 是双目运算符;

++、-- 是单目运算符;

? : 是三目运算符(这是C语言里唯一的一个三目元算符,后续我们将会讲解)。

总结:

当一个表达式中出现多个运算符时,C语言会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。

本期到此结束

其他相关
软件测试|MySQL逻辑运算符使用详解

软件测试|MySQL逻辑运算符使用详解

作者: 天天见闻 时间:2023-10-08 阅读: 58
概述 在MySQL中,逻辑运算符处理布尔类型的数据,进行逻辑判断和组合条件。逻辑运算符主要有AND、OR和NOT三种,可以用查询和条件语句来支持复杂的逻辑操作。本文详细介绍了MySQL中逻辑运算符的使用方法和示例。 AND运算符 AND运算符用于组合多个条件要求所有条件都为真的情况下,整个表达式为真。它的语法是 condition1 AND condition2 这里,condition1和condition2是任意逻辑表达式,可以返回布尔值(TRUE或FALSE)。如果Condition1和condition2都为TRUE,则整个表达式的结果为TRUE,否则为FALSE。...

嵌入式软件开发为什么选择C语言?

作者: 天天见闻 时间:2022-12-23 阅读: 160
回到主题,为什么嵌入式软件开发选择C语言?能够直接访问硬件的语言有汇编和C语言,汇编属于低级语言,难以完成一些复杂的功能,但是汇编比C语言访问硬件的效率更高。开发工具在嵌入式软件开发中有重要的地位,大部分嵌入式软件开发工具都是针对C/C++编程语言。你会发现很多嵌入式C相关的工具链,而很少有C#、JAVA、PHP这些用于嵌入式的工具链。...
思科交换机命令大全,含巡检命令,网工建议收藏!

思科交换机命令大全,含巡检命令,网工建议收藏!

作者: 天天见闻 时间:2022-09-25 阅读: 191
switch#logging synchronous 阻止控制台信息覆盖命令行上的输入。switch#switchport trunk encapsulation dotlq 设置vlan中继协议。switch#no switchport mode 或 禁用干线。switch#no spanning-tree vlan priority 将交换机的优先级恢复默认值。switch#spanning-tree vlan cost0-200000000 指定端口成本。switch#spanning-tree portfast 配置速端口如pc机。起用了该命令后在进行优先级更改。switch#show spanning-tree interface detail 浏览详细生成树端口配置信息。switch#interface range fastemet0/1-2 将fastemet0/1和0/2口捆绑...

C语言 static 声明静态变量?大佬原来用它干这事!

作者: 天天见闻 时间:2022-05-04 阅读: 187
这也就是在全局的时候,起的作用,将对应的变量,或者函数的可见范围,变成只对自身可见,对外不可见。c能访问,做的对修饰的变量或者函数进行限定。说完了全局变量,全局函数前面加,下来说下函数内部,添加的妙用。这样子不舒服的一点就是,本该是在add内部的一个变量,被丢到全局区域,这样子就会有个问题,会被本文件的其他地方调用,但我们设计的这个变量,只想让add函数用。...

C语言:求最大公约数和最小公倍数!

作者: 天天见闻 时间:2022-05-02 阅读: 203
相信大家对最大公约数和最小公倍数一定不会陌生吧,那么在这里我就不做太多的解释了,直接上代码:#4:a:c:2:b:1:c:c:a:9:9:1:a:f:7:1:c:e:8:c:1:0:3:2:0:2:c:b:b:d:1:6#方法1和方法2其实是一样的,就是函数中的两种不同表示而已,大家选择自己比较熟悉的方法写就行了!...

判断语句_如何学好C语言判断语句?攻略if语句是第一步

作者: 天天见闻 时间:2022-04-10 阅读: 216
在操作符章节中我们学习过问号表达式,也就是当某一个条件表达式是真时,问号表达式的结果为冒号前的结果,当条件表达式是假时,问号表达式的结果为冒号后的结果。这里我们可以分析一下,问号表达式其实是一个条件判断功能表达式,也就是说:以上就是c语言中if语句的用法是什么的详细内容,如果你想更好的提升你的编程能力,好好学习C/C++编程知识的话!...
我来说两句

年度爆文