C语言--运算符

C语言 运算符

一、概念

1.1运算符

具有一定的运算规则的符号,对数据的一种操作 2+3- 3*5= 5

1.2操作数

运算符要操作的数据就是操作数

1.3表达式

运算符跟操作数组合的式子就叫做表达式

1.3优先级

不同运算符组合在一起使用的时候,对数据的先后处理顺序

1.4结合性

在同一个优先级的情况下,对数据处理的先后顺序

二、运算符的分类

2.1赋值运算符

赋值运算符符号:=
a=b;
原理: 将右边的数据赋给左边的变量(左边必须是变量)
注意: 数据在做赋值运算的时候,要注意数据类型是一样的
如果两边的数据类型不一样,此时就会发生数据类型的转换
优先级 : 比逗号运算符的优先级高
结合性 :从右到左

2.2算数运算符

算数运算符符号: + - * / %(求余/取模)
除法 /
a) 当除号两边都是整数的时候,结果自动取整
10/3=3
b) 当除号两边只要有一边浮点型数据的时候,结果会取到准确值
10.0/3=3.333333
注意:验证的时候,注意数据类型的转换,结果用浮点型数据类型的变量接收

求余 %
a)原理:% 运算符两边必须是整数
如果不是整数,必须做数据类型的转换
b)用途: 用来做位数的分离

​ 123
​ 123%10 结果是3
​ 123/10%10结果是2
​ 123/100结果是1

d)优先级:* / % 高于 + -
算数运算符的优先级高于赋值运算符

e)结合性:从左往右

2.3关系运算符

关系运算符符号: > < >= <= != ==

对于数据:只要是非0值都是真值

​ a)由关系运算符组成的式子,叫做关系表达式
​ b)关系表达式的结果只有两种,0 或 1(逻辑结果真)
​ c)形式: 表达式1 关系运算符 表达式2
​ 假如: 2<3
​ d)注意:判断两个表达式是否相等,用 ==

e)如果表达式里面有运算符的时候,注意,优先级,先执行优先级高的

​ f)优先级: > < >= <= 高于 != ==
​ 从上往下,优先级降低:
​ 算数运算符的优先级
​ 关系运算符
​ 赋值运算符
​ g) 结合性:从左往右
​ h) 用途:用在循环语句,条件语句,进行判断

2.4按位运算符

按位运算符符号: &(按位与) ^(按位异或) |(按位或) ~(按位取反)
<<(按位左移) >>(按位右移)

a)说明:在做按位运算的时候,需要将数据转换成二进制,再进行相关的运算
数据是以补码的形式保存在内存中的:
对于正数来说,它的补码就是它的原码
对于负数来说,它的补码就是它原码除了符号位之外,其他位取反加1
注意:凡是做按位运算的时候,必须将数据转换成二进制来进行运算
b)按位与 : &
形式: 表达式1 & 表达式2
规则: 全1为1,有0为0
c)按位异或: ^
形式: 表达式1 ^ 表达式2
规则: 相同为0,相异为1
d)按位或 : |
形式: 表达式1 | 表达式2
规则: 全0为0,有1为1

e)按位取反: ~
规则:0变1,1变0
注意: 按位取反是单目运算符

补充:单目运算符跟双目运算符的区别:
单目运算符:根据操作数的数目来区分
如果只有一个操作数:单目运算符
如果有两个操作数:双目运算符
如果有三个操作数:三目运算符

例子:

int a=0x34;       
0000 0000 0000 0000 0000 0000   0011 0100
~a;  
1111 1111 1111 1111 1111 1111  1100 1011
FFFFFFCB
char b=0x34
~b;

f)按位左移 <<
规则:整体左移,高位溢出,低位补零
方法:整体左移的时候,相对于乘以2,(必须符合数据的取值范围)
例:b左移n 相对于b*2^n
g)按位右移 >>
规则:整体右移,低位溢出,高位位补零
方法:整体右移的时候,相对于除以2,(必须符合数据的取值范围)

优先级:~ 高于 << >> 高于 & 高于 ^ 高于 |
结合性:单目运算符:从右往左
双目运算符:从左往右

2.5逻辑运算符

逻辑运算符符号:&& || !

1)逻辑与:&&
形式: 表达式1 && 表达式2
原理: 两个表达式的结果都是真值,则整体表达式的结果就是真值
注意:如果表达式1的结果是真值,则再去判断表达式2的结果
如果表达式1的结果是假值,不会去判断表达式2

2)逻辑或:||
形式: 表达式1 ||表达式2
原理: 两个表达式的结果有一个为真,则整体表达式的结果就是真值
注意: 如果表达式1的结果是真值,则不会再去判断表达式2的结果
如果表达式1的结果是假值,则再去去判断表达式2

3)逻辑非:!
形式:!表达式1
原理:真变假,假变真
注意:逻辑非 是单目运算符

4)优先级: ! 高于 && 高于 ||
结合性: 单目运算符:从右往左
&& || : 从左往右

2.6自增自减运算符

自增自减运算符符号: ++ –
原理:本身会自增1
分类:分为前置跟后置
前置:int a; ++a 在变量的前面
规则:变量先自增,后使用,
a=1, b=++a;
后置:a++ 在变量的后面
规则:变量先使用后自增
注意:只有变量才会发生自增自减,
不管是前置还是后置,变量最终都会加1
对于前置,变量先加在使用,int a, b=++a ;
对于后置,变量先使用在自增,变量只有在一条语句结束之后才会发生自增

b=a++;  {b=a; a=a+1} a=1
b=(a++)+(b=a);  //b=1+1   a=2

优先级:单目运算符
结合性:从右往左

补充:1)自增,自减,在printf函数里面,结合性是从右往左
printf(“a = %d b = %d\n”,a++, ++a); 先计算后面的,在计算前面的

2)在前置和后置同时出现的时候,前置会影响后置,后面在出现前置和后置的时候就不会发生变化了。
前置和前置同时出现的时候,也会受影响
解释:不同的编译器,所造成的影响是不同的,根据编译器而定

 b=(a++)+(++a)+(a++)+(++a)+(a++);
//1+2+2+3+3=11  实际结果是12
 //a=6

d=(++c)+(++c);
//2+3    实际结果是6
//c=3

2.7三目运算符

三目运算符符号 ?:
形式:(条件表达式)?表达式1:表达式2
原理:先判断条件表达式,如果条件表达式为真,则整体表达式的结果就是表达式去的结果;如果条件表达式为,则整体的表达式的结果就是表达式2的结果
本质: 三目运算符
优先级:单目运算符 高于 双目运算符 高于 三目运算符
结合性:从左往右

2.8复合赋值运算符

复合赋值运算符:
形式: += -= /= …
原理:a+=b; a=a+b
注意:!= >= <=
运算符本身带有赋值运算符的不是复合赋值运算符
优先级:跟赋值运算符的优先级一样
结合性:从左往右

2.9逗号运算符

逗号运算符:
形式:(表达式1,表达式2,…表达式n);
原理:先计算表达式1,然后在计算表达式2,一直到表达式n,
最终整个表达式的结果是表达式n的结果
优先级:最低
结合性:从左往右

三、运算符优先级(运算顺序)排序

运算符优先级的高低,从上往下,优先级依次降低

括号 : () {} [] . ->

单目运算符 : ~ ! ++ –

指针运算符 : * &

算数运算符: * / % + -

按位运算符: << >>

关系运算符:> < >= <= != ==

按位运算符:& ^ |

逻辑运算符:&& ||

三目运算符: ?:

(符合)赋值运算符 : = += -= %= …

逗号运算符 : ,

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_翩翩少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值