05-C# 类型转换

#自学记录#

高能知识点很多

//类型转换
//什么是类型转换
//类型转换 就是不同变量类型之间的相互转换
//隐式转换的基本规则-->不同类型之间自动转换
//它主要遵循的规则就是大范围装小范围

//一、隐式转换
/*    知识点
    1、相同大类型之后的转换
    
    //有符号   long——>int——>short——>sbyte
    sbyte int short long
    long l = 1;
    int i = 1;
    short s = 1;
    sbyte sb = 1;
    //隐式转换 int隐式转换成了long
    //可以用大范围装小范围的类型 (隐式转换)系统自动的帮我们转换了
    l = i;
    //不能够用小范围的类型去装载大范围的类型
    i = l;   这样会报错 因为long范围比int大 上面提到的规则大装小
    
    //无符号
    byte  uint ushort  ulong
    跟上述 有符号的一模一样的道理
    
    //浮点数   double——>float
    float  double  decimal
    decimal de = 1.1m;
    double do = 1.1;
    float fl = 1.1f;
    //decimal 这个类型是无法用隐式转换的形式去 存储 double和float
    de = do;  会报错
    de = fl;  会报错
    //float是可以隐式转换成double
    do = fl;   没问题
        
    //特殊类型
    bool  char  string     
    //它们是独立的 不存在 隐式转换
    
    2、不同大类型之间的转换    
    无符号    不能装负数的
    byte by2 = 1;
    uint ui = 1;
    ushort us = 1;
    ulong ul = 1;
    
    有符号
    sbyte sb2 = 2;
    int i2 = 2;
    short sh2 = 2;
    long l2 = 2;
    
    无符号装有符号 (会报错)
    有符号的变量是不能够 隐式转换成 无符号的
    ul = i2;
    ui = sh2;
    有符号装无符号
    有符号变量 是可以 装 无符号变量的 前提是 范围一定是涵盖的 存在隐式转换
    i2 = ui; 会报错 因为 有符号的数 可能会超过 这个无符号数的范围
    i2 = sb2; 因为有符号的数 不管是多少 都在 无符号数的范围内
    
    浮点数和整数 (有、无符号)之间  
    浮点数装整数 整型转为浮点 是存在隐式转换的
    float f2 = 1.1f;
    double d2 = 1.1;
    decimal de2 = 1.1m;
    
    long l2 = 2;
    ulong ul2 = 2;
    //浮点数 是可以装载任何类型的 整数的 连long都能装
    f2 = l2;
    f2 = ul2;
    //decimal 不能隐式存储 float和double
    //但是它可以隐式存储整型
    de2 = l2;
    de2 = ul2;
    //double ——> float ——> (所有整型(有符号、无符号))
    //decimal ——> 所有整型(无符号、有符号)    
    //整数装浮点数
    //整数是不能存储隐式浮点数 整数不能存小数
    
    //特殊类型和其他类型之间
    //bool 没有办法和其他类型相互隐式转换
    
    //char 没有办法隐式存储 其他类型的变量
    char c2 = 'h';
    long l2 = 2;
    c2 = l2; 报错
    //char类型 可以隐式转换成 整型和浮点型
    //char 之所以能够隐式转换为部分整型和浮点数,是因为char类型是一个16位无符号整数,是因为char类型是一个16位无符号整数,用于表示Unicode字符的编码值。取值范围是0到65535,所以它可以隐式转换为比它宽度更大的数值类型 int long ushort ulong等都可以
    
    //string 类型无法和其他类型进行隐式转换
    
    // 总结 隐式转换 规则
    // 高精度 (大范围) 低精度 (小范围)
    // double 一>float 一>整数 (无符号、有符号) ->char
    //decimal ->整数(无符号、有符号)->char
    // string 和 bool 不参与隐式转换规则的
*/
//二、显示转换
//显示转换一>手动处理 强制转换
//知识点一 括号强转
// 作用一般情况下 将高精度的类型强制转换为低精度
// 语法:变量类型 变量名 (变量类型)变量
// 注意:精度问题 范围问题

//相同大类的整形
//有符号整型
sbyte sb = 1;
short s = 1;
int i = 1;
long l = 1;

