C#难点逐个击破(7):checked与unchecked
C#默认情况下,若常数表达式的值超过了目标类型的最大值,将会导致编译错误。

若目标数据类型不能容纳非常数表达式的数据,那么数据在赋值时会被截断。
代码如下:
class Program
{
static void Main(string[] args)
{
int n = int.MaxValue;//n=2147483647
n = n + 1;
System.Console.WriteLine(n);
}
}

此时可用内存存储数据来解释,之前int.MaxValue在内存为为32位1,自加1后变为32位0,此时0被认为是负号,因此会得来-2147483648。
将上述代码放在checked块中,将会引发System.OverflowException类型。
代码如下:
class Program
{
static void Main(string[] args)
{
checked
{
int m = int.MaxValue;
m = m + 1;
System.Console.WriteLine(m);
}
}
}

C#中放在checked块内的变量,若运行时发生一次溢出的赋值就会引发一个异常。
unchecked用于取消整型算术运算和转换的溢出检查。
相关推荐
-
解析C#中[],List,Array,ArrayList的区别及应用
[] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换. 应用示例 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web
-
C#中Convert.ToString和ToString的区别分析
本文实例分析了C#中Convert.ToString和ToString的区别,对于初学者来说是很有必要加以熟练掌握的.具体分析如下: 1.Convert.ToString能处理字符串为null的情况. 测试代码如下: static void Main(string[] args) { string msg = null; Console.WriteLine(Convert.ToString(msg)); Console.ReadKey(); } 运行,没有抛出异常. 2.ToString方法不能
-
C#中常量和只读变量的区别小结
常量和只读变量有以下区别: 1.常量必须在声明时就被初始化,指定了值后就不能修改了.只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造以后值就不能修改. 2.常量是静态的,而只读字段可以是静态和动态的 3.Const可以用在字段和局部变量,readonly只可以修饰字段
-
探讨c#中的unchecked是什么意思,起什么作用?
Checked与Unchecked 对于因为整数类型参与算术操作和类型转换时产生的"溢出异常"--System.OverflowException,在某些算法来讲不算真正的"异常",相反这种溢出常常为程序所用.C#通过引入checked和unchecked关键字来控制这种特殊情况的需求.它们都可以加于一个语句块前(如:checked{--}),或者一个算术表达式前(如:unchecked(x+y)),其中加checked标志的语句或表达式如果发生算术溢出,则
-
C#中struct和class的区别详解
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建一个class类型实例被分配在托管堆上.但struct和class的区别远不止这么简单. 概括来讲,struct和class的不同体现在: ● 类是引用类型,struct是值类型 ● 在托管堆上创建类的实例,在栈上创建struct实例 ● 类实例的赋值,赋的是引用地址,struct实例的赋值,赋的是
-
C#中属性和成员变量的区别说明
一个类,有时候搞不清楚到底用成员变量还是属性. 如: 成员变量 public string Name; 或者用属性 private string name public string Name{ get { return name; } set { name = value; } } 属性与成员变量类似
-
深入理解c# checked unchecked 关键字
checked 和 unchecked关键字用来限定检查或者不检查数学运算溢出的:如果使用了checked发生数学运算溢出时会抛出OverflowException:如果使用了unchecked则不会检查溢出,算错了也不会报错.1. 一段编译没通过的代码 复制代码 代码如下: int a = int.MaxValue * 2; 以上代码段编译没有通过,在VS2010中会有一条红色的波浪线指出这段代码有问题:"The operation overflows at compile time in c
-
C#入门之checked和unchecked的区别实例解析
本文以实例形式对比测试了C#中checked和unchecked的区别,对于C#初学者来说有很好的借鉴参考价值.具体分析如下: int类型的最大值是2147483647,2个最大值相加就会超出int的最大值,即出现溢出. class Program { static void Main(string[] args) { int y = 2147483647; int x = 2147483647; int z = x + y; Console.WriteLine(z.ToString()); C
-
c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解
本文对c#中(int).int.Parse().int.TryParse.Convert.ToInt32的区别进行了较为深入的详细分析,对初学者而言可以起到巩固学习的目的.详情如下: 一.(int)变量名[强制类型转换]: 该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误. 该方式对于浮点数会做无条件舍去,失去精确度. 当然,该方式
-
C#中Html.RenderPartial与Html.RenderAction的区别分析
本文较为详细的讲解了C#中Html.RenderPartial与Html.RenderAction的区别,具体分析如下: Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: 在页面直接渲染 视图结果 视图必须存在! <%Html.RenderPartial("LogOnUserControl");%> 或 <%Html.RenderPa
随机推荐
- Android自定义View实现QQ运动积分转盘抽奖功能
- PHP笔记之:基于面向对象设计的详解
- JS判断是否为JSON对象及是否存在某字段的方法(推荐)
- 详解Nginx服务器的配置中开启文件Gzip压缩的方法
- 让IIS6支持JSP的设置方法(IIS完美整合Tomcat)
- windows7 安装iis7.0图文教程(不需要单独的安装包)
- springmvc+mybatis 做分页sql 语句实例代码
- iOS实现代码只执行一次
- 什么是OneThink oneThink后台添加插件步骤
- c#使用多线程的几种方式示例详解
- 修改MySQL的数据库引擎为INNODB的方法
- android教程之把自己的应用加入到系统分享中
- Android 解决build path errors的问题
- JavaScript获取flash对象与网上的有所不同
- Node.js 异步编程之 Callback介绍(一)
- PHP技术开发技巧分享
- java集合框架的体系结构详细说明
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- python执行shell获取硬件参数写入mysql的方法
- Python3搜索及替换文件中文本的方法
