第三阶段:基本运算符

QcrTiMo 发布于 9 天前 8 次阅读


上个阶段我们学习了如何定义声明变量并使用变量,但是在游戏中我们需要攻击敌人,敌人的血量会下降;我们使用血包,我们的血量会上升。这里我们需要操作这些数据,这就用到变量之间的运算。

算术运算符

这些运算符用来执行基本的数学计算,就像我们小学学的加减乘除一样。

  • + (加法): 计算两个数值的和。
    • 特殊用法: 当 + 用于连接字符串 (string) 时,它执行的是字符串拼接,而不是数学加法。
  • - (减法): 计算两个数值的差。
  • * (乘法): 计算两个数值的积。
  • / (除法): 计算两个数值的商。
    • 重要注意点 (整数除法): 如果 / 两边的操作数都是整数 (int),那么结果也将是整数,小数部分会被直接舍弃 (不是四舍五入!)。
    • 如果想得到带小数的结果,至少需要将其中一个操作数转换为浮点类型 (如 double 或 float)。
  • % (取模/求余数): 计算两个整数相除后的余数。这个运算符非常有用,比如判断一个数是奇数还是偶数 (偶数 % 2 结果为 0)。

示例代码:

using System;
int a = 10;
int b = 3;
double c = 10.0;
double d = 3.0;
// 加法
int sum = a + b; // sum 会是 13
Console.WriteLine($"{a} + {b} = {sum}");
// 减法
int difference = a - b; // difference 会是 7
Console.WriteLine($"{a} - {b} = {difference}");
// 乘法
int product = a * b; // product 会是 30
Console.WriteLine($"{a} * {b} = {product}");
// --- 除法 (重点看!) ---
int intDivision = a / b; // a 和 b 都是 int, 结果是整数 3 (小数部分被舍弃)
Console.WriteLine($"{a} / {b} (整数除法) = {intDivision}");
double doubleDivision1 = c / d; // c 和 d 都是 double, 结果是 3.333...
Console.WriteLine($"{c} / {d} (浮点除法) = {doubleDivision1}");
double doubleDivision2 = (double)a / b; // 将 a 强制转换为 double 再除
Console.WriteLine($"(double){a} / {b} = {doubleDivision2}");
double doubleDivision3 = a / d; // a 是 int, d 是 double, 结果会自动提升为 double
Console.WriteLine($"{a} / {d} = {doubleDivision3}");
// 取模 (求余数)
int remainder = a % b; // 10 除以 3 商 3 余 1, remainder 会是 1
Console.WriteLine($"{a} % {b} = {remainder}");
int evenCheck = 10 % 2; // 10 % 2 = 0 (偶数)
int oddCheck = 9 % 2;  // 9 % 2 = 1 (奇数)
Console.WriteLine($"10 % 2 = {evenCheck}");
Console.WriteLine($"9 % 2 = {oddCheck}");
// --- 字符串拼接 ---
string firstName = "张";
string lastName = "三";
string fullName = firstName + lastName; // fullName 会是 "张三"
Console.WriteLine("姓名:" + fullName);
string message = "年龄:" + 18; // 数字 18 会自动转换为字符串 "18" 进行拼接
Console.WriteLine(message); // 输出 "年龄:18"

为了演示方便变量名随便起了abcd,实际写代码一定要遵循命名规则。

该你操作了: 在你的 Program.cs 里尝试这些算术运算,特别是不同类型的除法,看看结果是否和你预期的一样。

赋值运算符

我们已经用过最基本的赋值运算符 = 了,它的作用是把右边的值赋给左边的变量。

C# 还提供了一些复合赋值运算符,它们是算术运算符和 = 的结合,可以简化代码。

  • = (简单赋值): x = y; // 把 y 的值赋给 x
  • += (加法赋值): x += y; // 相当于 x = x + y;
  • -= (减法赋值): x -= y; // 相当于 x = x - y;
  • *= (乘法赋值): x *= y; // 相当于 x = x * y;
  • /= (除法赋值): x /= y; // 相当于 x = x / y;
  • %= (取模赋值): x %= y; // 相当于 x = x % y;

示例代码:

int score = 100;
Console.WriteLine($"初始分数:{score}");
score += 10; // score = score + 10; score 现在是 110
Console.WriteLine($"加 10 分后:{score}");
score -= 20; // score = score - 20; score 现在是 90
Console.WriteLine($"减 20 分后:{score}");
score *= 2;  // score = score * 2; score 现在是 180
Console.WriteLine($"乘以 2 后:{score}");
score /= 3;  // score = score / 3; score 现在是 60 (整数除法)
Console.WriteLine($"除以 3 后:{score}");
int items = 25;
int containerSize = 10;
items %= containerSize; // items = items % containerSize; items 现在是 5 (25 除以 10 余 5)
Console.WriteLine($"装箱后剩余物品数量:{items}");

复合赋值运算符写起来更简洁,也更常用。

递增和递减运算符

