C语言运算符优先级和结合性一览表及一些运算符的运算过程

发布时间 2023-07-17 03:10:40作者: `Konoha

1、优先级

那么“结合性” 是什么呢? 优先级都是关于优先级不同的运算符参与运算时先计算谁后计算谁。但是如果运算符的优先级相同,那么先计算谁后计算谁呢?这个就是由“结合性”决定的。

C语言运算符优先级和结合性一览表参考如下:
优先级和结合性一览表

2、多个条件运算符运算

2.1、例子1

const i = 3;
const value = i === 1 ? "111"
            : i === 2 ? "222"
            : i === 3 ? "333"
            : i === 4 ? "444"
            : "555";
 
console.log(value);//333

2.2、例子2

/*
条件1
?结果1
:条件2
?结果2
:条件3
?结果3
:""
*/

//当条件1为true时,执行结果1,当条件2为true时,执行结果2,当条件3为true是,执行结果3........
//例:
name == "张三"
? "1"
: name == "李四"
? "2"
: name == "王五"
? "3"
: ""

2.3、例子三(结合性和执行顺序的关系)

事实证明,结合性和执行顺序是两个不同的概念。结合性决定了多个运算符如何组合,而执行顺序决定了表达式中各部分的计算顺序。

考虑这个嵌套的条件运算符:

a > b ? c : d > e ? f : g
因为条件运算符的结合性是从右到左,所以这个表达式实际上等价于:

a > b ? c : (d > e ? f : g)
执行顺序是从左到右,所以表达式的计算顺序如下:

首先计算外层的条件a > b。

如果a > b为真,表达式的值为c。

如果a > b为假,进入内层条件d > e。

如果d > e为真,表达式的值为f。

如果d > e为假,表达式的值为g。

分析如下:
结合性和执行顺序之间的关系是,结合性确定了运算符的分组方式,而执行顺序决定了分组后的表达式如何计算。
在本例中,结合性使得内层的条件运算符与外层的条件运算符正确地组合在一起,而执行顺序确保了在计算内层条件之前先计算外层条件。

C语言的执行顺序并非简单地分为从左到右和从右到左两种。实际上,执行顺序主要受以下因素影响:

  • 运算符的优先级:优先级较高的运算符先于优先级较低的运算符执行。例如,乘法和除法运算符的优先级高于加法和减法运算符,因此它们会先执行。
  • 运算符的结合性:当有相同优先级的运算符连续出现时,结合性决定了它们的执行顺序。结合性可以是从左到右,也可以是从右到左。例如,加法和乘法运算符具有从左到右的结合性,而赋值和条件运算符具有从右到左的结合性。
  • 表达式的括号:括号内的表达式优先级更高,会先于外部表达式执行。括号可以改变运算符的优先级和结合性。
  • 顺序点(Sequence point):顺序点是程序中的一个点,在该点之前的所有操作都已完成,而在该点之后的所有操作都尚未开始。例如,分号;、逗号,和&&、||运算符都是顺序点。

而关于变量定义,它的执行顺序并不是从右到左。实际上,在变量定义时,首先执行初始化表达式(如果有的话),然后将计算结果赋值给变量。初始化表达式的执行顺序遵循运算符优先级、结合性和括号的规则。
在C语言中,执行顺序并非简单地归结为从左到右或从右到左,而是需要考虑多种因素。为了编写可读性和可维护性更好的代码,建议使用括号明确表示运算符的优先级和结合性(虽然考试的题不会这般人性化),以及遵循良好的编码风格和实践。