文章目录
1. 操作符的分类
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
2.算数操作符
+ - * / %
** 区别"/"和“%”**
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
3.移位操作符
3.1本质
移动的是二进制的位
补充:数据的二进制表示
1.各种数据的表示
2.整数的二进制表示
3.2分类
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。
3.2.1<< 左移操作符
3.2.2>> 右移操作符
正数的右移符号不变
负数的逻辑右移也不发生变化
但是算数右移发生变化
4.位操作符
5.赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。
赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
这样的代码感觉怎么样?
那同样的语义,你看看:
x = y+1;
a = x;
这样的写法是不是更加清晰爽朗而且易于调试。
复合赋值符
6. 单目操作符
6.1 单目操作符介绍
sizeof的注意
变量的括号可以省略;
~的解释
对补码取反
!的解释
6.2sizeof和数组
函数传值为数列首地址
注意首地址为指针大小都为4字节
7. 关系操作符
8. 逻辑操作符
9. 条件操作符
exp1 ? exp2 : exp3
10. 逗号表达式
exp1, exp2, exp3, …expN
11. 下标引用、函数调用和结构成员
1.下标引用操作符
2.函数调用操作符
3.访问一个结构的成员
12. 表达式求值
表达式求值的顺序一部分是由操作符的优先级和结合性决定。
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。
12.1 隐式类型转换(小于int的类型转化)
12.2 算术转换(int类型及其以上的类型转化)
12.3 操作符的属性
复杂表达式的求值有三个影响的因素。
- 操作符的优先级
- 操作符的结合性
- 是否控制求值顺序。
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
操作符优先级
③中的是只用&&和||和?:和,
问题代码
总结:我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题
的。