//强转的时候 可能会出现范围问题 造成异常
sb = (sbyte)i;
console.WriteLine(sb);

i = (int)l;
sb = (sbyte)i;
sb = (sbyte)s;
sb = (sbyte)l;

//无符号整型
//跟上述一样

//浮点之间
float f = 1.1f;
double d = 1.123456789086655443;
    
f = (float)d;
Console.WriteLine(f);//只保留float精度范围

//无符号和有符号
uint ui2 = 1;
int i2 = -1;
//在强转的时候 一定要注意范围 不然得到的结果 可能有异常
ui2 = (uint)i2;
Console.WriteLine(ui2);

//浮点和整形
//浮点数强转成整型时 会之间抛弃小数点后面的小数
int i2 = (float)1.23f;
Console.WriteLine(i2);

//char和数值类型 支持数值类型强转
i2 = 'A';

char c = (char)i2;
Console.WriteLine(c);

//bool and string
//bool和string 是不能够强转

//二、 Parse法
//作用 把字符串类型转换为对应的类型
//语法:变量类型.Parse("字符串")
//注意:字符串必须能够转换成对应类型 否则报错

//有符号
//string str2 ="123";
int i4 = int.Parse("123");
Console.WriteLine(i4);
// 我们填写字符串 必须是要能够转成对应类型的字符 如果不符合规则 会报错
i4 = int.Parse("123.45");
Console.WriteLine(i4);
// 值的范围 必须是能够被变量存储的值 否则报错
short s3 = short.Parse("40008");
Console.WriteLine(s3);

sbyte sb3 = sbyte.Parse("1");
Console.WriteLine(sb3);
//他们的意思是相同的
Console.WriteLine(sbyte.Parse("1"));
Console.WriteLine(long.Parse("1234556"));

//有符号
//跟上述一样

//浮点数
float f3 = float.Parse("1.2323");
double d3 = double.Parse("1.2323");

//特殊类型
bool b5 = bool.Parse("true"); //必须是true和false
Console.WriteLine(b5);
char c2 = char.Parse("A");
Console.WriteLine(c2);
//string不支持

//知识点三 Convert法
//作用更准确的将 各个类型之间进行相互转换
//语法:Convert.To目标类型(变量或常量)
//注意:填写的变量或常量必须正确 否则出错

//转字符串 如果是把字符串转对应类型 那字件串一定要合法合规
int a = Convert.ToInt32("12.2");
Console.WriteLine(a);

//精度更准确
// 精度比括号强转好一点 会四舍五入
a = Convert.ToInt32(1.45845f);
Console.WriteLine(a);

//特殊类型转换
//把bool类型也可以转成 数值类型 true对应1 false对应0
a = Convert.ToInt32(true);
Console.WriteLine(a);

a = Convert.ToInt32(false);
Console.WriteLine(a);

a = Convert.ToInt32('A');
Console.WriteLine(a);

//每一个类型都存在对应的Convert中的方法

sbyte sbs = Convert.ToSByte("1");
short s5 = Convert.ToInt16("1");
int i5 = Convert.ToInt32("1");
long 15 = Convert.ToInt64("1");

byte b6 = Convert.ToByte("1");
ushort us5 = Convert.TouInt16("1");
uint ui5 = Convert.ToUInt32("1");
ulong uls = Convert.TouInt64("1");

float f5  Convert.Tosingle("13.2");
double d5 = Convert .ToDouble("13.2");
decimal de5 = Convert.ToDecimal("13.2");

bool bo5 = Convert.ToBoolean("true");
char c5 = Convert.ToChar("A");
string str5 = Convert.ToString(123123);

// 作用: 拼接打印
// 语法: 变量.tostring();
string str6 = 1.ToString();
str6 = true.ToString();
str6 'A'.ToString();
str6 = 1.2f.ToString();

int aa = 1;
str6 = aa.ToString();
bool bo6 = true;
str6 = bo6.ToString();

//当我们进行字符串拼接时 就自动会调用 tostring 转成string
Console.WriteLine("123123"+ 1 + true);

str6 ="123123"+ true + 1.23;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值