任务三 运算符与表达式
知识点
1.什么是运算符和表达式?
- 运算符:表示进行某种运算的符号
- 运算数:包含常量和变量等
- 表达式:由运算符、运算数和括号组成,用来表示一个计算过程
表达式可以嵌套,其中运算符执行的先后顺序由它们的优先级和结合性决定。
子任务一 算术运算符
2.C#中有哪些算术运算符?
表3-6 C#中的算术运算符:
| 符号 | 意义 | 示例 | 结果 |
|---|---|---|---|
+ | 加法运算 | 12.45f + 15 | 27.45 |
- | 减法/取负运算 | 4.56 - 0.16 | 4.4 |
* | 乘法运算 | 5L * 12.45f | 62.25 |
/ | 除法运算 | 7 / 2 | 3 |
% | 取余数 | 12 % 10 | 2 |
+和-还可以作为数据的正、负符号,如+5、-7。
注意事项:
- 两个整数相除,结果还是整数(下取整,小数部分被舍弃)。
7/3结果为2,7.0/3结果为2.33333333333333 - 求余运算符
%返回余数。7%3结果为1,6%2结果为0 - C#允许实数进行求余运算,如
7.0%2.6结果为1.8
【例3-3】判断一个整数x是不是偶数:
判断条件:x % 2 == 0
子任务二 自增(++)与自减(--)运算符
3.自增自减运算符如何使用?
自增 ++ 和自减 -- 只针对变量操作,都是单目运算符。
- 前置形式
++x/--x:先使变量值增1(或减1),然后再以变化后的值参与其他运算 - 后置形式
x++/x--:先让变量参与其他运算,然后使变量值增1(或减1)
当
++、--不与其他运算符混合使用时,++x与x++都等价于x = x+1,--x与x--都等价于x = x-1。
【例3-4】自增、自减运算符的使用:
static void Main(string[] args)
{
int a = 5, b, c;
b = a++; //后置:先赋值再增1。a=5赋给b,然后a增1变为6
c = ++a; //前置:先增1再赋值。a从6增1变为7,然后赋给c
Console.WriteLine("{0},{1},{2}", a, b, c);
Console.ReadLine();
}
运行结果:7,5,7
子任务三 字符串运算符
4.字符串运算符是什么?
字符串运算符只有一个:加号 +。它可以将字符串连接起来,变成合并的新字符串。
string s = "Hello";
s = s + ",World.";
Console.WriteLine(s); //输出:Hello,World.
子任务四 赋值运算符
5.赋值运算符如何使用?
赋值表达式:左值(变量)= 右值(表达式)。先求出右侧表达式的结果,然后将结果赋给左侧的变量。
int i;
i = 4 * (1 + 2); //i的值变为12
int j = (int)(2.8 * 4); //结果为11,而不是11.2
6.复合赋值运算符有哪些?
表3-7 C#中的复合赋值运算符:
| 符号 | 意义 | 示例 |
|---|---|---|
+= | 加赋值 | 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 |
子任务五 关系运算符
7.C#中有哪些关系运算符?
关系运算符用于比较两个运算数,结果为 true 或 false。
表3-8 C#中的关系运算符:
| 符号 | 意义 | 示例 |
|---|---|---|
< | 小于 | 2 < 3 为 true |
<= | 小于等于 | 2 <= 3 为 true |
> | 大于 | 2 > 3 为 false |
>= | 大于等于 | 2 >= 3 为 false |
== | 等于 | 2 == 3 为 false |
!= | 不等于 | 2 != 3 为 true |
子任务六 逻辑运算符
8.C#中有哪些逻辑运算符?
表3-9 C#中的逻辑运算符:
| 符号 | 意义 | 示例 |
|---|---|---|
! | 逻辑非 | !(2<3) 为 false |
&& | 逻辑与 | (3<5) && (5>4) 为 true |
|| | 逻辑或 | (3<5) || (5>4) 为 true |
!是单目运算符,&&和||是双目运算符- 优先级由高到低:
!>&&>||
运算规则:
&&:当且仅当两个运算对象的值都为true时结果为true,否则为false||:当且仅当两个运算对象的值都为false时结果为false,否则为true!:运算对象为true时结果为false,为false时结果为true
【例3-5】判断某一年份year是否闰年:
year % 4 == 0 && year % 100 != 0 || year % 400 == 0
分析:
- 条件1:能被4整除但不能被100整除(
year%4==0 && year%100!=0) - 条件2:能被400整除(
year%400==0) - 两个条件满足其一即为闰年
子任务七 条件运算符
9.条件运算符如何使用?
条件运算符是一个三目运算符,需要三个操作数。
格式: 表达式1 ? 表达式2 : 表达式3
- 先计算表达式1(必须为布尔值)
- 如果为true,整个表达式的结果为表达式2的值
- 如果为false,整个表达式的结果为表达式3的值
示例: 返回a和b中的最大值
max = a > b ? a : b;
子任务八 运算符优先级与结合性
10.运算符的优先级是怎样的?
表3-10 C#中的运算符优先级(从高到低):
| 优先级 | 运算符类别 | 运算符 | 数目 | 结合性 |
|---|---|---|---|---|
| 高 | 单目运算符 | ++ -- ! | 单目 | 右结合 ← |
| ↓ | 算术运算符 | * / % | 双目 | 左结合 → |
| ↓ | 算术运算符 | + - | 双目 | 左结合 → |
| ↓ | 移位运算符 | << >> | 双目 | 左结合 → |
| ↓ | 关系运算符 | > >= < <= | 双目 | 左结合 → |
| ↓ | 关系运算符 | == != | 双目 | 左结合 → |
| ↓ | 逻辑运算符 | && | 双目 | 左结合 → |
| ↓ | 逻辑运算符 | || | 双目 | 左结合 → |
| ↓ | 条件运算符 | ?: | 三目 | 右结合 ← |
| 低 | 赋值运算符 | = += -= *= /= %= &= |= ^= <<= >>= | 双目 | 右结合 ← |
可通过括号
()提升运算符的优先级。
11.什么是结合性?
当一个操作数两侧的运算符优先级相同时,结合性规定该操作数先与哪个运算符运算:
- 左结合(→):自左向右的结合方向
- 右结合(←):自右向左的结合方向
在C#中:
- 所有单目运算符都具有右结合性
- 赋值运算符、条件运算符也具有右结合性
- 其他所有运算符都是左结合性