运算符与表达式
算数运算符
算术:+,-,*,/,%
考试一定要注意:“/” 两边都是整型的话,结果就是一个整型。 3/2的结果就是1.
“/” 如果有一边是小数,那么结果就是小数。 3/2.0的结果就是1.5
%符号两边要求是整数。不是整数就错了。
赋值运算符
赋值运算符:=
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
赋值的左边只能是一个变量。
自增、自减运算符
自加表达式:++
自减表达式:++
自加、自减表达式:假设a=5,++a(是为6), a++(为5);
运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。 进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
关系表达式
关系运算符:> ,<,=,>=,<=,!=
关系运算符号:注意<=的写法,==和=的区别!
1)关系表达式:
a、表达式的数值只能为1(表示为真),或0(表示假)。
如 9>8这个关系表达式是真的,所以9>8这个表达式的数值就是1。
如 7<6这个关系表达式是假的,所以7<6这个表达式的数值就是0
b、考试最容易错的:就是int x=1,y=0,z=2;
x<y<z是真还是假?带入为1<0<2,从数学的角度出发肯定是
错的,但是如果是C语言那么就是正确的!因为要1<0为假得到0,表达式就变成
了0<2那么运算结果就是1,称为了真的了!
c、等号和赋值的区别!一定记住“=”就是赋值,“= =”才是等号。虽然很多人可以背
诵,但我依然要大家一定好好记住,否则,做错了,我一定会强烈的鄙视你!
逻辑运算
运算符:&& || ! 三种逻辑运算
注意:C语言中是用非0表示逻辑真的,用0表示逻辑假的。
位运算
位运算符:& , | , ^ , ~ , << , >>
表达式:
在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
逗号运算符
逗号运算符: ,
逗号表达式:用逗号连接起来的一串表达式 3,4,9,12
优先级别最低。表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
z=(2,3,4)(整个是赋值表达式) 这个时候z的值为4。(有点难度哦!)
z= 2,3,4 (整个是逗号表达式)这个时候z的值为2。
强制类型转换
强制类型转换:(type)
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
运算符的优先级
优先级 |
运算符 |
名称或含义 |
使用形式 |
结合方向 |
说明 |
1 |
[] |
数组下标 |
数组名[整型表达式] |
左到右 |
|
() |
圆括号 |
(表达式)/函数名(形参表) |
|||
. |
成员选择(对象) |
对象.成员名 |
|||
-> |
成员选择(指针) |
对象指针->成员名 |
|||
2 |
- |
负号运算符 |
-算术类型表达式 |
右到左 |
单目运算符 |
(type) |
强制类型转换 |
(纯量数据类型)纯量表达式 |
|||
++ |
自增运算符 |
++纯量类型可修改左值表达式 |
单目运算符 |
||
-- |
自减运算符 |
--纯量类型可修改左值表达式 |
单目运算符 |
||
* |
取值运算符 |
*指针类型表达式 |
单目运算符 |
||
& |
取地址运算符 |
&表达式 |
单目运算符 |
||
! |
逻辑非运算符 |
!纯量类型表达式 |
单目运算符 |
||
~ |
按位取反运算符 |
~整型表达式 |
单目运算符 |
||
sizeof |
长度运算符 |
sizeof 表达式 sizeof(类型) |
|||
3 | / |
除 |
表达式/表达式 |
左到右 | 双目运算符 |
* |
乘 |
表达式*表达式 |
双目运算符 |
||
% |
余数(取模) |
整型表达式%整型表达式 |
双目运算符 |
||
4 |
+ |
加 |
表达式+表达式 |
左到右 |
双目运算符 |
- |
减 |
表达式-表达式 |
双目运算符 |
||
5 |
<< |
左移 |
整型表达式<<整型表达式 |
左到右 |
双目运算符 |
>> |
右移 |
整型表达式>>整型表达式 |
双目运算符 |
||
6 |
> |
大于 |
表达式>表达式 |
左到右 |
双目运算符 |
>= |
大于等于 |
表达式>=表达式 |
双目运算符 |
||
< |
小于 |
表达式<表达式 |
双目运算符 |
||
<= |
小于等于 |
表达式<=表达式 |
双目运算符 |
||
7 |
== |
等于 |
表达式==表达式 |
左到右 |
双目运算符 |
!= |
不等于 |
表达式!= 表达式 |
双目运算符 |
||
8 |
& |
按位与 |
整型表达式&整型表达式 |
左到右 |
双目运算符 |
9 |
^ |
按位异或 |
整型表达式^整型表达式 |
左到右 |
双目运算符 |
10 |
| |
按位或 |
整型表达式|整型表达式 |
左到右 |
双目运算符 |
11 |
&& |
逻辑与 |
表达式&&表达式 |
左到右 |
双目运算符 |
12 |
|| |
逻辑或 |
表达式||表达式 |
左到右 |
双目运算符 |
13 |
?: |
条件运算符 |
表达式1? 表达式2: 表达式3 |
右到左 |
三目运算符 |
14 |
= |
赋值运算符 |
可修改左值表达式=表达式 |
右到左 |
|
/= |
除后赋值 |
可修改左值表达式/=表达式 |
|||
*= |
乘后赋值 |
可修改左值表达式*=表达式 |
|||
%= |
取模后赋值 |
可修改左值表达式%=表达式 |
|||
+= |
加后赋值 |
可修改左值表达式+=表达式 |
|||
-= |
减后赋值 |
可修改左值表达式-=表达式 |
|||
<<= |
左移后赋值 |
可修改左值表达式<<=表达式 |
|||
>>= |
右移后赋值 |
可修改左值表达式>>=表达式 |
|||
&= |
按位与后赋值 |
可修改左值表达式&=表达式 |
|||
^= |
按位异或后赋值 |
可修改左值表达式^=表达式 |
|||
|= |
按位或后赋值 |
可修改左值表达式|=表达式 |
|||
15 |
, |
逗号运算符 |
表达式,表达式,… |
左到右 |
从左向右顺序结合 |
说明:
同一优先级的运算符,结合次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
举例及说明
- int x=y=10: 错,定义时,不可以连续赋值。
- 连续赋值
int x,y;
x=y=10; 对,定义完成后,可以连续赋值。
- int x=7.7;对,x就是7
float y=7;对,x就是7.0
- 强制类型转换
注意(int)(a+b) 和(int)a+b 的区别。前是把a+b转型,后是把a转型再加b。