目录
🥕前言
上期,我们对操作符的的算术,移位,位,赋值,复合赋值,单目,关系操作符进行了讲解,这期我们将会讲到逻辑,条件操作符和逗号表达式,下标引用,函数调用,结构成员和表达式求值中的整型提升和算术转换。我们会对整型提升和算术转换进行重点的分析。
🫑逻辑操作符
&& 逻辑与
|| 逻辑或
区分逻辑与和按位或
区分逻辑或和按位或
🫓条件操作符
exp1 ? exp2 : exp3
理解:exp1为真,表达式为exp2,exp1为假,表达式为exp3.
🍟逗号表达式
exp1, exp2, exp3, ......expN
逗号表达式就是用逗号隔开的表达式。
逗号表达式,从左向右依次计算,整个表达式的结果就是最后一个表达式的结果。
🌭下标引用,函数调用和结构体成员
1. [] 下标引用操作符
操作数:一个数组名 + 一个索引值
int arr[10 ]; 创建数组
arr [4] = 10; 下标引用操作符
[] 的操作数为arr和4
2. ()函数调用操作符
接受一个或者多个操作符:第一个操作数是函数名,剩下的操作符就是传递给函数的参数。
3. 访问一个结构的成员
. 结构体.成员名
-> 结构体->成员名
🍛表达式求值
表达式求值的顺序一部分是由操作符的优先级和结合性觉决定的。
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型
🥘隐式类型转换(整型提升)
C语言的整型算术运算总是至少以缺省整型类型的精度来进行的,我个人的理解是:C语言算术运算中字节数少于整型字节数的数据类型在进行整形运算中会被转化为整型数据,这个过程就被成为被称为整型提升。
整型提升的意义:
一般表达式的整型计算是在电脑上的CPU相应的运算器执行,然而CPU的运算器ALU的操作数的字节大小一般是int类型的字节大小,其次CPU中的寄存器的大小也等于int类型的字节大小,而我们知道,数据在被运算的时候不是直接储存在ALU中,而是储存在储存器当中,但通常ALU的字节大小与寄存器的字节大小相等。所以小于4个字节的整型在相加时,在CPU中通常会先转化为CPU中操作数的标准字节长度。
一般cpu是难以实现两个字节的直接相加运算。所以,一般长度小于int类型的整型值,都必须转化为int或unsigned int类型再送入CPU中计算。
如何整型提升:
整型提升时按照变量的数据类型的符号位来提升的
1 如果是无符号的,则高位都补0
2 如果是有符号的,则高位都补符号位
注:在计算机中任何数据储存都是二进制的补码
🥗算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系为寻常算术转换。
long double
double
float
unsigned long int
long int
unsigned int
int
🍿操作符的属性
复杂表达式的求值有三个影响的因素:
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序
两个相邻操作符取决于它们的优先级。如果两者优先级一样,取决于它们的结合性。
下面是部分操作符的优先级:
🍚总结
到这里,操作符的全部内容已经全部分析完了。对于操作符,看是不起眼,但是在c语言中它具有螺丝钉的作用,大家还是得重视重视它们。下一期文章我们将会对c语言中人人害怕的指针下手了,其实我认为它也没那么可怕叭,进行合理的理解就行咯。那大家还是对下一篇指针文章期待一下叭。