一、表达式
在c语言中,由常量、变量、函数和运算符结合组成的式子称为表达式。
二、类型
类型:赋值表达式、算术表达式、关系表达式、逻辑表达式、位逻辑表达式、条件表达式、逗号表达式、复合表达式。
①:赋值表达式
1、变量赋初值形式
类型说明符 变量名 = 常量;
类型说明符 变量名 = 表达式;
2.赋值运算符
运算符 | 实例 | 等同于 | 试一试 |
---|---|---|---|
= | x = 5 | x = 5 | 试一试 » |
+= | x += 3 | x = x + 3 | 试一试 » |
-= | x -= 3 | x = x - 3 | 试一试 » |
*= | x *= 3 | x = x * 3 | 试一试 » |
/= | x /= 3 | x = x / 3 | 试一试 » |
%= | x %= 3 | x = x % 3 | 试一试 » |
- 常量无法被赋值,所以不是所有表达式都可以作为左值。
- 声明变量时可以直接为其赋值,也可以在声明变量后,再进行变量的赋值操作。
- 赋值运算符满足右结合性。
②:算术表达式
1、算术运算符
运算符 | 名称 | 描述 | 实例 | 试一试 |
---|---|---|---|---|
+ | 加法 | 将两个值相加 | x + y | 试一试 » |
- | 减法 | 从另一个值中减去一个值 | x - y | 试一试 » |
* | 乘法 | 两个值相乘 | x * y | 试一试 » |
/ | 除法 | 将一个值除以另一个 | x / y | 试一试 » |
% | 模数 | 返回除法余数 | x % y | 试一试 » |
++ | 增量 | 将变量的值增加 1 | ++x | 试一试 » |
-- | 递减 | 将变量的值减1 | --x | 试一试 » |
- 单目运算符:符号为 +(正值运算符) 和 -(负值运算符)。
- 双目运算符:符号为 + (加法运算符) 和 -(减法运算符)。
符号为 * (乘法运算符) 和 / (除法运算符)。
符号为% (取模或取余运算符)。
✳:取模定义为:a%b= a-(a/b)*b。
2、注意
- 算术运算符单目运算符的优先级高于双目运算符,而* / % 的优先级高于 + -(加、减)。
- 运算符的优先级别顺序执行时,可以用小括号()改变运算的优先级。
- 算术运算符满足左结合性。
③:自增/自减运算符
1.前缀
- :++i; /* 相当于i=i+1,i先执行自增1,再参加其他运算*/
- :--i; /* 相当于i=i-1,i先执行自减1,再参加其他运算*/
2.后缀
- i++; /* 相当于i=i+1,i先参与运算后,i再执行自增1*/
- i--; /* 相当于i=i-1,i先参与运算后,i再执行自减1*/
3.程序分析:
#include<stdio.h>
int main()
{
int a,b,c,d;
a = 100;
b = 100;
c = ++a;
d = b++;
printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
/*输出结果为:
a=101,b=101,c=101,d=100;
++a说明先执行自增a,然后再赋值给c。
b++说明先将b赋值给d,然后再自增b。
*/
a = 100;
b = 100;
c = --a;
d = b--;
printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
/*输出结果为:
a=99,b=99,c=99,d=100;
--a说明先执行自减a,然后再赋值给c。
b++说明先将b赋值给d,然后再自减b。
*/
return 0;
}
④:关系运算符
符号 | 功能 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
- 关系运算符均是双目运算符。
- ">="和"<="只需要满足其一条件就成立。
- "="和"=="是不同的,前者为赋值操作,后者是相等的意思。
- 关系运算符的优先级高于赋值运算符。
- 关系运算符具有左结合性(自左向右结合)。
⑤:比较运算符
- 比较运算符用于比较两个值。
- 比较的返回值为真(
1
)或假(0
)
1.程序分析
#include<stdio.h>
int main()
{
int x = 5;
int y = 3;
printf("%d", x > y); // 返回 1(true),因为 5 大于 3
return 0;
}
⑥:逻辑运算符
a | b | a&&b | a||b | !a |
0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 0 |
- 或"||"、与"&&"、非"!" 。
- 其中"||"、"&&"为双目运算符,"!"为单目运算符。
- "!"具有右结合性(右向左结合),"||"、"&&"具有左结合性(左向右结合)。
⑦:位逻辑运算符
符号 | 功能 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位取反 |
<< | 左移 |
>> | 右移 |
-
取反运算符"~"是单目运算符,其余均为双目运算符。
-
这些运算符只能用于整型或者字符型数据。
-
优先级从高到低:"~" 、 "<<" 、 ">>" 、 "&" 、"^" 、 "|" 。
-
"~" 右结合性,其余均为左结合性。
-
左移"<<"即乘以2的n次方。 右移">>"即是除以2的n次方。
-
取反"~": 10: 0000 1010 ~10:1111 0101
⑧:逗号运算符
1、形式
表达式1,表达式2,…表达式n
- 求解过程为先求解表达式1,再求解表达式2,一直求解表达式n,最终表达式的值即为表达式n的值。
- 逗号表达式的优先级是所有运算符中最低的。
- a=2,5-1,4+3,6*9 //输出结果为2 a=(2,5-1,4+3,6*9 ) //输出结果为54 这是因为前者有赋值运算符"="的存在,后者通过使用括号提升了逗号运算符的优先级。
⑨:复合赋值运算符
1、形式
变量名 复合赋值运算符 表达式 ;
等价于
变量名 = 变量名 双目运算符 表达式 ;
2、复合赋值运算符
"+=" "-=" "*=" "\=" "%=" "<<=" ">>=" "&=" "^="
- 满足右结合性。
⑩:条件运算符
条件运算符也称为三目运算符,即它有三个运算符。
1、形式
表达式1? 表达式2 :表达式3 ;
2、运算规则
如果表达式1的值为真,那么整个条件表达式的值就是表达式2的值,否则整个条件表达式的值就是表达式3的值。
3、注意
条件运算符的优先级高于赋值运算符,优先级低于关系运算符和算术运算符。
三、总结
1.优先级
从高到低:
①:逻辑非"!"
②:算术运算符
③:关系运算符
④:"&&"和"||"
⑤:关系运算符
⑥:赋值运算符
⑦:逗号运算符