浅谈数据类型转换之基本类型
转 http://blog.csdn.net/davie_yang/archive/2007/07/26/1709789.aspx
bool -> System.Boolean (布尔型,其值为 true 或者 false)
char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
ushort ->System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 2^32-1)
ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 2^64-1)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
int -> System.Int32 (整型,占4字节,表示 32 位整数,范围-2^31到2^31-1)
long -> System.Int64 (长整型,占 8 字节,表示 64 位整数,范围-2^63到2^63-1)
float -> System.Single (单精度浮点型,占 4 个字节)
double -> System.Double (双精度浮点型,占 8 个字节)
decimal ->System.Decimal(128位高精度十进制表示法 占16字节)
从 sbyte 到 short、int、long、float、double 或 decimal
从 byte 到 short、ushort、int、uint、long、ulong、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
从 char 到 ushort、int、uint、long、ulong、float、double 或 decimal
从 float 到 double
Convert.ToBoolean(Val)---------------------------------------------------------Val--->Bool
Convert.ToByte(Val)--------------------------------------------------------------Val--->Byte
Convert.ToChar(Val)--------------------------------------------------------------Val--->Char
Convert.ToDecimal(Val)----------------------------------------------------------Val--->Decimal
Convert.ToDouble(Val)-----------------------------------------------------------Val--->Double
Convert.ToInt16(Val)--------------------------------------------------------------Val--->Short
Convert.ToInt32(Val)--------------------------------------------------------------Val--->Int
Convert.ToInt64(Val)--------------------------------------------------------------Val--->long
Convert.ToSingle(Val)-------------------------------------------------------------Val--->Float
Convert.ToString(Val)--------------------------------------------------------------Val--->String
Convert.ToUint16(Val)-------------------------------------------------------------Val--->Ushort
Convert.ToUint32(Val)-------------------------------------------------------------Val--->Uint
Convert.ToUint64(Val)-------------------------------------------------------------Val--->Ulong
Convert.ToSbyte(Val)---------------------------------------------------------------Val--->Sbyte
数据类型的简单罗列:
关于各个数据类型的范围,本人归纳了二个公式,供大家参考
有符号数:-2^(X-1)~2^(X-1)-1
无符号数:0~2^X-1
其中X是该数据类型的位数
For example:byte 表示8位整数 0~2^8-1 也就是0~255 sbyte 8位整数 -2^(8-1)~2^(8-1)-1
隐式转换:
-
只能从较小的整数类型隐式的转换为较大的整数类型
-
整 数和浮点数之间的转换略有不同,只能在相同大小的类型之间转换。例如:int/uint 转换为float、long/ulong转换为double、也可以从long/ulong转换为float,这样做大家要注意可能会丢失4个字节的数 据,但是这仅表示得到的float值比double值精度低,编译器认可这种错误,而不会影响其值的大小
-
无符号的变量可以转换为有符号的变量,前提是无符号的变量不得超出有符号变量的范围
-
不存在向 char 类型的隐式转换,因此其它整型的值不会自动转换为 char 类型。
-
浮点型不能隐式地转化为decimal型
简单罗列:
显示转换:
所谓的类型转换就是强迫数据从一种类型转换为另一种类型
其语法如下:
(destinationType)SourceVar 这样将把SourceVar中的值转换为destinationType
在把一个值放在一个变量中时,如果该值过大不能放在该类型的变量中,那么就会导致溢出,可通过如下方式做出检查:
Checked(expression)/Unchecked(expression)
For example:
Byte destinationVar;
Shor sourceVar=281;
destinationVar=checked((byte)sourceVar) ;
console.writeLine(« sourceVar is {0} »,sourceVar) ;
console.writeLine(« destinationVar is {0} »,destinationVar) ;
在这个代码块中,如果用unchecked代替checked,就会得到默认的结果,不会出现错误
这样,我们可以将VS里边的默认设置由unchecked改为checked,进行溢出检查
修改方法如下:
右
击solutionexplorer窗口中的工程,选择properties选项,单击窗口左边的Configuration
properies文件夹,打开三个子项(Build,Debugging and
Advanced)的列表。要修改的是一个编译器的设置,所以选择Build子项,在属性的顶部(Code
generation),有一个选项Check for Arithmetic
overflow/underflow,在默认情况下这个值是False,把它改为True 就可以了
使用Convert命令进行显示转换
以这种方式可进行很多显示转换,罗列如下:
其中Val可以是任意一种类型的变量,如果这些命令不能处理该类型的变量,那么编译器会给出相应的提示
如上所示,转换的名称略不同于C#类型名称,若要转换为int,则应使用Convert.ToInt32(Val),这是因为这些命令来自于.NET Framework的System名称空间而非C#本身,这样,还可以在除C#之外的其他.NET兼容的语言中使用
这些转换要注意的是,他们总是进行溢出检查而且checked/unchecked 关键字以及工程属性不起作用
- 这里有几个问题需要讨论一下,有两个字符串一个是”It's none of your business”另一个是”281”,如果我想把这两个利用上边的方式转换成数值型变量是否都可成功?
- 如果后边这个字符串”281”能成功的转换成字符型变量,是不是能转换成任何一种数值型变量?转换成byte可以吗?
- 这种方式的转换若想成功,那么所提供的字符串必须是数字的有效表达方式,该数还必须是不会溢出的。那么什么是数字的有效表达方式?
- 数 字的有效表达方式:首先是一个可选择的符号(+/-),然后是0位或者多位数字,一个圆点后跟一位或多位数字,接着是一个可选的e或E,句点后跟一位或多 位数字(在这个序列前或之后)和空格。利用这些可选的额外数据,就可以看出-1.2341e-24这样复杂的字符串是一个数值
浙公网安备 33010602011771号