namespacelesson6隐式转换 { internalclassProgram { staticvoidMain(string[] args) { Console.WriteLine("隐式转换(要点:大集合完全包含的小集合,小集合即可转换为大集合)"); #region 变量申明 //1、有符号的整形变量 能存储一定范围内的正负数包括0的变量类型 sbyte sb = 1; // -128~127 int i = 1; // -21亿~21亿 short s = 1; // -32768~32767 long l = 1; // -九百万兆~九百万兆 //2、无符号的整型变量 能存储一定范围内0和正数的变量类型 byte b = 1; // 0~255 uint ui = 1; // 0~42亿 ushort us = 1; // 0~65535 ulong ul = 1; // 0~18百万兆 //3、浮点数(小数) float f = 0.1f; // 数字后必须加f声明float,因为小数会被默认为double,从非0数算起为有效数字,7/8位有效数字,根据编译器不同有可能不同,超出部分会四舍五入 double d = 0.1; // 从非0数算起为有效数字,15~17位有效数字,超出部分会四舍五入 decimal de = 0.1m; // 数字后必须加m声明,因为小数会被默认为double,27~28位有效数字,不建议使用 //4、特殊类型 bool bo = true; // true或者false char c = 'a'; // 需要加'',单个字符 string st = "hello"; // 需要加"",字符串 #endregion
#region 相同类型的隐式转换 // 有符号 sbyte -> short -> int -> long(小范围的类型可以隐式转换为大范围类型) s = sb; i = sb; i = s; l = sb; l = s; l = i; // 无符号 byte -> ushort -> uint -> ulong(小范围的类型可以隐式转换为大范围类型) us = b; ui = b; ui = us; ul = b; ul = us; ul = ui; // 浮点数 float -> double | decimal不与其他两种浮点数转换 d = f; // 特殊类型 bool,string,char不存在隐式转换 #endregion
#region 不同大类型的隐式转换 //无符号不能装有符号的 //有符号装无符号 若无符号的范围小于该有符号的范围则可以隐式转换 s = b; i = b; i = us; l = b; l = us; l = ui; //浮点数装整数 所有浮点数都可以装所有的整数类型,过大的数以科学计数法计数 f = ul; d = ul; de = ul; //整数不能装浮点数 //bool与其他任何类型不能相互隐式转换 //其他类型不能转换为char //char可以隐式转换为ushort及比ushort更大范围的整形和浮点型(原理:char可以转化为对应的Unicode码,Unicode码最多有65536个,与ushort相同) us = c; i = c; l = c; ui = c; ul = c; f = c; d = c; de = c; //string与其他任何类型不能相互隐式转换 #endregion } } }