C语言中的操作符详解

1, 操作符分类

1.算术操作符

+,-,*,/,%

ps: /,除法操作,两边是整数得到整数,有一个是小数/两端至少有一个是浮点数。 %,取模计算余数,两边必须都为整数

2.移位操作符,只能移正数不能太大

移(2进制)位操作符

 <<左移操作符
 左边丢一位左移补0,原数不变,结果左移,打印的值是原码
右移操作符>>
 算术右移
 右边丢弃,左边补原来的符号位
 逻辑右移
 右边丢弃,左边补0

整数的2进制表示形式3种
正数的原码,反码,补码相同
负数
原码,按照一个数的正负,直接写出它的二进制形式得到的就是原码
反码,符号位不变,其他位按位取反
补码,取反进一,补码取反加一可以得到原码
内存中存储2进制为补码,移位时移动的是二进制补码

3.位操作符

操作数都针对于整数(二进制位)

对应的二进制位
&按位与,有0则为0
|按位或,有1则为1
 ^按位异或,按二进制位,相同为0,相异为1
ps, 异或支持交换律,不会产生进位 可以支持整数不用临时变量的交换

4.赋值操作符

 =,赋值
 复合赋值符
+=-=*=/=%=>>=,<<=,&=,|=,^=

a=x=y+1连续赋值可化为
x=y+1
a=x 一样的表示结果

5.单目操作符

 !逻辑反操作
  -负值,+正值
 &取地址,常与解引用搭配使用//*pa解引用操作
 sizeof操作数的 类型 长度(以字节为单位)是关键字也是操作符
 sizeof不是函数,有时可以省略括号 ,sizeof内部的表达式不参与计算
 ~  对一个数的二进制位按位取反,所有位都取反包括符号位
 --前置后置--
 ++前置后置++
 后置先使用在操作,前置先操作在使用
 ++ --有副作用会改变自己的值
 *间接访问操作符,也叫解引用操作符
 (类型)强制类型转换

ps,布尔类型,用来表示真假的类型
#include <stdbool.h>
_Bool flag=true
_Bool flag=false
true与false两种情况

ps,unsigned无符号数会把符号位也认为有效位 signed有符号,最高位为符号位

ps,sizeof和数组
数组传参,形参可以写成数组也可以写成指针
sizeof求下列大小
int arr[10]=40
char ch[10]=10
传参后均为4或8

6.关系操作符

>,>=,<,<=,!=,==

7.逻辑操作符

 &&逻辑与,并且
 ||逻辑或,或者
 只关注真假,左边算完可以判断结果,右边不会算了

8.条件操作符

表达式1?表达式2:表达式3
123不算
1为假2不算3

9.逗号表达式

用逗号隔开,表达式结果为最后一个表达式的结果,从左到右依次执行

10.下标引用,函数调用和结构成员

 下标引用,[]
 函数调用,函数名(),()为函数调用操作数
 结构成员
 结构体,是一种自定义类型,把多种类型聚合在一起
 struct 名称
 {
          各种类型;
 }
 打印方法,结构体变量.成员名,在函数中打印用地址解引用结构体指针->成员名

* 11.表达式求值

一部分是由操作符的优先级决定的,有时操作数可能要类型转换

1>隐式类型转换

整型提升,有时表达式中的字符与短整型在使用之前会被转化为普通整形,针对于整形小于整形的类型
意义,cpu操作一般为int的长度因此先转换
整型提升补的是符号位

ps,char有符号-128到+127
无符号0到256

2>算术转换

当表达式的操作数类型不同时,除非转换为与另一个操作数相同的类型,否则无法进行
一般来说向上转换
有时会有精度丢失

3>操作符属性

相邻操作符考虑优先级,根据优先级高低计算,优先级相同,考虑结合性
确定优先级结合性,无法唯一确定计算路径,尽量避免写出有疑问的代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值