不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
在显式转换中使用checked进行溢出检查
编辑:dnawo 日期:2008-07-07
当不能使用隐式转换安全的进行转换时(例如将short类型的值转换为byte类型),就必须使用显式转换,例如:
我们知道,short的取值范围比byte大,当将大于255的short类型的值显式转换为byte会出现什么情况呢?
运行结果没有出错,var1的值为231,为什么会是231呢?我们将上边的值转换为二进制看下:
1111100111 : 256
0011100111 : 231
0011111111 : 255
你会发现大于11111111部分全被丢弃了!这样的转换让我们变得没有安全感,这样的转换也变得毫无意义,幸好C#提供了checked关键字让我们在转换的过程中检查是有溢出,一旦溢出程序并会报错System.OverflowException:
与checked关键字对应的还有一个关键字unchecked,它表示不进行溢出检查,可见,默认的就是unchecked。
除了使用checked关键字外,我们还可以使用Convert命令来进行显式转换,Convert命令会在转换过程中检测是否有溢出:
复制内容到剪贴板
程序代码

byte var1;
short var2 = 7;
var1 = (byte)var2;
short var2 = 7;
var1 = (byte)var2;
我们知道,short的取值范围比byte大,当将大于255的short类型的值显式转换为byte会出现什么情况呢?
复制内容到剪贴板
程序代码

byte var1;
short var2 = 999;
var1 = (byte)var2;
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);
short var2 = 999;
var1 = checked((byte)var2);
与checked关键字对应的还有一个关键字unchecked,它表示不进行溢出检查,可见,默认的就是unchecked。
除了使用checked关键字外,我们还可以使用Convert命令来进行显式转换,Convert命令会在转换过程中检测是否有溢出:
复制内容到剪贴板
程序代码

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






评论: 0 | 引用: 0 | 查看次数: 3921
发表评论
请登录后再发表评论!