C# 数据类型#
C# 的数据类型分为两大类:值类型(value type)与引用类型(reference type)。
| 类别 | 存储位置 | 示例 |
|---|---|---|
| 值类型 | 栈(stack) | int、double、char、bool、struct |
| 引用类型 | 堆(heap),栈中存地址 | string、class、数组 |
值类型#
1. 整数类型#
| 类型 | 大小 | 取值范围 |
|---|---|---|
byte |
8 位 | 0 ~ 255 |
sbyte |
8 位 | -128 ~ 127 |
short |
16 位 | -32768 ~ 32767 |
ushort |
16 位 | 0 ~ 65535 |
int |
32 位 | -2.1亿 ~ 2.1亿 |
uint |
32 位 | 0 ~ 42.9亿 |
long |
64 位 | 更大范围 |
常用:int、byte
2. 浮点类型#
| 类型 | 大小 | 精度 | 适用场景 |
|---|---|---|---|
float |
32 位 | 约 7 位 | 一般浮点运算 |
double |
64 位 | 约 15 位 | 默认浮点类型 |
decimal |
128 位 | 约 28 位 | 涉及金钱的计算 |
精度比较:float < double < decimal
使用后缀:
经验法则:
- 默认使用
double - 涉及钱的计算必须使用
decimal
3. 字符类型#
char:单个字符,使用单引号包裹,如'a'、'牛'
4. 布尔类型#
bool:只有两个值true和false- 使用:
bool a = true;
数据类型转换#
1. 隐式转换#
取值范围小、精度低的类型可以直接向大的、高的类型自动转换,无需强制转换。
转换方向:
有符号流:
无符号流:
2. 强制转换(显式转换)#
取值范围大、精度高的类型向小的、低的类型转换,需要手动指定。
显式转换可能丢失精度(如
(int)3.9结果为 3),需谨慎使用。
3. 字符串转值类型#
string 是引用类型,将字符串转换为值类型可使用 FCL(框架类库)提供的方法:
string str = "123";
int num = int.Parse(str); // 转换为 int
int num2 = Convert.ToInt32(str); // 另一种转换方式
注意:
int.Parse()转换失败会抛出FormatException,可使用int.TryParse()安全转换。
练习#
- 定义一个
int类型的变量,转换为char类型并输出 - 定义一个
double类型的变量,转换为float类型并输出 - 定义一个字符串类型的变量,里面是纯数字,然后转换为
int类型 - 定义一个字符串类型的变量,里面不是纯数字,然后转换为
int类型,会发生什么?