木子屋 Dnawo's BLOG

在显式转换中使用checked进行溢出检查

👤 dnawo 📅 2008-07-07 👁 4379 👍 0 💬 0 🔄 本站原创
当不能使用隐式转换安全的进行转换时(例如将short类型的值转换为byte类型),就必须使用显式转换,例如:

byte var1;
short var2 = 7;
var1 = (byte)var2;

我们知道,short的取值范围比byte大,当将大于255的short类型的值显式转换为byte会出现什么情况呢?

byte var1;
short var2 = 999;
var1 = (byte)var2;

运行结果没有出错,var1的值为231,为什么会是231呢?我们将上边的值转换为二进制看下:

1111100111 : 256
0011100111 : 231
0011111111 : 255

你会发现大于11111111部分全被丢弃了!这样的转换让我们变得没有安全感,这样的转换也变得毫无意义,幸好C#提供了checked关键字让我们在转换的过程中检查是有溢出,一旦溢出程序并会报错System.OverflowException:

byte var1;
short var2 = 999;
var1 = checked((byte)var2);

与checked关键字对应的还有一个关键字unchecked,它表示不进行溢出检查,可见,默认的就是unchecked。

除了使用checked关键字外,我们还可以使用Convert命令来进行显式转换,Convert命令会在转换过程中检测是否有溢出:

byte var1;
short var2 = 999;
var1 = Convert.ToByte(var2);

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 比较Select Case(VB.NET)和switch(C#) 下一篇 → 很值得深思《士兵突击》袁朗和成才的对话