1.算术操作符:+ - * / %
注意了!!!
1) %操作符不能用于浮点数。2)对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3) %操作符的两个操作数必须为整数。返回的是整除之后的余数。
2 移位操作符:<< >>
<< 左移操作符:左边抛弃、右边补0
>> 右移操作符:首先右移运算分两种:
1)算术移位左边用符号位填充,右边丢弃
2) 逻辑移位
左边补0,右边丢弃
一般我们用算术移位
3 位操作符:& | ^
注意:他们的操作数必须是整数。
4 赋值操作符
该操作符 可以修改之前不满意的值,就是你可以给自己重新赋值。
赋值操作符可以连续使用+= -= *= /= %= >>= <<= &= |= ^=
这些运算符都可以写成复合的效果,这样写更加简洁。
5 单目运算符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
前置++和--:先自增(自减),再使用
后置++和--:先使用,再自增(自减)
6 关系操作符:
> >= < <= != 用于测试“不相等” == 用于测试“相等”
注意:在编程的过程中== 和=不小心写错,导致的错误7 逻辑操作符
&& 逻辑与 :左边表达式为假,不再执行后边的表达式
|| 逻辑或 :左边表达式为真,不再执行后边的表达式区分逻辑与&&和按位与&
区分逻辑或||和按位或|
1&2----->01&&2---->1
1|2----->3
1&&2---->1
8 条件操作符
exp1 ? exp2 : exp3
可以使用条件表达式实现找两个数中较大值,比if else语句简洁明了
9 逗号表达式exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
算术转换如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。
long double
double
float
unsigned long int
long int
unsigned int
int
注意:如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。
但是算术转换要合理,要不然会有一些潜在的问题。
复杂表达式的求值有三个影响的因素。
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序。
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
表达式的求值部分由操作符的优先级决定。
eg1: a*b + c*d + e*f
注意:代码1在计算的时候,由于比+的优先级高,只能保证,的计算是比+早,但是优先级并不能决定第三个*比第一个+早执行。所以表达式的计算机顺序就可能是:a*b c*d a*b + c*d e*f a*b + c*d + e*f
或者:a*b c*d e*f a*b + c*d a*b + c*d + e*f
eg2: c + --c;
注意:同上,操作符的优先级只能决定自减–的运算在+的运算的前面,但是我们并没有办法得知,+操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的。