关于C#基本语法的一些注意事项

【最后更新:2009年9月15日】
一、关于强制转换: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





二、 溢出检测
      在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
++ ;

      注意:本例得到一个不合理的等式,即 255 + 1 = 0。这是因为变量 b 进行自增运算后的二进制的值变为
(100000000)2 ,而byte类型只能有8位,因此将多出的一位抛弃,所以最后得到的结果为(00000000)2 其十进制
为 0,所以 b 的结果为 0。

你可能感兴趣的:(C#)