算数运算符是什么
算数运算符用于执行算数计算。数学运算符一共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; // 3*2=6 → 5+6=11
int withParens = (5 + 3) * 2; // 5+3=8 → 8*2=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(分钟)
答案(自增自减)
C) 12 x++ 返回 5(后置),x 变为 6 → ++x 先自增为 7 → 5 + 7 = 12
A) 3 5 先输出 a++(输出 3,a 变为 4)→ ++a 先自增为 5 → 输出 5
B) 28 b-- 返回 10(b 变 9)→ --b 先自减为 8 → 10 + 8 = 18 → b += 18(9+18=27)❌ 修正:表达式计算顺序:b--(值10,b=9)→ --b(b=8,值8)→ 10+8=18 → b = 9 + 18 = 27 答案应为 A) 27,题目选项有误
B) 25 y-- 返回 8(y 变 7)→ 8*2=16 → ++y 先自增为 8 → 16 + 8 = 24 ❌ 修正:y-- 后 y=7 → ++y 使 y=8 → 16 + 8 = 24 → z=24 答案应为 A) 24,题目选项有误
B) 7 i++ 返回 1(i 变 2)→ ++i 先自增为 3 → i 当前值 3 → 1 + 3 + 3 = 7
A) 15 --m 先自减为 5 → m++ 返回 5(后自增为 6)→ 5*2=10 → 5 + 10 = 15
A) p=7, q=14 p++ 返回 7(p 变 8)→ --p 先自减为 7 → 7 + 7 = 14 → q=14
A) 4 5 6 输出 x++(输出 4,x 变 5)→ 输出 x(5)→ ++x 自增为 6 并输出
B) 12 a++ 返回 2(a 变 3)→ ++b 自增为 4 → a=3 → b-- 返回 4(b 变 3)→ 2+4+3+4=13 ❌ 修正:a++=2(a=3)→ ++b=4(b=4)→ a=3 → b--=4(b=3)→ 2+4+3+4=13 → 答案应为 C) 13
B) 6 i=0:counter=0+0=0 → i++ 变1 → 循环步进 i++ 变2 i=2:counter=0+2=2 → i++ 变3 → 循环步进 i++ 变4 i=4:counter=2+4=6 → i++ 变5 → 结束
B) 2 num-- 返回 9(num 变 8)→ --num 先自减为 7 → 9 - 7 = 2
C) 24 ++x→x=6 → y-- 返回 3(y 变 2)→ 6*3=18 → x++ 返回 6(x 变 7)→ --y 自减为 1 → 18 + 6 - 1 = 23 ❌ 修正:++x=6 → y--=3(y=2)→ 6*3=18 → x++=6(x=7)→ --y=1(y=1)→ 18+6-1=23 → 答案应为 B) 23
B) a=21, b=21 a = b++(a=20, b=21)→ b = ++a(a 先自增为 21 → b=21)
C) 4 i++ 返回 0(i=1)→ ++i 自增为 2 → 返回 2 → i-- 返回 2(i=1)→ --i 自减为 0 → 返回 0 → 0+2+2+0=4
C) 43 value-- 返回 15(value=14)→ --value 自减为 13 → 13*2=26 → 15+26=41 ❌ 修正:表达式为 value-- + (--value * 2) → value--=15(value=14)→ --value=13(value=13)→ 15 + (13*2)=41 → 答案应为 A) 41
A) 8 x++ 返回 1(x 变 2)→ ++x 自增为 3 → x=3 → 1+3+3=7 → x +=7(2+7=9)❌ 修正:原始 x=1 → 表达式:x++=1(x=2)→ ++x=3(x=3)→ 当前 x=3 → 1+3+3=7 → x = 1 + 7 = 8(因为 x += ... 等价于 x = x + ...,此时 x 是原始值 1) 最终 x=8
D) 运行时错误(除零异常) a++ 返回 5(a=6)→ --b 自减为 2 → 5*2=10 → a/b = 6/2=3 → 10+3=13 ❌ 修正:b 自减后为 2,不会除零 → 正确答案为 B) 12? 重新计算:--b 使 b=2 → a/b = 6/2=3 → 5*2=10 → 10+3=13 → 答案应为 C) 13
B) 10 循环过程: count=0:count++<4 成立 → total=0+1=1(count 自增为 1) count=1:count++<4 成立 → total=1+2=3(count=2) count=2:count++<4 成立 → total=3+3=6(count=3) count=3:count++<4 成立 → total=6+4=10(count=4) count=4:count++<4 不成立 → 结束
A) p=12, q=3 第一行:p++ 返回 8(p 变 9)→ --q 自减为 3 → q = 8 - 3 = 5 ❌ 修正:p++=8(p=9)→ --q=3(q=3)→ q = 8 - 3 = 5 → 第二行:q-- 返回 5(q 变 4)→ p = 5 * 2 = 10 最终 p=10, q=4(无匹配选项)
A) 2 3 3 4 x 输出 2 → ++x 自增为 3 并输出 → x++ 输出 3(后自增为 4)→ x 输出 4
21.a=6, b=7 a++ 先返回原值5再自增 → 5+2=7 → 后a自增为6 22.x=30 初始10 → 10+5=15 → 15*2=30 23.i=3, j=8, k=5
++i:i先变4 → 4*2=8(j=8)
i--:先用i=4 → 4+1=5(k=5) → 后i自减为3 24.a=4, b=10, c=20`**
a--:先用a=5 → 5+4=9(b=9) → a自减为4
++b:b先增为10 → 10*2=20(c=20)
运算符是什么
首先运算符是一种符号
运算符负责执行数据运算操作。
运算符的分类
运算符可以执行六大运算:数 赋 逻 关 件 位
算数运算:执行算数运算(加减乘除取模)
赋值运算:执行赋值运算(=)
逻辑运算:执行逻辑运算(或、与、非)
关系运算:执行关系运算(等于、大于、小于等等)
条件运算: 执行条件运算
位运算:执行位运算
赋值运算符的用途
赋值运算符用于给变量赋值或修改变量的值。
示例
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;