1.基本数据类型
1.1 整型
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
sbyte | 1字节 | 1*8 | -128 ~ 127 | 有符号整数类型 |
byte | 1字节 | 1*8 | 0 ~ 255 | 无符号整数类型 |
ushort | 2字节 | 2*8 | 0 ~ 65,535 | 无符号整数类型 |
short | 2字节 | 2*8 | -32,768 ~ 32,767 | 有符号整数类型 |
uint | 4字节 | 4*8 | 0 ~ 4,294,967,295 | 无符号整数类型 |
int | 4字节 | 4*8 | -2,147,483,648 ~ 2,147,483,647 | 有符号整数类型 |
ulong | 8字节 | 8*8 | 0 ~ 4,294,967,295 | 无符号整数类型 |
long | 8字节 | 8*8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 有符号整数类型 |
1.2 浮点型
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
float | 4字节 | 4*8 | ±1.5 x 10^-45 到 ±3.4 x 10^38,有效位数约为 7 位小数 | 单精度浮点数类型。 |
short | 8字节 | 8*8 | ±5.0 x 10^-324 到 ±1.7 x 10^308,有效位数约为 15 位小数 | 双精度浮点数类型。 |
1.3 char类型
在 C# 中,char
类型用于表示 Unicode 字符,其取值范围是从 U+0000 到 U+FFFF(包括 0 到 65535 之间的整数)。
这意味着 char
类型可以表示任意字符,包括字母、数字、特殊符号以及其他语言的字符。Unicode 是一种国际标准编码,涵盖了世界上几乎所有的字符集。
需要注意的是,C# 中的 char
类型是无符号的,因此它不能表示负数或负值。它只能表示正数范围内的 Unicode 字符。
虽然 char
类型可以进行算术运算,但它被视为整数类型。对 char
类型进行运算时,会将其转换为相应的整数值进行计算。
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
char | 2字节 | 2*8 |
1.4 布尔类型
在 C# 中,Boolean
和 bool
都用于表示逻辑值(真或假),但它们有一些差异:
1.Boolean
是 System.Boolean
类型的别名,属于 .NET Framework 中的数据类型。它是一个结构体(ValueType),可以存储 true
或 false
。
2.bool
是 C# 中的关键字,代表布尔类型。它是基本数据类型,对应 System.Boolean
。使用 bool
关键字声明的变量可以存储 true
或 false
。
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
bool | 1字节 | 1*8 | true或 false | |
Boolean | 1字节 | 1*8 | true或 false |
2.C#基本数据的类型转换
C# 支持自动类型转换(隐式转换)和强制类型转换(显式转换)。
2.1 自动类型转换(隐式转换)
自动类型转换是指将一个数据类型的值直接赋给另一个兼容的数据类型,而不需要显式地进行类型转换。这种转换通常发生在两个类型之间存在从小范围到大范围、从低精度到高精度的关系时。例如,将一个 int
类型的变量赋值给一个 long
类型的变量,或者将一个 float
类型的值赋给一个 double
类型的变量。
C#支持自动类型转换的类型如下所示,左边的数值类型可以自动类型转换成箭头右边的数值类型 : byte ->short->int->long->float->double
代码示例:
public class Program
{
static void Main(string[] args)
{
byte byteNum = 123;
short shortNum = byteNum;//自动将byte转换为short 输出:123
int intNum = shortNum;//自动将short转换为int 输出:123
long longNum = intNum;//自动将int转换为long 输出:123
float floatNum = longNum;//自动将long转换为float 输出:123
double doubleNum = floatNum;//自动将float转换为double 输出:123
}
}
2.2 强制类型转换(显式转换)
当目标类型的取值范围小于源类型时,或者需要将一种类型转换为另一种类型时,需要使用显式强制类型转换。
强制类型转换使用括号将要转换的值括起来,并指定目标类型。
进行强制类型转换可能导致数据丢失或溢出,因此需要谨慎使用。
以下是一些基础数据类型的强制类型转换示例:
1.从较小的整数类型向较大的整数类型进行转换:
public class Program
{
static void Main(string[] args)
{
int smallerInt = 10;
long largerLong = (long)smallerInt; // 强制将 int 转换为 long
Console.WriteLine(largerLong);// 输出:10
}
}
1.从浮点类型向整数类型进行转换(注意小数部分会被截断):
public class Program
{
static void Main(string[] args)
{
double floatingPoint = 3.14;
int integer = (int)floatingPoint; // 强制将 double 转换为 int
Console.WriteLine(integer);// 输出:3
}
}
3.从较大的整数类型向较小的整数类型进行转换(可能导致溢出):
public class Program
{
static void Main(string[] args)
{
long largerLong = 9000000000L;
int smallerInt = (int)largerLong; // 强制将 long 转换为 int
Console.WriteLine(smallerInt);// 输出:410065408
}
}
2.3 表达式类型的自动提升
C#定义了如下的自动提升规则:
1)所有的byte类型 ,short类型将被提升到int类型。
2)整个算术表达式的数据类型自动提升到表达式中最高等级操作数同样的类型
public class Program
{
static void Main(string[] args)
{
//下面2行代码出错,shortValue类型参与运算,类型自动提升到int
// 将一个int类型的值赋给一个short类型的值,编译不过
short shortValue = 5;
shortValue = shortValue + 2;
//下面4行代码正确,3个不同类型的值参与运算,类型提升到最高的类型//double,int,byte中,double类型最高,所以结果double类型
byte byteValue = 4;
int intValue = 1;
double doubleValue = 2.33;
double result = byteValue + intValue + doubleValue;
Console.WriteLine(byteValue + intValue + doubleValue);
//下面代码的类型同样为double
Console.WriteLine(doubleValue / intValue);
}
}