表达式
- 由操作符和操作数组成
- 最简的的表达式只含一个操作数,即单一的一个数就是一个表达式
- 作用:放在赋值语句右侧、传参、做判断条件
- 表达式的返回值有逻辑性质,非零则为真,否则为假。
- 表达式的返回是有类型的,却决于变量类型和常量类型及其运算。
1)赋值运算符与赋值表达式
- 赋值运算符:=
- 作用:将数据、表达式的值、函数返回值等值赋给一个变量
- 左值:符号左侧的部分
- 右值:符号右侧的部分
类型 变量名 = 常数;
类型 变量名 = 表达式;
类型 变量名 = 函数返回值;
变量定义语句
变量名 = 常数;
变量名 = 表达式;
变量名 = 函数返回值;
- 自动类型转换(隐性):当赋值表达式左值和右值的数据类型不同时,系统自动将右值的数据类型转换成与左值相同的数据类型。
- 低级别类型赋给高级别类型,将低级别的升级,造成精度提高,数据信息不会丢失。
- 高级别赋给低级别时,将数据降级别表示,可能发生数据信息丢失,系统会警告,但合法。
- 强制类型转换(显性):当左右值类型不同时,系统根据不同情况自动转换,但编译器会发出警告。使用强制类型转换告知编译器,将不产生警告,即程序员以默许。
(类型名)(表达式)
int a= int(1.0);
int b;
b = int( 2 / 3 )
- 复合赋值运算
运算符 | 举例 | 等价 |
---|
+= | a += b | a= a + b |
-= | a -= b | a= a - b |
*= | a *= b | a= a * b |
/= | a /= b | a= a / b |
%= | a %= b | a= a % b |
&= | a &= b | a= a & b |
|= | a |= b | a= a | b |
^= | a ^= b | a= a ^ b |
<<= | a <<= b | a= a << b |
>>= | a >>= b | a= a >> b |
2)算术运算符与算术表达式
符号 | 功能 |
---|
+ | 单目,取正值 |
- | 单目,取负值 |
* | 乘法 |
/ | 除法(两整数相除时取整) |
% | 取模(两边为整数,相除取余数) |
+ | 加法 |
- | 减法 |
- 单目正运算不会将一个负值表达式改为正,其存在只是为了与单目负运算符配对。
int a;
a = -1;
prinf("%d\n",a)
prinf("%d\n",+a)
prinf("%d\n",-a)
-1
-1
1
3)关系运算符与关系表达式
符号 | 功能 |
---|
> | 单目,取正值 |
>= | 单目,取负值 |
< | 乘法 |
<= | 除法(两整数相除时取整) |
== | 取模(两边为整数,相除取余数) |
!= | 加法 |
4)逻辑运算符与逻辑表达式
符号 | 功能 |
---|
&& | 双目,逻辑与 |
|| | 双目,逻辑或 |
! | 单目,逻辑非 |
5)位逻辑运算符与位逻辑表达式
符号 | 功能 | 类型 |
---|
& | 位逻辑与 | 双目 |
| | 位逻辑或 | 双目 |
^ | 位逻辑 | 双目 |
~ | 取补 | 单 目 |
- 位运算:对操作数的二进制形式进行相应运算
- 以后细讲
6)逗号运算符与逗号表达式
表达式1,表达式2,...,表达式n
- 求解表达式1
- 再求解表达式2
- 一直到表达式n
- 整个表达式的值为表达式n的值
- 常用在定义多个变量
int a, b, c, d;
int e=1, f=2, g=3;
注意区别:
num=1+2, 3+4, 5+6;
printf("%d\n",num);
num=(1+2, 3+4, 5+6);
printf("%d\n",num);
3
11
7)自增自减运算符
- 自增++;自减–
- 即对变量作加1和减1操作
- 分前缀和后缀
8)优先级
优先级 | 运算符 |
---|
1 | ()、[]、-> 、. |
2 | !、~、++、–、+、-、*、&、sizeof |
3 | *、/、% |
4 | +、- |
5 | <<、>> |
6 | <、<=、>、>= |
7 | ==、!= |
8 | & |
9 | ^ |
10 | && |
11 | || |
12 | ?: |
13 | =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>= |
14 | , |