checked是用来检查数据是否溢出 听说uncheck是用来不检查的 那么c#默认检查还是不检查啊 checked与uncheck与默认岂不有一个作用重复了么
我很迷惑 想请高人指点。
我很迷惑 想请高人指点。
解决方案 »
- 急,请教VS2008安装部署问题
- C# 中 TextBox
- 一个面向接口编程的好例子(转载)
- 如何遍历一个XML中指定节点名称的内容
- 写了一个程序,有一个textbox事件。不知为何往里输入数字时老是提示框弹出。??
- Sql数据插入access的大发现!不知道有人发现了没有?。。。。
- 如何得到namespace里所有实现了某一接口的所有类??
- c# GDI问题,实现文字换行输出,如果第一行一个字只能输出一半,第二行接着输出另一半
- C#的对象模型,有没有说没有构造的class,其成员如何被输出化?
- 在程序最前面加上这几句为什么错误?
- C#网络编程有没有Client类?
- 100分在线等关于winform窗体上鼠标坐标的问题,急!!!
若运算是常量表达式,则产生编译错误:The operation overflows at complie time in checked mode.
若运算是非常量表达式,则运行时会抛出一个溢出异常:OverFlowException异常
使用unchecked
无论运算是否是常量表达式,都没有编译错误或是运行时异常发生,只是返回值被截掉不符合目标类型的高位。
既未使用checked又未使用unchecked
若运算是常量表达式,默认情况下总是进行溢出检查,同使用checked一样,会无法通过编译。
若运算是非常量表达式,则是否进行溢出检查,取决于外部因素,包括编译器状态、执行环境参数等
如果同时在程序代码中指定 checked或unchecked标志,又有了checked编译器选项,则除了标志为unchecked的代码外,其余的都有checked语义
unchecked
{
int val = 2147483647 * 2;
}
你想想整形是多大啦,这个肯定会超过整型的大小所以就要避免溢出啰
因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。返回的是-2结果(默认的)再来个例子吧:
using System;class TestClass
{
const int x = 2147483647; // Max int
const int y = 2; static void Main()
{
int z;
unchecked
{
z = x * y;
}
Console.WriteLine("Unchecked output value: {0}", z);
}
}这个结果你说是多少呢?
对! 结果是:Unchecked output value: -2
因为溢出就输出默认值-2 没有溢出就直接输出啰