C#使用checked检查溢出

2023-11-11

在进行数值类型之间的强制转换时,可能会丢失信息。比如将 int 类型转换为 short 类型时,如果 int 类型会的值大于 short 类型所能存储的最大值,那么就会发生溢出。

1、使用checked检查溢出

通常情况下,发生溢出时并不会自动抛出异常。这时我们就需要使用 checked 来检查溢出,当发生溢出时抛出异常。

1.1、未使用checked的情况
int a = 12345677;
short s = (short)a;
Console.WriteLine(s);
//输出:24909

这里发生了溢出,导致 s 的值发生了错误。但程序仍然可以正常执行,并没有抛出任何异常。

1.2、使用ckecked检查溢出

使用checked检查溢出并将其放在try语句块中来捕获异常。

try
{
    CheckeckedMethod();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

void CheckeckedMethod()
{
    checked
    {
        int a = 12345677;
        short s = (short)a;
        Console.WriteLine(s);
    }
}
//输出:Arithmetic operation resulted in an overflow.
2、使用unchecked语句禁用溢出检查

有时我们需要禁用溢出检查,就需要用到unchecked语句。

我们修改一下前面的代码,在 checked 语句块中加入了 unchecked 来禁止检查溢出。这时程序可以正常执行,但可以看出 s1 的值并不正确。

try
{
    CheckeckedMethod();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

void CheckeckedMethod()
{
    checked
    {
        int a = 123;
        short s = (short)a;
        unchecked
        {
            int num = 1234563;
            short s1 = (short)num;
            Console.WriteLine("s1: {0}", s1);
        }
        Console.WriteLine("s: {0}", s);
    }
}

//输出:
//	s1: -10621
//		s: 123

文章亦发表在个人网站,欢迎访问收藏:
BitsOf
C#使用checked检查溢出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#使用checked检查溢出 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 无压力轻松使用Obsidian写newsletter

    quail平台特点 拥有四大特点 开源 人工智能增强 web3和加密货币集成 超越电子邮件 开源 每个人都应该可以访问驱动其工具的代码 通过我们的服务 您可以放心地了解背后发生的事情 人工智能增强 为了创建一个真正智能的工具 我们知道需要在
  • Android Fragment

    Android实习札记 4 Fragment 碎片 基本概念解析 转载请注明出处 coder pig Fragment相信大家都不会陌生吧 侧滑啦 抽屉效果啦 DialogFragment啊等等 一堆地方都会 用到Fragment 对于Fr
  • “GetInputName“: 不是 “Ort::Session“ 的成员

    项目场景 使用C 和ONNXruntime部署深度学习模型 问题描述 作者在尝试使用onnxruntime和C 部署深度学习模型推理的时候 按照官网的文档对于Ort Session Run的定义 如下 需要获得模型输入层与输出层的名字 st
  • 如何根据SF6气体压力温度曲线,决定不同温度下断路器的充气压力?

    如何根据SF6气体压力温度曲线 决定不同温度下断路器的充气压力 答 SF6断路器的额定压力般为0 4 0 6MPa 表压 通常这时指环境温度为20 时的压力值 温度不同时 SF6气体的压力也不同 充气或检查时必须查对SF6气体温度压力曲线
  • 基于SSM框架的《超市订单管理系统》Web项目开发(第三天)用户管理,模糊查询,精准匹配,分页显示数据

    基于SSM框架的 超市订单管理系统 Web项目开发 第三天 用户管理 模糊查询 精准匹配 分页显示数据 昨天我们完善了登录的功能模块和退出的功能模块 今天我们将实现超市订单管理系统的用户管理功能模块中的用户列表和查询用户功能 今天要完成的功
  • Basic Commands for splunk(基本命令)

    1 搜索请求的数据 Task 1 Search for the requested data 导航到Search视图 如果你在主应用程序中 从屏幕左侧的列中单击Search Reporting 你也可以通过点击屏幕顶部栏上的搜索菜单选项来访
  • The Database Migration Assistant for Unicode (DMU) Tool (文档 ID 1272374.1)

    APPLIES TO Oracle Database Enterprise Edition Version 10 2 0 4 to 12 1 0 1 Release 10 2 to 12 1 Oracle Database Standard
  • SpringMVC中GET请求类型接收参数的两种方式

    1 PathVariable 方式接收URI参数 URI如 http localhost 8080 MyApp 123 Jack GetMapping user userId userName public String printMess
  • 将来时的表示

    一般将来时表示将来某一时刻的动作或状态 或将来某一段时间内经常发生的动作或状态 常常表示将来的时间状语连用 如 tomorrow 明天 next week 下周 in the future 将来 助动词will或shall 动词原形 表示将
  • 2021年总结

    一 目标回顾 一 工作 团队建设 学会管理团队 指引 领导团队前进 不太适合管理团队 技术 前端vue 熟悉 可以独立进行开发 并未达到 后端java熟悉springboot框架 可以独立进行开发项目 并且开发好一个项目 并达到 二 自我提
  • MYSQL设置密码时显示Failed! Error: SET PASSWORD has no significance for user ‘root‘@‘localhost‘ as the authe

    用这个命令进入mysql sudo mysql 在sql命令行输入以下命令回车 你就可以把密码改成mynewpassword ALTER USER root localhost IDENTIFIED WITH mysql native pa
  • 麒麟系统虚拟机安装教程

    作者 朱金灿 来源 clever101的专栏 为什么大多数人学不会人工智能编程 gt gt gt 1 首先得安装VM Ware软件 2 打开VM Ware 点击 文件 gt 新建虚拟机 3 进入新建虚拟机向导 点击下一步 如下图 4 安装来
  • elasticsearch-查询平分排序

    排序与相关性 默认情况下 返回的结果是按照 相关性 进行排序的 最相关的文档排在最前 在本章的后面部分 我们会解释 相关性 意味着什么以及它是如何计算的 不过让我们首先看看 sort 参数以及如何使用它 排序 为了按照相关性来排序 需要将相
  • idea生产junit类

    1 定义一个类 package com spring pro jdk8 construction test import lombok AllArgsConstructor import lombok Data import lombok
  • 本地运行hexo-theme-butterfly报错重定向次数过多

    本地运行hexo theme butterfly报错重定向次数过多 Github被墙了故选择使用Gitee 顺便搭建gitee page博客 使用了一个比较简约好看纯净的主题hexo theme butterfly 在这基础上进行配置 问题
  • 笔试,计算贡献值,2022-9-2

    计算时间区间的贡献值 若同一时间有多个应用程序 均分贡献值 每个vector表示一个应用的开始 结束时间段 一个应用可能有多个时间段 考虑 1 区间重叠 均分贡献值 2 浮点数计算 用整型处理单个时间会去掉小数 累计起来就错了 includ
  • 小样本中的自监督

    自监督脉络 SimCLR SimCLRV2 BYOL Moco SimSiam 一些典型操作 原图地址 When Does Self supervision Improve Few shot Learning 2019 ECCV 关键点 通
  • 计算机视觉(四):使用K-NN分类器对CIFAR-10进行分类

    1 引言 之前我们学习了KNN分类器的原理 现在让我们将KNN分类器应用在计算机视觉中 学习如何使用这个算法来进行图片分类 2 准备工作 创建项目结构如图所示 在datasets文件中下载数据集Cifar 10 k nearest neig
  • 基于Tensorflow搭建卷积神经网络CNN(花卉识别)保姆及级教程

    项目介绍 TensorFlow2 X 搭建卷积神经网络 CNN 实现人脸识别 可以识别自己的人脸哦 搭建的卷积神经网络是类似VGG的结构 卷积层与池化层反复堆叠 然后经过全连接层 最后用softmax映射为每个类别的概率 概率最大的即为识别
  • C#使用checked检查溢出

    在进行数值类型之间的强制转换时 可能会丢失信息 比如将 int 类型转换为 short 类型时 如果 int 类型会的值大于 short 类型所能存储的最大值 那么就会发生溢出 1 使用checked检查溢出 通常情况下 发生溢出时并不会自