zoukankan      html  css  js  c++  java
  • checked和unchecked的区别

    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());
    
                Console.ReadKey();
    
            }
    
        }
    

    把断点打在 int z = x + y;代码行,单步调试,可以看到z的值为-2。因为int类型的最大值是2147483647,x + y超出了最大值,出现了溢出。
    1

    □ 使用checked

    如果我们想让编译器帮我们判断是否溢出,就使用checked关键字。

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                int y = 2147483647;
    
                int x = 2147483647;
    
                int z = checked(x + y);
    
            }
    
        }

    运行,抛出溢出异常:   
    2

    如果我们想手动捕获并打印异常,应该这样写:

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                int y = 2147483647;
    
                int x = 2147483647;
    
                try
    
                {
    
                    int z = checked(x + y);
    
                }
    
                catch (OverflowException ex)
    
                {
    
                    Console.WriteLine(ex.Message);
    
                }
    
                Console.ReadKey();
    
            }
    
        }
    

    运行,
    3

    □ 使用unchecked   

    使用unchecked不会抛出溢出异常。

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                int y = 2147483647;
    
                int x = 2147483647;
    
                int z = unchecked(x + y);
    
                Console.WriteLine(z.ToString());
    
                Console.ReadKey();
    
            }
    
        }
    

    结果为:-2

    总结:checked关键字用来检查、捕获溢出异常,unchecked关键字用来忽略溢出异常。

  • 相关阅读:
    HTML 网页创建
    CSS3 opacity
    两数相加的和
    九九乘法表
    Linux下的Makefile初入
    linux 下定义寄存器宏 实现类似于STM32的寄存器操作
    Linux 编译与交叉编译
    linux IMX6 汇编点亮一个LED灯
    Linux基本指令与作用
    C# Task 源代码阅读(2)
  • 原文地址:https://www.cnblogs.com/darrenji/p/3907782.html
Copyright © 2011-2022 走看看