当前位置:网站首页>c语言:操作符详解
c语言:操作符详解
2022-07-30 20:20:00 【某某小卢】
- 操作符
- 操作符分类:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
- 算术操作符
其中包括+,-,*,/,%
其中比较特殊的%,求余%两边只能是整数。其他的几个浮点数和整数ok。
对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- 移位操作符
& //按位与 有0为0,双1为1
| //按位或 有1为1,双0为0
^ //按位异或 相同为0,相异为1
注:他们的操作数必须是整数。
补充一下:这里的运算规则是用二进制的补码来运算的
例:当交换两个数(不使用第三个变量)

- 二进制的原码,补码以及反码
二进制由0和1组成
二进制是这样的。以15为例(32位):
000000000000000000000000001111;这里的四个1分别对应:2的3次方 2的2次方 2的1次方 2的0次方
二进制转换为10进制是这样的:2的3次方*1+ 2的2次方*1+ 2的1次方*1+ 2的0次方*1=15
上面的二进制为二进制的原码。第一位为符号位:0为负,1为正
反码为除了符号位,原码0 1互换,0变1,1变0
补码是反码加1,逢二进一
其中值得注意的是正整数的原反补码都相同
- 移位操作符
左边抛弃、右边补0
>> 右移操作符
分为两种
.逻辑移位
左边用0填充,右边丢弃
2算术移位
左边用原该值的符号位填充,右边丢弃
注:移位操作符的操作数只能是整数。
对于移位运算符,不要移动负数位,这个是标准未定义的
补充一下:这里的运算规则是用二进制的补码来运算的
例:统计二进制中1的个数

例:求两个数二进制中不同位的个数

- 赋值操作符=
这个就是常见的赋值操作符;例如:int i=0;
他有很多复合操作符+=,-=,*=,/=,%=,
他们的运算方法跟+=一样。例如:a+=6 ==== a=a+6
- 单目操作符

其中比较值得注意的是sizeof

这个代码中sizeof(arr)是,sizeof看到访问的是arr整个数组,有int型的大小是4,所以4*10=40
sizeof(arr[10])这里是否越界访问了,其实是没有的,sizeof只是判读是int型,它并没有进去,哪怕是arr[11]也不会越界访问
例:

第一个a是可以的,会打印4,第二个是不可以的,会报错
所以呢,sizeof可以不加括号来访问变量,但不可以不加变量来访问数据类型。

这里为啥呢?
其实是这样的,一般来说,s=2+5=7嘛,但其实
这里会发生截断,sizeof()括号里面的东西不进行计算,sizeof发现了s是short类型的,返回2嘛,然后下面s还是10.
- ~ 对一个数的二进制按位取反
是将每一位按位取反,包括符号位
- i++和++i
++a
先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值
a++
先对a先使用,再增加
- 关系操作符
= <
两个字符串不能用==来判断是否相等

警告:
在编程的过程中== 和=不小心写错,导致的错误。
例:

答案应该是1 2 3 4
是这样a++先使用a,又因为a=0,所以0&&++b,这样的话++b就没有必要算,直接等于0,同理d++也没有算。
- 逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

虽然逗号表达式是算最后一个表达式的值,但前面的表达式也得算,因为,前面的表达式,可能会使变量的值改变
- 算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类
型,否则操作就无法进行。下面的层次体系称为寻常算术转换。
边栏推荐
- Based on the face of the common expression recognition - model building, training and testing
- Interviewer Ali: Describe to me the phenomenon of cache breakdown, and talk about your solution?
- FFmpeg —— 裁剪视频(含音视频),不需编解码(附完整源码)
- bebel系列- 插件开发
- 基于人脸的常见表情识别(1)——深度学习基础知识
- 基于人脸的常见表情识别(2)——数据获取与整理
- [Ask] SQL statement to calculate the sum of column 2 by deduplicating column 1?
- 多线程获取官方汇率
- ELK log analysis system
- 普通的int main(){}没有写return 0;会怎么样?
猜你喜欢

推荐系统-排序层:排序层架构【用户、物品特征处理步骤】

【PM专用】快速统计团队还有谁没有登记上报信息,快速筛选出属于自己项目组的成员,未完成XXX工作事项的名单

对int变量赋值的操作是原子的吗?

PHP低代码开发平台 V5.0.7新版发布

Database indexes: indexes are not a panacea

Apple Silicon配置二进制环境(一)

idea plugins搜索不到插件

推荐系统:概述【架构:用户/物品特征工程---->召回层---->排序层---->测试/评估】【冷启动问题、实时性问题】

MySQL 多表关联一对多查询实现取最新一条数据

WPS怎么独立窗口显示?wps单独窗口显示怎么操作?
随机推荐
[NISACTF 2022]下
Day31 LeetCode
MySQL----多表查询
Recommendation system: evaluation index [offline evaluation index: RMSE (root mean square error), AUC, precision, recall, F1] [online evaluation: A/B test] [generally required response time <0.5s]
@WebServlet注解(Servlet注解)
Mysql 回表
对int变量赋值的操作是原子的吗?
线性结构:顺序表和链表
【无标题】多集嵌套集合使不再有MultipleBagFetchException
多线程的互斥锁应用RAII机制
推荐系统:实时性【特征实时性:客户端实时特征(秒级,实时)、流处理平台(分钟级,近实时)、分布式批处理平台(小时/天级,非实时)】【模型实时性:在线学习、增量更新、全量更新】
To the operation of the int variable assignment is atom?
[Ask] SQL statement to calculate the sum of column 2 by deduplicating column 1?
PR视频剪辑软件教程
Flink_CDC搭建及简单使用
明解C语言第七章习题
excel数字如何转换成文本?excel表格数据转换成文本的方法
HarmonyOS Notes ------------- (3)
18.客户端会话技术Cookie
jOOQ是如何设计事务API(详细指南)