运算符与表达式
算数运算符
算术:+,-,*,/,%
考试一定要注意:“/” 两边都是整型的话,结果就是一个整型。 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。