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用于取消整型算术运算和转换的溢出检查。

(0)

相关推荐

  • C#中常量和只读变量的区别小结

    常量和只读变量有以下区别: 1.常量必须在声明时就被初始化,指定了值后就不能修改了.只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造以后值就不能修改. 2.常量是静态的,而只读字段可以是静态和动态的 3.Const可以用在字段和局部变量,readonly只可以修饰字段

  • C#中属性和成员变量的区别说明

    一个类,有时候搞不清楚到底用成员变量还是属性. 如: 成员变量 public   string   Name; 或者用属性 private   string   name public   string   Name{         get         {                 return   name;         }         set         {                 name   =   value;         } } 属性与成员变量类似

  • 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#中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#中[],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#中struct和class的区别详解

    本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建一个class类型实例被分配在托管堆上.但struct和class的区别远不止这么简单. 概括来讲,struct和class的不同体现在: ● 类是引用类型,struct是值类型 ● 在托管堆上创建类的实例,在栈上创建struct实例 ● 类实例的赋值,赋的是引用地址,struct实例的赋值,赋的是

  • 深入理解c# checked unchecked 关键字

    checked 和 unchecked关键字用来限定检查或者不检查数学运算溢出的:如果使用了checked发生数学运算溢出时会抛出OverflowException:如果使用了unchecked则不会检查溢出,算错了也不会报错.1. 一段编译没通过的代码 复制代码 代码如下: int a = int.MaxValue * 2; 以上代码段编译没有通过,在VS2010中会有一条红色的波浪线指出这段代码有问题:"The operation overflows at compile time in c

  • C#中Html.RenderPartial与Html.RenderAction的区别分析

    本文较为详细的讲解了C#中Html.RenderPartial与Html.RenderAction的区别,具体分析如下: Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: 在页面直接渲染 视图结果  视图必须存在! <%Html.RenderPartial("LogOnUserControl");%> 或 <%Html.RenderPa

  • 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

随机推荐