C#基本数据的类型转换

1.基本数据类型

  1.1 整型

类型存储需求bit数取值范围备注
sbyte1字节1*8-128 ~ 127有符号整数类型
byte1字节1*80 ~ 255无符号整数类型
ushort2字节2*80 ~ 65,535无符号整数类型
short2字节2*8-32,768 ~ 32,767有符号整数类型
uint4字节4*80 ~ 4,294,967,295无符号整数类型
int4字节4*8-2,147,483,648 ~ 2,147,483,647有符号整数类型
ulong8字节8*80 ~ 4,294,967,295无符号整数类型
long8字节8*8

-9,223,372,036,854,775,808

~

9,223,372,036,854,775,807

有符号整数类型

  1.2 浮点型

类型存储需求bit数取值范围备注
float4字节4*8±1.5 x 10^-45 到 ±3.4 x 10^38,有效位数约为 7 位小数单精度浮点数类型。
short8字节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数取值范围备注
char2字节2*8

1.4 布尔类型

           在 C# 中,Booleanbool 都用于表示逻辑值(真或假),但它们有一些差异:

    1.BooleanSystem.Boolean 类型的别名,属于 .NET Framework 中的数据类型。它是一个结构体(ValueType),可以存储 truefalse

    2.bool 是 C# 中的关键字,代表布尔类型。它是基本数据类型,对应 System.Boolean。使用 bool 关键字声明的变量可以存储 truefalse

类型存储需求bit数取值范围备注
bool1字节1*8true或 false
Boolean1字节1*8true或 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);
        }
    }
PS:如有错漏之处,敬请指正
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值