C:操作符的注意事项们


1.算术操作符:+  -  *  /  % 

注意了!!!

1) %操作符不能用于浮点数。
2)对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3) %操作符的两个操作数必须为整数。返回的是整除之后的余数

2   移位操作符:<<   >>

<< 左移操作符:左边抛弃、右边补0

>> 右移操作符:首先右移运算分两种:

1)算术移位
左边用符号位填充,右边丢弃
2) 逻辑移位
左边补0,右边丢弃
一般我们用算术移位
3  位操作符:&  |    ^ 
注意:他们的操作数必须是整数。
4   赋值操作符

该操作符 可以修改之前不满意的值,就是你可以给自己重新赋值。

赋值操作符可以连续使用
+=         -=         *=          /=        %=        >>=       <<=        &=         |=         ^=
这些运算符都可以写成复合的效果,这样写更加简洁。

5   单目运算符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
前置++和--:先自增(自减),再使用
后置++和--:先使用,再自增(自减)

6   关系操作符:

>  >=  <  <=   != 用于测试“不相等”   == 用于测试“相等”

注意:在编程的过程中== 和=不小心写错,导致的错误
7   逻辑操作符

&& 逻辑与   :左边表达式为假,不再执行后边的表达式

|| 逻辑或       :左边表达式为真,不再执行后边的表达式

区分逻辑与&&和按位与&

区分逻辑或||和按位或|

1&2----->0
1&&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;
注意:同上,操作符的优先级只能决定自减–的运算在+的运算的前面,但是我们并没有办法得知,+操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的。

猜你喜欢

转载自blog.csdn.net/F_hawking/article/details/79808204