C语言——操作符的属性:优先性和结合性

C语言——操作符的属性:优先性和结合性常用运算符的优先级 1 圆括号 使 它改变其他运算符的优先级 2 增运算符 减运算符 3 单 运算符 和 4 乘法 除法 5 加法 减法 6 关系运算符 等 7 赋值运算符 操作符优先级

大家好,欢迎来到IT知识分享网。

1.优先性和结合性

常用运算符的优先级:
1•
圆括号(
() ),使⽤它改变其他运算符的优先级
2•
⾃增运算符(
++
),⾃减运算符(

3•
单⽬运算符(
+


4•
乘法(
*
),除法(
/
5•
加法(
+
),减法(

6•
关系运算符(
<

>
等)
7•
赋值运算符(
=

C语言——操作符的属性:优先性和结合性

2.问题表达式解析

表达式1

C语言——操作符的属性:优先性和结合性

两种计算方法:

C语言——操作符的属性:优先性和结合性

表达式1在计算的时候,由于 * + 的优先级⾼,只能保证, * 的计算是⽐ + 早,但是优先级并不

能决定第三个
*
⽐第⼀个
+
早执⾏。
延申:
C语言——操作符的属性:优先性和结合性
假设我们为i赋值为5:
情况1:8+8+8=24;
情况2:7+7=14,14+8=22;

表达式2

C语言——操作符的属性:优先性和结合性

操作符的优先级只能决定⾃减

的运算在
+
的运算的前⾯,但是我们并没有办法得知,
+
作符的左操作数的获取在右操作数求值之前还是之后,所以结果是不可预测的,是有歧义的。

假设我们为c赋值为5

情况1:+ 操作符的左操作数的获取在右操作数求值之前,那么这个表达式最终结果为5+4=9。

情况2:+ 操作符的左操作数的获取在右操作数求值之后,那么这个表达式最终结果为4+4=8。

表达式3

C语言——操作符的属性:优先性和结合性

上述代码中,我们只知道先算*再算+,但我们并不能根据其优先级来决定三个函数谁先调用。

上述三个函数调用可能出现六种情况,不再一一说明。

总结:即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别复杂的表达式。

3.整型提升

C语⾔中整型算术运算总是⾄少以缺省整型类型的精度来进⾏的。为了获得这个精度,表达式中的字符型(char)和短整型(short)操作数在使⽤之前被转换为普通整型(int),这种转换称为整型提升
C语言——操作符的属性:优先性和结合性
整型提升规则:
1.
有符号整数提升是按照变量的数据类型的符号位来提升的
2.
⽆符号整数提升,⾼位补0
C语言——操作符的属性:优先性和结合性

1.在C语言中,如果将一个short类型的变量赋值给一个char类型的变量,那么将会发生隐式类型转换。在这种情况下,short类型的值将被转换为char类型的值。转换的结果取决于被转换的short值是否在char类型的表示范围内。如果被转换的short值在char类型的表示范围内(即在-128到127之间,如果是有符号char类型),则转换后的结果保持原值。但如果被转换的short值超出了char类型的表示范围,则转换后的结果会截断,仅保留char类型能表示的位数。

2.如果将一个short类型的变量与一个char类型的变量相加,并将结果赋值给一个char类型的变量,那么在大多数情况下,结果将是一个char类型的值。这是因为在C语言中,表达式的类型通常由操作数的类型决定,而char类型的值和short类型的值在进行运算时会发生隐式类型提升,结果的类型会与操作数中较高的类型相同。因此,short类型的值会被提升为int类型,然后与char类型的值相加,最后的结果会是int类型。然后,这个int类型的值将被转换为char类型,并赋值给char类型的变量。然而,需要注意的是,如果short类型的值和char类型的值相加后超出了char类型的表示范围,那么结果将是未定义的行为。因为char类型的范围可能比short类型的范围要小,这种情况下会发生溢出。所以在这种情况下,结果可能是char类型的值,也可能是int类型的值,具体取决于编译器的实现。

4.算术转换

如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型,否则操作就⽆法进⾏。下⾯的层次体系称为寻常算术转换。
C语言——操作符的属性:优先性和结合性
比int 类型低的操作数类型先进行整型提升,再进行算术转换。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118219.html

(0)
上一篇 2025-11-14 20:33
下一篇 2025-11-14 21:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信