一、表达式
1.表达式是什么
一个或多个运算对象
与零个或多个运算符
组成的式子叫做表达式
。
每个表达式都有一个结果
C 代码:
代码语言:javascript复制printf("%dn" 5 10); //表达式结果为:15
2.表达式语句
在表达式后边加上;
就构成了表达式语句,C语言中表达式不能单独存在,必须以表达式语句的方式存在。
C 代码:
代码语言:javascript复制100;
5 10;
a/b;
a*10/b c;
C 代码:
代码语言:javascript复制printf("%dn" 5 10); //5 10表达式为什么后边没有;号,是因为5 10在这个语句中是函数调用表达式的子表达式。
函数名加括号运算符构成了一个函数表达式。
二、运算符
在C语言中,运算符有非常的多。它内置的运算符丰富到令人头皮发麻,但同时给了我们对代码的更多操作性。
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
1.算术运算符
算术运算符专门用于算术运算,主要有下面几种。
一元运算符指的是只有一个运算对象,反之,二元运算符是指有两个运算对象。
-
:负值运算符(一元运算符)-
:减法运算符(二元运算符)*
:乘法运算符/
:除法运算符%
:余值运算符
名称 | 运算符号 | 描述 | 举例 |
---|---|---|---|
正值运算符 |
| 表示这个操作数为正数 | 12(它是 12) |
负值运算符 | - | 表示这个操作数为负数 | -12(它是-12) |
加法运算符 |
| 添加两个操作数 | 2 10=12 |
减法运算符 | - | 从第一个减去第二个操作数 | 12-2=10 |
自增运算符 |
| 自增运算符将整数值增加1 | int a = 1; a |
自减运算符 | -- | 自减运算符将整数值减小1 | int a = 1; a-- |
乘法运算符 | * | 将两个操作数相乘 | 2*6=12 |
除法运算符 | / | 将两个操作数相除 | 12/2=6 |
余值运算符(求余运算符) | % | 将操作数相除后取余 | 12%5=2 |
(1)
-
这两个运算符既可以当做一元运算符,也可以当做二元运算符
所谓一元运算符
,指的是只需要一个运算数就可以执行。一元运算符-用来改变一个值的正负号。
C 代码:
代码语言:javascript复制int num = -1;
int num2 = num;
这段代码中的
-
将1
变为了-1
。正号对正负值没有什么影响,
不会改变正负值,可加可不加。
二元运算符
-
也就是用他们来完成加减法。
C 代码:
代码语言:javascript复制int x = 6 6;
int y = 13 - 1;
(2)*
乘法运算符
运算符*
用来完成乘法。
C 代码:
代码语言:javascript复制int num = 2 * 6;
printf("%i", num); // 输出12
// 或者
int num = 6;
printf("%in", num * num);//输出 36
(3)/
除法运算符
运算符/
用来完成除法。注意,两个整数相除,得到还是一个整数。
C 代码:
代码语言:javascript复制float x = 6 / 4;
printf("%fn", x); // 输出 1.000000
上面示例中,尽管变量x
的类型是float(浮点数)
,但是6 / 4
得到的结果是1.0
,而不是1.5
。原因就在于 C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。
如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时 C 语言就会进行浮点数除法。
C 代码:
代码语言:javascript复制float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%fn", x); // 输出 1.500000
上面示例中,6.0 / 4
表示进行浮点数除法,得到的结果就是1.5
。
小测试:
C 代码:
代码语言:javascript复制int score = 5;
score = (score / 20) * 100;
printf("%i", score);
这段代码的运行结果是什么? 如果你的运算结果为25,那么恭喜你,错了。回去好好再看一次笔记 如果你的运算结果为0,那么恭喜你,对了。继续看笔记吧。
为了得到预想的结果(运算结果为25),可以将除数20改成20.0,让整除变成浮点数除法。
C 代码:
代码语言:javascript复制score = (score / 20.0) * 100;
(4)%
求余运算符(取模运算符)
运算符%
表示求模(取余)运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
C 代码:
代码语言:javascript复制int x = 12 % 5;
printf("%i", x); // 2
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。
C 代码:
代码语言:javascript复制11 % -5 // 1
-11 % -5 // -1
-11 % 5 // -1
上面示例中,第一个运算数的正负号(11或-11)决定了结果的正负号。
(5)赋值运算的简写形式
如果变量对自身的值进行算术运算,C 语言提供了简写形式,允许将赋值运算符和算术运算符结合成一个运算符。
- =
- -=
- *=
- /=
- %=
下面是一些例子。
C 代码:
代码语言:javascript复制i = 3; // 等同于 i = i 3
i -= 8; // 等同于 i = i - 8
i *= 9; // 等同于 i = i * 9
i /= 2; // 等同于 i = i / 2
i %= 5; // 等同于 i = i % 5
2.自增、自减运算符
C 语言提供两个运算符,对变量自身进行 1和- 1的操作
- :自增运算符
- --:自减运算符
C 代码:
代码语言:javascript复制i ; // 等同于 i = i 1
i--; // 等同于 i = i - 1
1.前置自增(减)运算符
前置运算——运算符都放在变量之前: 变量名
、--变量名
,如 i
--i
。它先使变量的值增或减1,再以变化后的值参与其他运算,即先自增(或先自减)后运算。
2.后置自增(减)运算符
后置运算——运算符放在变量之后:变量名--
, 变量名
如:i
i--
。它使变量先参与其他运算,再使变量的值增或减1,即先运算后自增(或后自增)。
3.常用运算符优先级
标记 | 操作符 | 类型 | 优先级 |
---|---|---|---|
-- | 自增、自减 | 后缀 | 16 |
-- | 自增、自减 | 前缀 | 15 |
- | 正号,负号 | 单目 | 15 |
*/% | 乘、除、取余 | 双目 | 13 |
- | 加、减 | 双目 | 12 |
= | 赋值 | 双目 | 2 |
3.关系运算符
<
小于<=
小于或等于>
大于运算符>=
大于或等于==
等于!=
不等于
4.逻辑表达式
(1)逻辑运算符
运算符 | 含义 | 含义 | ||
---|---|---|---|---|
&& | 与 | 逻辑与 | ||
` | ` | 或 | 逻辑或 | |
! | 非 | 逻辑非 |
(2)逻辑表达式
C语言 | 计算机逻辑表达式的值 | 判断量的真假 |
---|---|---|
真 | 1 | 非0 |
假 | 0 | 0 |
总结
标记 | 操作符 | 类型 | 优先级 | ||
---|---|---|---|---|---|
-- | 自增、自减 | 后缀 | 16 | ||
-- | 自增、自减 | 前缀 | 15 | ||
! | 逻辑非 | 单目 | 15 | ||
- | 正号、负号 | 单目 | 15 | ||
* / % | 乘、除、取余 | 双目 | 13 | ||
- | 加、减 | 双目 | 12 | ||
< > <= >= | 关系 | 双目 | 10 | ||
== != | 逻辑与 | 双目 | 9 | ||
` | ` | 逻辑或 | 双目 | 5 | |
?: | 条件 | 三目 | 3 | ||
= | 赋值 | 双目 | 2 |