概述
算数运算符是什么
算数运算符用于执行算数计算。数学运算符一共9个,分为两类:
算数运算符:加、减、乘、除、取模
自增自减运算符:前置自增、后置自增、前置自减、后置自减
算数运算符
加法运算符 (+)
用于数值相加(注意数据类型问题)
也可用于字符串连接(但这不是数学运算)
int a = 5 + 3; //8 int a = 5.0 + 3; //报错 double a = 5.0 + 3; //8.0 double a = 5 + 3; //8.0 目标类型double能完整容纳源类型值int且不损失精度时数据类型转换自动发生 double b = 4.2 + 2.8; //7.0 string s = "Hello" + " World"; // "Hello World"(非数学运算)
数值的精度
int :整型最低 10/ 3 = 3
float: 单精度浮点数 10/3 = 3.3333333
double:双精度浮点数 10/3 = 3.3333333333333333
decimal: 高精度小数 10/3 = 3.33333333333333333333333333
减法运算符 (-)
用于数值相减
也可用作一元运算符表示负数
一元运算符:指操作一个值的运算符。
int a = 10 - 4; // 结果:6 double b = -5.5; // 负数值 int c = -(-10); // 结果:10(双重否定)
乘法运算符 (*)
用于数值相乘
int a = 6 * 7; // 结果:42 double b = 2.5 * 4; // 结果:10.0
除法运算符 (/)
整数除法:结果截断小数部分
浮点除法:保留小数部分
int a = 10 / 3; // 结果:3(整数除法) float f = 10 / 3; //3.0f float f = 10.0 / 3; //报错 float f = 10.0f / 3; //3.3333333f double d = 10.0 / 3; //3.3333333333333335d decimal m = 10m / 3m; //3.3333333333333333333333333333m //混合运算的类型提升 int a = 2 * 1.5; int a = 3 / 2; double a = 3 / 2; //期望1.5,实际1(纯整数运算无提升) double a = 3.0 / 2; //期望1.5:使用混合运算时,可以得到1.5(整数自动提升为小数) double a = (double)3 / 2; //期望1.5: 先转double,可以得到1.5
取模运算符 (%)
返回除法后的余数
用途:判断奇偶性、循环索引等
int remainder = 10 % 3; // 结果:1 bool isEven = (15 % 2) == 0; // 判断偶数:false
自增/自减运算符
前置自增 (++x)
先增加,后使用值
//++:表示自增运算符(自己+1) int n = 5; //++n; n++; Console.WriteLine(n); //--:表示自减运算符(自己-1) int n1 = 5; --n1; Console.WriteLine(n1); int a = 5; int b = ++a; // Console.WriteLine(a); Console.WriteLine(b);
后置自增 (x++)
先使用值,后增加
int a = 5; int b = a++; //
前置自减 (--x)
先减少,后使用值
int a = 5; int b = --a; //
后置自减 (x--)
先使用值,后减少
int a = 5; int b = a--; //
运算符优先级
从高到低:
括号 ()
自增/自减(前缀)
乘法 *、除法 /、取模 %
加法 +、减法 -
自增/自减(后缀)
赋值运算符
int result = 5 + 3 * 2; // 32=6 → 5+6=11 int withParens = (5 + 3) * 2; // 5+3=8 → 82=16
总结
C# 9个数学运算符概览
运算符
名称
示例
结果 (示例)
注意事项
加法
5 + 3
8
也用于字符串连接
减法
10 - 4
6
可作一元负号
乘法
6 * 7
42
/
除法
10 / 3 (int)
3
整数除法截断
10.0 / 3
≈3.333
浮点除法
%
取模
10 % 3
1
余数符号同被除数
++
自增
int a=5; a++;
a=6
前置/后置影响计算顺序
--
自减
int b=5; --b;
b=4
前置/后置影响计算顺序
练习(算数运算符5道)
1.交换变量值(不用临时变量)
2.判断奇偶性
3.result 的值是多少?
int result = 8 + 15 % 4 * 2;
4.x 的最终值是多少?
int x = 20;
x /= 4;
x += 3;
x *= 2;
5.将125分钟转换成小时(hours)和分钟(minutes)。
练习(自增自减24道)
1.执行以下代码后,x 的值是多少?
int x = 5;
x = x++ + ++x;
1. x = 5
2. x = 5
3. x = 6
A) 10 B) 11 C) 12 D) 13
2.代码输出结果是什么?
int a = 3;
Console.Write(a++ + " " + ++a);
A) 3 5 B) 4 4 C) 3 4 D) 4 5
3.执行后 b 的值是多少?
int b = 10;
b += b-- + --b;
A) 27 B) 28 C) 29 D) 30
4.最终 z 的值是多少?
int y = 8;
int z = y-- * 2 + ++y;
A) 24 B) 25 C) 26 D) 27
5.代码输出结果是什么?
int i = 1;
Console.Write(i++ + ++i + i);
A) 6 B) 7 C) 8 D) 9
6.执行后 m 的值是多少?
int m = 6;
m = --m + m++ * 2;
A) 15 B) 16 C) 17 D) 18
7.最终 p 和 q 的值是多少?
int p = 7;
int q = p++ + --p;
A) p=7, q=14 B) p=7, q=15 C) p=8, q=14 D) p=8, q=15
8.代码输出结果是什么?
int x = 4;
Console.Write($"{x++} {x} {++x}");
A) 4 5 6 B) 4 5 5 C) 5 5 6 D) 4 4 5
9.执行后 sum 的值是多少?
int a = 2, b = 3;
int sum = a++ + ++b + a + b--;
A) 11 B) 12 C) 13 D) 14
10.最终 counter 的值是多少?
int counter = 0;
for (int i = 0; i < 5; i++) {
counter += i++;
}
A) 4 B) 6 C) 10 D) 15
11.代码输出结果是什么?
int num = 9;
Console.Write(num-- - --num);
A) 1 B) 2 C) 3 D) 4
12.执行后 result 的值是多少?
int x = 5, y = 3;
int result = ++x * y-- + x++ - --y;
A) 22 B) 23 C) 24 D) 25
13.最终 a 和 b 的值是多少?
int a = 10, b = 20;
a = b++;
b = ++a;
A) a=20, b=21 B) a=21, b=21 C) a=20, b=20 D) a=21, b=20
14.代码输出结果是什么?
int i = 0;
Console.Write(i++ + ++i + i-- + --i);
A) 2 B) 3 C) 4 D) 5
15.执行后 value 的值是多少?
int value = 15;
value = value-- + --value * 2;
A) 41 B) 42 C) 43 D) 44
16.最终 x 的值是多少?
int x = 1;
x += x++ + ++x + x;
A) 8 B) 9 C) 10 D) 11
17.代码输出结果是什么?
int a = 5, b = 3;
Console.Write(a++ * --b + a / b);
A) 11 B) 12 C) 13 D) 运行时错误(除零异常)
18.执行后 total 的值是多少?
int count = 0;
int total = 0;
while (count++ < 4) {
total += count;
}
A) 6 B) 10 C) 15 D) 21
19.最终 p 和 q 的值是多少?
int p = 8, q = 4;
q = p++ - --q;
p = q-- * 2;
A) p=12, q=3 B) p=14, q=4 C) p=16, q=5 D) p=18, q=6
20.代码输出结果是什么?
int x = 2;
Console.Write($"{x} {++x} {x++} {x}");
A) 2 3 3 4 B) 2 3 4 4 C) 3 3 3 4 D) 2 3 3 3
21.a 和 b 的值分别是多少?
int a = 5;
int b = a++ + 2;
22.x 的最终值是多少?
int x = 10;
x += 5;
x *= 2;
23.i, j, k 的值分别是多少?
int i = 3;
int j = ++i * 2;
int k = i-- + 1;
24.a, b, c 的最终值分别是多少?
int a = 5;
int b = a-- + 4;
int c = ++b * 2;
答案(算数运算符)
1.答案
int a = 5, b = 10; a = a + b; // a=15 b = a - b; // b=5 a = a - b; // a=10
2.答案
bool isEven = (number % 2) == 0;
3.result=10 15%4=3 → 3*2=6 → 8+6=10
4.x=14** 初始20 → 20/4=5→5+3=8→8*2=16` 注意:整数除法
5.hours=2, minutes=5 125/60=2(小时) → 125%60=5(分钟)
答案(自增自减)
运算符是什么
首先运算符是一种符号
运算符负责执行数据运算操作。
运算符的分类
运算符可以执行六大运算:数 赋 逻 关 件 位
算数运算:执行算数运算(加减乘除取模)
赋值运算:执行赋值运算(=)
逻辑运算:执行逻辑运算(或、与、非)
关系运算:执行关系运算(等于、大于、小于等等)
条件运算: 执行条件运算
位运算:执行位运算
赋值运算符的用途
赋值运算符用于给变量赋值或修改变量的值。
示例
int num = 10; string name = "张三"; bool isOn = true;
赋值运算符的分类
C# 提供了两种赋值运算符:
基本赋值运算符
复合赋值运算符
基本赋值运算符(=)
功能:将右侧的值赋给左侧的变量。 语法:
变量 = 表达式;
示例:
int x = 10; // 把 10 赋给 x string name = "Alice"; // 把字符串赋给 name
复合赋值运算符
复合赋值运算符用于先进行运算,再赋值,适用于算术、位运算等操作。
算术复合赋值运算符
运算符
示例
等价形式
说明
+=
a += 5 | a = a + 5
加法赋值
-=
a -= b
a = a - b
减法赋值
*=
a *= b
a = a * b
乘法赋值
/=
a /= b
a = a / b
除法赋值
%=
a %= b
a = a % b
取余赋值
示例:
int a = 10; a += 5; // a = 15 a *= 2; // a = 30 a /= 3; // a = 10 a %= 3; // a = 1(10 ÷ 3 余 1)
字符串拼接赋值(+=)
+= 也可用于字符串拼接:
string message = "Hello"; message += " World!"; // message = "Hello World!"
多变量赋值
C# 允许同时给多个变量赋值:
int x, y, z; x = y = z = 10; // x, y, z 都变成 10
赋值运算符的结合性
int n = 1+2+3+4+5+6; 向左结合 向右结合 1+2 +3
- 4
复合赋值运算符的优点
赋值赋值运算符的优点:“只计算一次左值”。
左操作数 a 在整个运算过程中仅被求值一次
而不是像展开形式 a = a + b 那样计算两次。
int a = 1; a += 5;//等价于:a = a + 5
总结
运算符
用途
示例
=
基本赋值
int x = 10;
+=
加法赋值 / 字符串拼接
x += 5;
-=
减法赋值
x -= 3;
*=
乘法赋值
x *= 2;
/=
除法赋值
x /= 4;
%=
取模赋值
x %= 3;