C语言操作符详解

                                    **C语言操作符
   分类:算数操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用,函数调用和结构成员**

算数操作符
+ - * / %
1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数.

2.对于 / 操作符如果两个操作符都为整数,执行整数除法.而只要有浮点数,执行的就是浮点数除法.

2.% 操作符的两个操作数必须为整数.返回的整数之后的余数.

移位操作符
<< 左移操作符 >>右移操作符

左移操作符移位规则:
左边抛弃,右边补0

在这里插入图片描述
右移操作符移位规则:
首先右移运算分为两种:

1.逻辑移位,左边用0填充,右边丢弃

2.算术移位,左边用原该值的符号位填充,右边丢弃

在这里插入图片描述

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

int num=10;

num>>-1;//error

位移操作符:
位移操作符有: &//按位与 | //按位或 ^//按位异或 注:他们的操作数必须是整数
在这里插入图片描述

赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值,也就是可以给自己重新赋值

在这里插入图片描述

复合赋值符
+= *= /= %= >>= <<= &= |= ^= 这些运算符都可以写成符合的效果例如

在这里插入图片描述

单目运算符
!逻辑反操作 -负值 +正值 &取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 --前置,后置 – ++ 前置,后置++ *间接访问操作符(解引用操作符) (类型)强制类型转换

在这里插入图片描述
在这里插入图片描述
同样的代码产生了不同的结果,这是为什么呢?

这段代码中的第一个+在执行的时候,第三个++是否执行,这个是不确定的,因为依靠操作符的优先级和结合性是无法决定的

总结:
1.说明这个代码本身不是一个好代码.
2.结果跟表达式的求值顺序有关系
3.表达式的求值依赖于运算符的优先级和结合性,但操作符的优先级和结合性又不能确定唯一的计算路径
4.这样的表达式产生的结果是严重依赖与表达式的求值顺序,所以不要写出这样的表达式
5.在学习的时候也不要钻牛角尖

关系操作符

= < <= != == 这些关系运算符比较简单,我们要注意一些运算符使用时候的陷阱

逻辑操作符
&& 逻辑与 || 逻辑或

注意区分逻辑与和按位与 区分逻辑或和按位或

1&2----->0 1&&2----->1 1|2-------->3 1||2------->1

在这里插入图片描述

条件操作符
exp1?exp2:exp3

逗号表达式
exp1 ,exp2,exp3,----expN

逗号表达式,就是用逗号隔开的多个表达式.逗号表达式,从左向右依次执行.整个表达式的结果是最后一个表达式的结果

在这里插入图片描述

下标引用,函数调用的结构成员

1[]下标引用操作符
操作数:一个数组名+一个索引值

在这里插入图片描述
2()函数调用操作符,接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递函数的参数

在这里插入图片描述
在这里插入图片描述
3访问一个结构的成员
结构体.成员名–>结构体指针–>成员名

在这里插入图片描述

表达式求值
表达式求值的顺序一部分是又操作符的优先级和结合性决定.

同样,有些表达式的操作数在求值的过程中可能需要转换为其它类型

隐式类型转换
C的整形算数运算总是至少以缺省整型类型的精度来进行的

为了获得这个精度,表达式的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

在这里插入图片描述

算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作数就无法进行

在这里插入图片描述

操作符的属性
复杂表达式的求值有三个影响的因素

1.操作符的优先级

2.操作符的结合性

3.是否控制求值的顺序

两个相邻的操作符先执行哪个?取决于他们的优先级,如果两者的优先级相同,取决于他们的结合性

操作符优先级:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值