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#中属性和成员变量的区别说明
一个类,有时候搞不清楚到底用成员变量还是属性. 如: 成员变量 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#中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#中的unchecked是什么意思,起什么作用?
Checked与Unchecked 对于因为整数类型参与算术操作和类型转换时产生的"溢出异常"--System.OverflowException,在某些算法来讲不算真正的"异常",相反这种溢出常常为程序所用.C#通过引入checked和unchecked关键字来控制这种特殊情况的需求.它们都可以加于一个语句块前(如:checked{--}),或者一个算术表达式前(如:unchecked(x+y)),其中加checked标志的语句或表达式如果发生算术溢出,则
-
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#中struct和class的区别详解
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建一个class类型实例被分配在托管堆上.但struct和class的区别远不止这么简单. 概括来讲,struct和class的不同体现在: ● 类是引用类型,struct是值类型 ● 在托管堆上创建类的实例,在栈上创建struct实例 ● 类实例的赋值,赋的是引用地址,struct实例的赋值,赋的是
-
C#中Html.RenderPartial与Html.RenderAction的区别分析
本文较为详细的讲解了C#中Html.RenderPartial与Html.RenderAction的区别,具体分析如下: Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: 在页面直接渲染 视图结果 视图必须存在! <%Html.RenderPartial("LogOnUserControl");%> 或 <%Html.RenderPa
-
C#中常量和只读变量的区别小结
常量和只读变量有以下区别: 1.常量必须在声明时就被初始化,指定了值后就不能修改了.只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造以后值就不能修改. 2.常量是静态的,而只读字段可以是静态和动态的 3.Const可以用在字段和局部变量,readonly只可以修饰字段
-
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#中[],List,Array,ArrayList的区别及应用
[] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换. 应用示例 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web
随机推荐
- 编写Js代码要注意的几条规则
- 解析C++中构造函数的默认参数和构造函数的重载
- for循环连续求和、九九乘法表代码
- python 装饰器功能以及函数参数使用介绍
- Android xmlns 的作用及其自定义实例详解
- 深入浅出Java mvc_动力节点Java学院整理
- 几个php应用技巧
- jquery mobile实现拨打电话功能的几种方法
- jQuery实现的原图对比窗帘效果
- js 数值项目的格式化函数代码
- javascript制作的滑动图片菜单
- Java连接postgresql数据库的示例代码
- MySQL修改默认字符集编码的方法
- 基于python if 判断选择结构的实例详解
- jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
- Flask框架模板继承实现方法分析
- centos 6.9 升级glibc动态库的详细过程
- tensorflow 加载部分变量的实例讲解
- CentOS7开启MySQL8主从备份、每日定时全量备份(推荐)
- java中的方法重载知识点总结