using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _5.数据类型转换
{
class Program
{
static void Main(string[] args)
{
// 隐式类型转换
{
ushort destinationVar;
char sourceVar = 'a';
// 下面这条语句把char类型隐式转换成ushort类型。
destinationVar = sourceVar;
Console.WriteLine("sourceVar val: {0}", sourceVar);
Console.WriteLine("destinationVar val: {0}", destinationVar);
}
// 显式类型转换
{
byte destinationVar;
short sourceVar = 7;
// 下面这条语句把short类型显式转换成byte类型。
// 如果不强制类型转换,会出现编译错误。
destinationVar = (byte)sourceVar;
Console.WriteLine("sourceVar val: {0}", sourceVar);
Console.WriteLine("destinationVar val: {0}", destinationVar);
}
// 表达式的溢出检查上下文
{
byte destinationVar;
short sourceVar = 281;
// byte类型的最大值255,所以此语句进行强制类型转换后会溢出。其结果为25
destinationVar = (byte)sourceVar;
// destinationVar = checked((byte)sourceVar);
// 上面这条语句进行溢出检查时,会出现OverflowException异常。
// destinationVar = unchecked((byte)sourceVar);
// 上面这条语句表示不进行溢出检查和不加此溢出检,查结果是一样的。
Console.WriteLine("sourceVar val: {0}", sourceVar);
Console.WriteLine("destinationVar val: {0}", destinationVar);
}
// 使用Convert类方法进行转换
{
bool boolVal = true;
double doubleVar = 99.999;
string stringResult;
string stringVal = "17";
int integerVal = 67;
long longResult;
stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVar);
Console.WriteLine("stringResult: {0}", stringResult);
longResult = integerVal + Convert.ToInt64(stringVal);
Console.WriteLine("longResult: {0}", longResult);
}
Console.ReadKey();
}
}
}
/**
* 一、数据类型转换
* 1. 基本概念
* a) 不同类型的变量使用不同的模式来表示数据。
* b) 它们占用的存储空间可能相同,也许目标类型有足够的存储空间包含所有的源数据位,结果也有可能与期望不同。
*
* 2. 数据类型转换分类
* 可分为隐式类型转换和显式类型转换。
*
* 二、隐式类型转换
* 1. 基本概念
* 从类型A到类型B的转换可以在所有情况下进行,执行转换规则非常简单,可以让编译器执行转换。
*
* 2. 隐式转换规则
* 任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以进行隐式转换为类型B。
*
* 3. 基本类型隐式转换表
* 类型 可以安全转换为
* byte short,ushort,int,uint,long,ulong,float,double,decimal
* sbyte short,int,long,float,double,decimal
* short int,long,float,double,decimal
* ushort int,uint,long,ulong,float,double,decimal
* int long,float,double,decimal
* uint long,ulong,float,double,decimal
* long float,double,decimal
* ulong float,double,decimal
* float double
* char ushort,int,uint,long,ulong,float,double,decimal
*
* bool和string类型没有隐式转换。
*
* 三、显式类型转换
* 1. 基本概念
* 从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的处理。
*
* 2. 转换规则
* 强迫数据从一种类型转换为另一种类型。
* 其语法为:
* <(destinationType)sourceVar>;
* 此种转换只能在某种情况下才是可行的。彼此之间没有关系的类型或根本没有关系的类型不能进行强制转换。
*
* 四、表达式的溢出检查上下文
* 1. 简单检查源变量的值,把它与目标变量的取值范围进行比较。
* 2. 迫使系统特别注意运行期间的转换。
* 使用checked和unchecked关键字进行表达式的溢出检查上下文。
* 其使用语法:
* checked(expression) <检查表达式是否溢出,如出现溢出情况会抛出OverflowException异常>
* unchecked(expression) <对表达式溢出情况不进行检查>
*
* 五、使用Convert类进行显式转换
* 1. 数值的有效表达方式
* 首先是一个可选符号(加号或减号),然后是0位或多位数字,一个句点后跟一位或多位数字,接着是一个可选的e或E,
* 后跟一个可选符号和一位或多位数字(在这个序列之前或之后)和空格。
*
* 2. 转换方法
* // 整数类型
* Convert.ToByte(val) val转换为byte
* Convert.ToSByte(val) val转换为sbyte
* Convert.ToInt16(val) val转换为short
* Convert.ToUInt16(val) val转换为ushort
* Convert.ToInt32(val) val转换为int
* Convert.ToUInt32(val) val转换为uint
* Convert.ToInt64(val) val转换为long
* Convert.ToUInt64(val) val转换为ulong
*
* // 浮点类型
* Convert.ToSingle(val) val转换为float
* Convert.ToDouble(val) val转换为double
* Convert.ToDecimal(val) val转换为decimal
*
* // 布尔类型
* Convert.ToBoolean(val) val转换为bool
*
* // 字符类型
* Convert.ToChar(val) val转换为char
*
* // 字符串类型
* Convert.ToString(val) val转换为string
*
* 使用以上类型转换方式总是会进行溢出检查,checked和unchecked关键字不起作用。
*/
本文标题:五、数据类型转换
网页链接:
http://cdxtjz.com/article/ppsosj.html