这两个运算符非常常用,尤其是在循环中,它们的作用是将变量的值加 1 或减 1。

  • ++ (自增): 将变量的值加 1。
  • -- (自减): 将变量的值减 1。

它们有两种使用方式:前缀  和 后缀 ,这会影响它们在表达式中的返回值。

  • 前缀 (++x, --x): 将变量 x 的值加 1 (或减 1),然后返回修改后的 x 的值。
  • 后缀 (x++, x--): 返回变量 x 原始的值,然后再将 x 的值加 1 (或减 1)。

示例代码(注意前缀和后缀):

int count = 5;
// --- 后缀递增 (Postfix Increment) ---
Console.WriteLine($"后缀递增:");
Console.WriteLine($"原始 count: {count}"); // 输出 5
int result1 = count++; // 1. 先返回 count 的原始值 5 给 result1; 2. 然后 count 自身加 1 变成 6
Console.WriteLine($"result1 (count++): {result1}"); // 输出 5
Console.WriteLine($"操作后 count: {count}"); // 输出 6
Console.WriteLine("----------");
// --- 前缀递增 (Prefix Increment) ---
count = 5; // 重置 count
Console.WriteLine($"前缀递增:");
Console.WriteLine($"原始 count: {count}"); // 输出 5
int result2 = ++count; // 1. 先将 count 自身加 1 变成 6; 2. 然后返回修改后的值 6 给 result2
Console.WriteLine($"result2 (++count): {result2}"); // 输出 6
Console.WriteLine($"操作后 count: {count}"); // 输出 6
Console.WriteLine("----------");
// --- 后缀递减 (Postfix Decrement) ---
count = 5; // 重置 count
Console.WriteLine($"后缀递减:");
Console.WriteLine($"原始 count: {count}"); // 输出 5
int result3 = count--; // 1. 先返回 count 的原始值 5 给 result3; 2. 然后 count 自身减 1 变成 4
Console.WriteLine($"result3 (count--): {result3}"); // 输出 5
Console.WriteLine($"操作后 count: {count}"); // 输出 4
Console.WriteLine("----------");
// --- 前缀递减 (Prefix Decrement) ---
count = 5; // 重置 count
Console.WriteLine($"前缀递减:");
Console.WriteLine($"原始 count: {count}"); // 输出 5
int result4 = --count; // 1. 先将 count 自身减 1 变成 4; 2. 然后返回修改后的值 4 给 result4
Console.WriteLine($"result4 (--count): {result4}"); // 输出 4
Console.WriteLine($"操作后 count: {count}"); // 输出 4
// --- 单独使用时,前缀后缀效果一样 ---
int num = 10;
num++; // num 变成 11
Console.WriteLine($"单独使用 num++ 后: {num}");
++num; // num 变成 12
Console.WriteLine($"单独使用 ++num 后: {num}");

如果你只是想简单地把变量加 1 或减 1,前缀和后缀效果一样。但如果你同时要把递增/递减后的值赋给另一个变量,或者在更复杂的表达式中使用,那么前缀和后缀的区别就很重要了!

运算符优先级

当一个表达式中包含多个运算符时,谁先计算,谁后计算?这就是运算符的优先级。这和我们数学里的 "先乘除后加减" 规则类似。

C# 定义了详细的运算符优先级规则。这里我们先了解几个基本的:

  1. 递增/递减 (++, --) 优先级通常很高。
  2. 乘法、除法、取模 (*, /, %) 优先级高于 加法、减法 (+, -)
  3. 赋值运算符 (=, +=, -= 等) 优先级通常较低。

用括号改变优先级:
就像数学里一样,你可以使用圆括号 () 来强制改变运算顺序。括号里的表达式会最先计算。

示例代码:

int resultA = 5 + 3 * 2; // 乘法优先,相当于 5 + (3 * 2) = 5 + 6 = 11
Console.WriteLine($"5 + 3 * 2 = {resultA}");
int resultB = (5 + 3) * 2; // 括号优先,相当于 (8) * 2 = 16
Console.WriteLine($"(5 + 3) * 2 = {resultB}");
int x = 10, y = 5, z = 2;
int resultC = x / y * z; // 除法和乘法优先级相同,通常从左到右计算 (10 / 5) * 2 = 2 * 2 = 4
Console.WriteLine($"x / y * z = {resultC}");

动手实践:综合运用

学了那么多,该自己尝试一下了!

尝试编写一些代码来综合运用今天学习的运算符:

  • 计算两个数的和、差、积、商、余数。
  • 使用复合赋值运算符来更新变量的值。
  • 练习前缀和后缀自增/自减,观察它们在赋值时的区别。
  • 使用括号来控制计算顺序。

例如,你可以尝试计算:

  • 华氏度转摄氏度:celsius = (fahrenheit - 32) * 5 / 9; (注意整数除法问题,可能需要用 5.0 或 9.0)
  • 计算圆的面积和周长:area = Pi * radius * radius; circumference = 2 * Pi * radius; (你需要先定义 Pi 和 radius)
斯哈斯哈斯哈,佳代子啊啊啊啊啊啊ᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗ
最后更新于 2025-05-19