c语言之——整型的隐式转换与溢出检测
时间:2022-07-24
本文章向大家介绍c语言之——整型的隐式转换与溢出检测,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
溢出检测
我们可以通过下面的方式来检测溢出:
if(a > INT_MAX - b)
{
printf("overflown");
}
我们利用整型的最大值减去其中一个数,然后与另一个数进行比较。其中INT_MAX定义在limit.h头文件中,它表示整数的最大值。 当然,我们还可以通过下面的方式来检测:
if((unsigned int)a + (unsigned int)b > INT_MAX)
{
printf("overflown");
}
将两个数都先转换成无符号数进行计算,运算后的结果与INT_MAX进行比较。
尽量避免
虽然我们有方法来检测溢出,但是我们建议的是尽量去避免溢出的发生。可以通过下面的方式来避免:
- 选择合适的数据类型,当数据较大可能会超出short int的范围时,就不该选择short int,而应该选择int等所表示范围更大的类型。
- 在设计上尽量回避溢出。例如,要计算两个整数的平均值,我们想到的方法可能是(a+b)/2,但是这样却有溢出的风险,我们可以换一种方式:a-(a-b)/2,这种方式就回避了溢出的问题。
当然对于不可避免的可能发生溢出的情况,我们需要进行检测并进行后处理,而非忽略。
总结
对于整型隐式转换和溢出相关内容,我们做一个总结:
- 避免有符号数和无符号数直接进行算术运算。
- 一个很小的负数被转换成有符号数时,将会变得很大。因此一个无符号数和一个有符号负数的比较结果几乎是显而易见的。
- 溢出的结果是未定义的,不要期望对它做任何假设。
- 尽量避免溢出问题。
- java中没有无符号数。
- CentOS7上ElasticSearch安装填坑记
- ASP.NET Core 阶段性总结
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程案例演示
- C# 窗体常用API函数 应用程序窗体查找
- C#进阶系列——WebApi接口测试工具:WebApiTestClient
- 由Dapper QueryMultiple 返回数据的问题
- 【初探IONIC】不会Native可不可以开发APP?
- MVC视图展现模式之移动布局解析-续集
- 在 ASP.NET MVC 中使用异步控制器
- MVC5 Entity Framework学习之异步和存储过程
- ConcurrentDictionary 对决 Dictionary+Locking
- 在ASP.NET 5中使用SignalR
- 避免在ASP.NET Core中使用服务定位器模式
- 直传文件到Azure Storage的Blob服务中
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Rust日报】2020-07-17 无船同志新博客:Shipping Const Generics in 2020
- SpringCloud--Config Server配置中心学习总结
- 【Rust日报】2020-07-18 提升ARM64 Linux平台支持到Tier-1
- SpringCloud+MyBatis(oracle)逆向工程自动生成代码
- JDK1.8的几个简单Lambda表达式
- 腾讯云直播开发日记 (一) 直播播放和观看
- Docker六脉神剑(二) 使用Docker构建lnmp开发环境
- redis主从配置+集群搭建
- 【Ceph RGW】找一个用Go写的s3cmd
- 技术分享 | 如何优雅地在 Windows 上从 MySQL 5.6 升级到 5.7
- SpringCloud分布式配置中心
- Sharding-Proxy的基本功能使用
- React-Redux 对Todolist修改
- 快排解决寻找数组中的第K个最大元素
- Docker六脉神剑(一) Mac极速体验