using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CSharp基础 { class 类型转换 { public static void Main() { //byte b1 = 22; //byte b2 = 33; //在下面这句中,b1+b2默认是会返回一个int,但是我们声明为byte,会产生字节丢失,所以系 //统不会隐式转换,去产生编译错误. //byte total = b1 + b2; //如果我们用long去存结果,一定是不会丢数据的,些处系统做了一个隐式转换 //long total = b1 + b2; //可空类型与普通类型之间不可隐式转换,这是因为有null的处理,如果能转,那么普通值无法处理null //int? a = 22; //int b = a; 错 //可空类型可以与可空类型发现隐式转换,规则与普通类型一致 //int? a = 99; //long? b = a; //int? a = 255; //byte? b = a; 错,虽然255确实在byte可接受范围之内 Console.WriteLine( "------------显式类型转换---------------------"); //long a = 2000000000000; //int b = (int)a; //Console.WriteLine( b ); //以上代码中,long显示转换为int会丢掉其中的几个字节,而long中的值恰好又大于int的表式范围,所以最后出现的值 //不是我们所希望的 //long a2 = 65535; //int b2 = (int)a2; //Console.WriteLine( b2 ); //以上代码同样是一个显示转换,而65535是在int字节范围之内,以后即便丢掉字节后,值仍然没有变,是我们希望的结果 //考虑一个问题,以上两各方式,是不是存在一种侥幸,那么万一要是超出范围呢,我们怎么控制? //c#为我们提供了checked方式检查值的溢出 //long a3 = 20000000000000000; //int b3 = checked( (int)a3); //运行时刨出异常 //小数强转为整数时会丢失其小数部分 //float price = 23.5f; //int reInt = (int)(price + 0.5f); 以上方式加0.5f是为了四舍五入价格的最接近整数,一般用于不再参与运算,只做展示,推荐! //Console.WriteLine( reInt ); //分析字符串,进行值转换 //string str = "65535"; //int i = int.Parse(str); //Console.WriteLine(i); //string str2 = "false"; //bool i2 = bool.Parse(str2); //Console.WriteLine(i2); Console.Read(); } } }