跳到主要内容

任务三 运算符与表达式

知识点​

1.什么是运算符和表达式?​

  • 运算符:表示进行某种运算的符号
  • 运算数:包含常量和变量等
  • 表达式:由运算符、运算数和括号组成,用来表示一个计算过程

表达式可以嵌套,其中运算符执行的先后顺序由它们的优先级和结合性决定。

子任务一 算术运算符​

2.C#中有哪些算术运算符?​

表3-6 C#中的算术运算符:

符号意义示例结果
+加法运算12.45f + 1527.45
-减法/取负运算4.56 - 0.164.4
*乘法运算5L * 12.45f62.25
/除法运算7 / 23
%取余数12 % 102

+ 和 - 还可以作为数据的正、负符号,如 +5、-7。

注意事项:

  1. 两个整数相除,结果还是整数(下取整,小数部分被舍弃)。7/3 结果为2,7.0/3 结果为 2.33333333333333
  2. 求余运算符 % 返回余数。7%3 结果为1,6%2 结果为0
  3. 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#中:

  • 所有单目运算符都具有右结合性
  • 赋值运算符、条件运算符也具有右结合性
  • 其他所有运算符都是左结合性