🏄♂️前言
我们常常说C语言是灵活且强大的语言,因为它有32个关键字,34种操作符,本文主要是介绍这些操作符。话不多说,直接开始!🎈🎈🎈🎈🎈🎈🎈🎈
🏄♂️正文
🏂算术操作符
算术操作有 + - * / %
我们挑特殊的介绍
🚵除号
除号比较特殊,如果两端操作数类型都一样就执行相应除法,比如 整型 / 整型结果为整型,
浮点型 / 浮点型结果为浮点型,但是如果整型 / 整型产生的结果中有小数(浮点型)只会显示整数部分,除非将其中一个或两个都写成浮点型,比如 5 / 3 产生小数但只显示整数,我们可以写成 5.0 / 3此时会显示小数部分。
🚵模号
%号叫模号(也叫取余号),作用是求两整型相除后的余数部分,比如 5 % 3 结果为 2
注意:%号两端操作数必须是整型,其他的可以是整型和浮点型
🏂移位操作符
移位操作符有左移位操作符<< 和 右移位操作符>>,同模号一样,它们的两端也必须为整数
🚵左移位操作符 <<
移位规则:将二进制整体向左移动,右边补0
🚵右移操作符 >>
移位规则:将二进制整体向右移动,左边补值分情况
1.逻辑右移:左边补0
2.算术右移:左边补原符号位(正数为0,负数为1)
🚵小结
左移一位有将原数字扩大两倍的效果,右移一位有将原数字缩小两倍的效果(特殊数除外,如0、-1、1等)
注意:在使用移位操作符时,不能移动负数位,比如 a<<-1 这种是标准未定义的,可能会导致意想不到错误
🏂位操作符
位操作符有三个 按位与&、按位或 |、按位异或 ^ 一样两端操作符必须是整数。
位操作也是在二进制位上进行操作的,位操作符原理是两个整数的二进制位一一相比。
🚵按位与&
按位与是遇0为0,即一假则假。
🚵按位或 |
按位或是遇1为1,即一真则真。
🚵按位异或 ^
按位异或是相同为0,相异为1
利用异或号能够实现不依靠第三方变量交换两数的操作,原理 a^a=0
🏂赋值操作符
赋值操作符能对变量进行重赋值,能够随心所欲的进行修改。
赋值操作符:=
此外还有复合操作符:+= -= *= /= %= >>= <<== &= |= ^=
复合操作符表示操作数本身与后数进行操作,比如a+=3,表示a=a+3
🏂单目操作符
顾名思义,单目操作符就是只有一个操作数的操作符,单目操作符种类比较多。
同样的挑特殊的介绍
🚵取地址& 与 解引用*
这两个操作符是指针必备操作符,数据类型后加*表示指针型数据,对想指向的变量加上&表示取出地址赋给指针变量,而将指针变量加上*解引用后可以用得到原变量值。
🚵sizeof操作符
sizeof具有求大小的能力,但它不是函数,而是操作符,再使用时可以不加 ( ) ,sizeof中的表达式是不会进行运算的。
sizeof 计算指针的大小
🚵按位取反 ~
对数值的二进制位全部取反(包括符号位),0变为1,1变为0。
🏂关系操作符
关系操作符比较简单,除了判断相等号比较容易漏写外,没什么难点了。
> >= < <= != ==
🏂逻辑操作符
逻辑操作符要与位操作、单目操作符分开记忆,因为三者比较相似。
逻辑与 && 、逻辑或 | |
逻辑与是两端中一个为假,整体就为假;逻辑或则是一个为真,整体就为真。
C语言中0表示假,非0表示真(一般用1表示真)
🏂条件操作符(三目运算符)
条件操作符有三个操作数,形式为这样:exp1 ? exp2 : exp3
exp1为条件判断式,当判断式为真时,进入exp2,为假就进入exp3
🏂逗号表达式
逗号表达式是用逗号隔开多个表达式,然后从左向右计算,最终取最右边表达式的结果。
🏂下标引用、函数调用和结构体成员
三兄弟比较简单,放一起介绍
🚵下标引用 [ ]
下标引用出现于数组中,数组名+下标引用+下标值就可以找到对应元素
🚵函数调用操作符 ( )
函数调用操作符是函数必不可少的关键部分,无论是函数调用还是函数声明,亦或是我们的主函数,都有函数调用操作符是身影
🚵访问结构体成员 . ->
访问结构体成员有两种方式:普通访问与指针访问
普通访问:结构体.成员名
指针访问:结构体指针->成员名
🏂表达式求值
表达式求值的顺序一部分是有操作符的优先级和结合性决定的,表达式在求值时,同样存在类型转换的情况,比如整型转向浮点型。
🚵隐式类型转换(整型提升)
因CPU设计问题,使其很难实现整型(4字节,32比特位)以下的运算,于是这些类型在进行运算时会先发生整型提升(整型提升至32比特位,负数补1,正数补0),再进行相应计算,当计算完成后,会发生截断,截断值刚好能返回原来的类型。
🚵算术转换
算术转换指两个不同的数据类型发生转换,否则运算就无法进行,下面展示各数组之间的层次关系,称为寻常算术转换,排名越低越需要进行转换。
🚵操作符的属性
一般在较为复杂的表达式中有三个影响因素:
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
优先级 > 结合性
我们写的表达式如果不能通过操作符的属性确定唯一的计算路径,那么这个表达式就属于问题表达式,是存在问题的。
🏄♂️总结
操作符虽然多,但我们可以慢慢学;计算规则虽然多,但我们必须谨慎使用。不要因为自己的个人理解而写出逻辑混乱的错误代码,我们可以将复杂语句拆分,代码简洁不一定可行,不出问题才是成功。🎉🎉🎉
如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!
如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正!