4.1 隐式类型转换
隐式转换是安全的,不会丢失数据,编译器自动执行。
数值隐式转换
1 | // 小范围 → 大范围 |
转换规则
1 | byte → short → int → long → float → double |
4.2 显式类型转换(强制转换)
显式转换可能丢失数据,需要使用强制转换语法。
数值强制转换
1 | double d = 3.14; |
Convert 类
1 | string text = "123"; |
4.3 Parse 与 TryParse
Parse 方法
1 | int a = int.Parse("100"); // 100 |
TryParse 方法(推荐)
1 | // 安全解析,不会抛出异常 |
4.4 算术运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 10 + 3 |
13 |
- |
减法 | 10 - 3 |
7 |
* |
乘法 | 10 * 3 |
30 |
/ |
除法 | 10 / 3 |
3(整数除法) |
% |
取余 | 10 % 3 |
1 |
++ |
自增 | x++ 或 ++x |
x + 1 |
-- |
自减 | x-- 或 --x |
x - 1 |
除法注意
1 | // 整数除法 |
自增自减
1 | int x = 5; |
4.5 关系运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
true |
!= |
不等于 | 5 != 3 |
true |
> |
大于 | 5 > 3 |
true |
< |
小于 | 5 < 3 |
false |
>= |
大于等于 | 5 >= 5 |
true |
<= |
小于等于 | 5 <= 3 |
false |
示例
1 | int age = 20; |
4.6 逻辑运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
&& |
逻辑与 | true && false |
false |
|| |
逻辑或 | true || false |
true |
! |
逻辑非 | !true |
false |
短路求值
1 | // && 短路:第一个为 false 时不计算第二个 |
示例
1 | int age = 25; |
4.7 位运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
& |
按位与 | 5 & 3 |
1 |
| |
按位或 | 5 | 3 |
7 |
^ |
按位异或 | 5 ^ 3 |
6 |
~ |
按位取反 | ~5 |
-6 |
<< |
左移 | 5 << 1 |
10 |
>> |
右移 | 5 >> 1 |
2 |
示例
1 | int a = 5; // 0000 0101 |
4.8 赋值运算符
| 运算符 | 示例 | 等价于 |
|---|---|---|
= |
x = 10 |
x = 10 |
+= |
x += 5 |
x = x + 5 |
-= |
x -= 5 |
x = x - 5 |
*= |
x *= 5 |
x = x * 5 |
/= |
x /= 5 |
x = x / 5 |
%= |
x %= 5 |
x = x % 5 |
&= |
x &= 5 |
x = x & 5 |
|= |
x |= 5 |
x = x | 5 |
示例
1 | int x = 10; |
4.9 其他运算符
三元运算符
1 | int age = 20; |
null 相关运算符
1 | string? name = null; |
is 与 as
1 | object obj = "Hello"; |
sizeof 与 typeof
1 | Console.WriteLine(sizeof(int)); // 4 |
4.10 运算符优先级
从高到低:
| 优先级 | 运算符 |
|---|---|
| 最高 | ++ -- () . |
* / % |
|
+ - |
|
< > <= >= |
|
== != |
|
&& |
|
| 最低 | || |
使用括号明确优先级
1 | // 不推荐 |
4.11 本章小结
- 隐式转换安全,显式转换可能丢失数据
Convert类和Parse/TryParse用于字符串转换- 算术运算符:
+-*/%++-- - 关系运算符返回布尔值
- 逻辑运算符:
&&\|\|!,支持短路求值 - 三元运算符:
条件 ? 值 1 : 值 2 - 使用括号明确运算优先级
练习题
- 将字符串
"123.45"转换为 double 并加 100 - 使用三元运算符判断奇偶数
- 使用
TryParse安全解析用户输入 - 以下代码输出什么?
1
2
3int x = 5;
int y = x++ + ++x;
Console.WriteLine(y);