值类型的显示/隐式转换和算术溢出检查

(显示/隐式)转换

编译器能够在基元类型之间进行隐式或显示转换

Int32 i = 5;
Int64 l 
= i;    // 从Int32到Int64的隐式转换
如果两个类型之间的转换是"安全"的(安全是指转换不会造成数据丢失),那么C#允许在他们之间进行隐式转换


如果转换存在潜在的"安全"(转换会引起丢失精度或数量级),C#要求进行显示转换,如
Single s = 5.55;
Int32 i1 
= (Int32) s; // 从Single到Int32的显式转换



Checked 与 Unchecked 基元类型操作

Byte b = 100;
= (Byte) (b + 200);    //运算溢出,结果为44
默认情况下CLR不检查溢出,可以通过增加/checked+编译器命令开关或checked{}语句打开溢出检查,当检查到有溢出时会抛出
OverflowException
= checked((Byte) (b + 200));    //抛出 OverflowException
下面代码具有同样功能:
checked {
    Byte b 
= 100;
    b 
+= 200;
}


* System.Decimal是一个特殊的类型, Checked 和 Unchecked对他不起作用
posted @ 2007-05-10 22:45  蛤蟆  阅读(475)  评论(0)    收藏  举报