【最后更新:2009年9月15日】
一、关于强制转换:Convert 和 (int) 的区别
Convert.ToInt32() 方法转换double类型的数据是“5舍6入”的。
(int) 方法转换double类型的数据是只取小数点前面的整数。
例:下面几种转换方法运行后得到的结果是不同的
一、关于强制转换:Convert 和 (int) 的区别
Convert.ToInt32() 方法转换double类型的数据是“5舍6入”的。
(int) 方法转换double类型的数据是只取小数点前面的整数。
例:下面几种转换方法运行后得到的结果是不同的
//第一种
int a = Convert.ToInt32(2.5); //强制转换的结果为 2
//第二种
int a = Convert.ToInt32(2.6); //强制转换的结果为 3
//第三种
int a = (int)(2.6); //强制转换的结果为 2
int a = Convert.ToInt32(2.5); //强制转换的结果为 2
//第二种
int a = Convert.ToInt32(2.6); //强制转换的结果为 3
//第三种
int a = (int)(2.6); //强制转换的结果为 2
二、 溢出检测
在C#语言中,可以使用checked关键字进行溢出检测,与之对应的是unchecked关键字,将忽略溢出。
以byte为例,byte即字节,一个字节有8位。在计算机中,所有的数据以二进制存储,每个位上存储的数据
非0即1,那么一个字节的数据存储的最大的二进制数据为 (11111111)2 ,将其进行二进制到十进制的转换,则
为255。也就是说,一个byte类型的数据不能大于255,大于255时将会发生溢出。
使用checked关键字可以对程序中可能出现的溢出现象进行检测,用法如下:
//运行下面的代码时,将会抛出异常
byte b = 255;
checked
{
b++;
}
//如果不希望进行溢出检测,则可使用unchecked关键字,
//不会抛出异常,程序正常结束,运行结果为 0
byte b = 255;
unchecked
{
b++;
}
//注意:以下写法也不会抛出异常
//运行结果为 0
byte b = 255;
b++;
byte b = 255;
checked
{
b++;
}
//如果不希望进行溢出检测,则可使用unchecked关键字,
//不会抛出异常,程序正常结束,运行结果为 0
byte b = 255;
unchecked
{
b++;
}
//注意:以下写法也不会抛出异常
//运行结果为 0
byte b = 255;
b++;
注意:本例得到一个不合理的等式,即 255 + 1 = 0。这是因为变量 b 进行自增运算后的二进制的值变为
(100000000)2 ,而byte类型只能有8位,因此将多出的一位抛弃,所以最后得到的结果为(00000000)2 其十进制
为 0,所以 b 的结果为 0。