【C语言】操作符与优先级详解
创始人
2024-02-01 11:35:13
0

C的操作符


文章目录

  • C的操作符
  • 前言
  • 一、算术操作符
  • 二、移位操作符
  • 三、位操作符
  • 四、赋值操作符
  • 五、单目操作符
  • 六、条件操作符
  • 七、逻辑操作符
  • 八、条件操作符
  • 九、逗号表达式
  • 十、下标引用、函数调用和结构成员
  • 十一、表达式求值
    • 11.1 隐式类型转换
    • 12.2 算术转换
    • 12.2 操作符的属性
  • 总结


前言

C语言的操作符运算,运算优先级,是否控制求值顺序,三个操作符主要的模块进行解释,同时会扩展隐式类型转换,整形提升,算术转换,同时也会有几道题目进行讲解


一、算术操作符

“加减乘除 取模” + - * / %

  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

二、移位操作符

<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。

  1. 左移规则:左边抛弃、右边补零
  2. 右移: 分为算数右移、逻辑右移
    逻辑移位
    左边用0填充,右边丢弃
    算术移位(只有算术移位才有符号规则)
    左边用原该值的符号位填充,右边丢弃

警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。

int num = 10;
num>>-1;//error

三、位操作符

& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。

按位与: 两个位都为1时,结果才为1
按位或: 两个位都为0时,结果才为0
按位异或: 两个位相同为0,相异为1

四、赋值操作符

普通赋值运算符 =
将右值赋值给左边的变量

复合赋值运算符

复合赋值运算符例子等于
+=a+=ba = a + b
-=a-=ba = a - b
*=a*=ba = a * b
/=a/=ba = a / b
%=a%=ba = a % b
>>=a>>=ba = a >> b
<<=a<<=ba = a << b
&=a&=ba = a & b
|a=b
^=a^=ba = a ^ b

五、单目操作符

! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
– 前置、后置–
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
比特就业课 比特就业课-专注IT大学生就业的精品课程

六、条件操作符

> 大于
>= 大于等于
< 小于
<= 小于等于
!= 用于测试“不相等”
== 用于测试“相等”
警告:
在编程的过程中== 和=不小心写错,导致的错误。

七、逻辑操作符

&& 逻辑与
|| 逻辑或

八、条件操作符

exp1 ? exp2 : exp3

当exp1为true 返回exp2 否则返回exp3

九、逗号表达式

exp1, exp2, exp3, …expN
从左往右依次执行。整个表达式返回最后一个表达式的结果

十、下标引用、函数调用和结构成员

  1. [ ] 下标引用操作符
    操作数:一个数组名 + 一个索引值
  2. ( ) 函数调用操作符
    接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
  3. 访问一个结构的成员
    . 结构体.成员名
    -> 结构体指针->成员名

十一、表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定。
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

11.1 隐式类型转换

C的整型算术运算总是至少以缺省整型类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型
提升。

整型提升的意义:

CPU整形运算器(ALU)的操作数字节长度为int的字节长度,同时也是CPU的 通用寄存器的长度
只有小于int的才会整形提升

如何进行整体提升呢?

整形提升是按照变量的数据类型的符号位来提升的
负数: 最高补符号位 为1
正数 最高补符号位 为0

算术运算操作的也是整形 算术操作符的操作都会整形提升在运算

12.2 算术转换

如果运算左右两个的类型不一致,就会发生转换 低转高

long double
double
float
unsigned long int
long int
unsigned int
int

警告:
但是算术转换要合理,要不然会有一些潜在的问题。

float f = 3.14;
int num = f;//隐式转换,会有精度丢失

12.2 操作符的属性

复杂表达式的求值有三个影响的因素。

  1. 操作符的优先级
  2. 操作符的结合性
  3. 是否控制求值顺序。

在这里插入图片描述
在这里插入图片描述
表达式要保证没有歧义,否则结果无法预测
下面的表达式就有歧义,需要注意

//代码3-非法表达式
int main()
{int i = 10;i = i-- - --i * ( i = -3 ) * i++ + ++i;printf("i = %d\n", i);return 0;
}

在这里插入图片描述


总结

覆盖了C语言操作符的基本用法

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...