C#中的checked和unchecked
来源:互联网 发布:txt阅读器软件排行 编辑:程序博客网 时间:2024/06/05 02:07
checked和unchecked操作符用于整型算术运算时控制当前环境中的溢出检查。下列运算参与了checked和unchecked检查(操作数均为整数):
1) 预定义的++和――一元运算符。
2) 预定义的-一元运算符。
3) 预定义的+、-、×、/等二元操作符。
4) 从一种整型到另一种整型的显示数据转换。
当上述整型运算产生一个目标类型无法表示的大数时,可以有相应的处理方式:
(一)使用checked
若运算是常量表达式,则产生编译错误:The operation overflows at complie time in checked mode.
若运算是非常量表达式,则运行时会抛出一个溢出异常:OverFlowException异常
(二)使用unchecked
无论运算是否是常量表达式,都没有编译错误或是运行时异常发生,只是返回值被截掉不符合目标类型的高位。
(三)既未使用checked又未使用unchecked
若运算是常量表达式,默认情况下总是进行溢出检查,同使用checked一样,会无法通过编译。
若运算是非常量表达式,则是否进行溢出检查,取决于外部因素,包括编译器状态、执行环境参数等。
下例说明了checked和unchecked操作符在非常量表达式中的使用方法
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace CountStrDemo
- {
- class Program
- {
- //static int x=1000000;
- //static int y=1000000;
- //static int F()
- //{
- // return checked(x * y); ////运行时抛出OverFlowException异常
- //}
- //static int G()
- //{
- // return unchecked(x * y); //截去高位部分,返回-727379968
- //}
- //static int H()
- //{
- // return x * y; //依赖于编译器的默认设置,一般是不检查
- //}
- const int x = 1000000;
- const int y = 1000000;
- static int F()
- {
- return checked(x * y); //编译错误,编译无法通过
- }
- static int G()
- {
- return unchecked(x * y); //截去高位部分,返回-727379968
- }
- static int H()
- {
- return x * y; //编译错误,编译无法通过
- }
- static void Main(string[] args)
- {
- //try
- //{
- // F();
- //}
- //catch (OverflowException ex)
- //{
- //}
- //int reint = G();
- //Console.WriteLine( reint.ToString() );
- //int rein2 = H();
- //Console.WriteLine( rein2.ToString() );
- //Console.ReadLine();
- F();
- int reint = G();
- Console.WriteLine(reint.ToString());
- int rein2 = H();
- Console.WriteLine(rein2.ToString());
- Console.ReadLine();
- }
- }
- }
- C#中的checked和unchecked
- C# checked 和 unchecked
- C# checked和unchecked
- C# checked和unchecked详解
- C# 中的整数溢出检查 checked 和 unchecked
- C#中的checked、unchecked操作符
- C#的checked和unchecked操作符
- C#的checked和unchecked操作符
- Java中的checked exception和unchecked exception
- checked 和 unchecked exception
- checked和unchecked关键字
- C#中使用checked和unchecked整数运算
- C# checked和unchecked关键字与强制类型转换
- C# checked、unchecked操作符
- C# checked、unchecked操作符
- C# checked与unchecked用法
- C# checked、unchecked操作符
- C# checked与unchecked用法
- 让.Net 应用程序突破2G的内存访问限制64G
- Modeling, UV Mapping, and Texturing 3D Game Weapons
- 技术路线的选择重要但不具有决定性
- [转]一篇好文,以在迷茫时阅读
- 快速掌握一个语言最常用的50%
- C#中的checked和unchecked
- Hashtable和HashMap的区别
- Python插件框架资料索引[不断更新中]
- 关于我
- OSPF-为什么让域间汇总路由进入NSSA?
- 马屁都拍绝了!史上最牛的面试问答(收藏)
- Redhat Linux下如何生成core dump文件
- 技术路线的选择重要但不具有决定性
- C++ boost之 conversion/lexical_cast