表达式
- 由操作符和操作数组成
- 最简的的表达式只含一个操作数,即单一的一个数就是一个表达式
- 作用:放在赋值语句右侧、传参、做判断条件
- 表达式的返回值有逻辑性质,非零则为真,否则为假。
- 表达式的返回是有类型的,却决于变量类型和常量类型及其运算。
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 | , |