C语言为什么会发⽣数据溢出?如何避免数据溢出?

一、问题

有以下程序:#include <stdio.h>
int main()
{int i, sum; /*声明变量 */i = 2147483647; /*定义变量*/sum = i + 1; /*变量值加1*/printf("%d,%d", i, sum); /*输出结果*/return 0;
}运⾏后 sum 的结果是什么?

二、解答

1、分析

        按正常的计算,sum 应该是2147483648,但是运⾏后 sum 的结果是-2147483648。这是什么原因呢?

        在C语⾔中可以使⽤各种类型的标识符,但是C语⾔标准⾥并没有规定这些类型的具体⻓度,要由各个C编译系统⾃⼰规定。⼀般以⼀个机器字存放⼀个 int 数据,早期的计算机字⻓⼀般为16 位,故以16 位存放⼀个整数,整数的范围在-32768~32767 之间,整数范围太⼩,在使⽤的时候就容易产⽣溢出现象。

        在这段代码中,变量i被初始化为2147483647,这是一个int类型的最大值。当执行i+1时,由于int类型的取值范围是-2147483648到2147483647,因此i+1会产生溢出,结果不是预期的2147483648,而是-2147483648。

        但现代的计算机⼀般都为32 位以上,以 32 位存放⼀个整数,范围可达±2.1×10^9,所以当前⼀般将 int 和 long 都定义为32 位。在写程序时,要了解所⽤系统对标识符长度的规定,以免出现上⾯的错误。

        如果真的产⽣“溢出”,运⾏时也不会报错,⽽是将结果从“头”开始计算,即是上⾯的运⾏结果-327682147483648,这与编程者的原意不同。由于系统不会给出“出错信息”,所以要靠程序员的细⼼和经验来进⾏排错。

说明:当前⼤多编译器多将 int 规定为32 位,所以⼀般不会出现“溢出”现象。

2、解决⽅法

将数据定义为⻓整型long 类型,在输出的时候使⽤“%ld”即可。

注意:long 型数据可以得到⼤范围的整数,但同时会降低运算速度。因此,除⾮不得已,否则不要随便
使⽤ long 型。

三、总结

        C语⾔数值数据类型都有⼀个取值范围。在进⾏数值运算的时候,有时会因数值超出了定义类型的取值范围⽽产⽣溢出的情况。所以在表⽰数据时,应根据需要选择适当的数据类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

财政局运维管理平台应用解决方案

随着信息化建设的不断深入&#xff0c;财政局在IT运维中面临的问题也日益凸显。为了解决这些问题&#xff0c;本文将结合财政局的网络和IT基础建设现状&#xff0c;探讨如何选择合适的运维管理平台&#xff0c;以满足财政局的管理需求&#xff0c;并体现个性化需求。 一、财政…

分销商城多端uniapp 可编译5端 - 等级提现额度

等级提现额度 等级提现额度是一种常见的财务管理策略&#xff0c;通常用于在线平台、金融服务或游戏中&#xff0c;用于控制不同等级用户的提现限额。这样的机制有助于平台管理资金流动性&#xff0c;防范欺诈&#xff0c;并鼓励用户提升他们的活跃度或忠诚度。以下是一个简单的…

uniapp css 横向3个按钮 选中变色

<view class"uni-flex uni-row" style"text-align: center;line-height: 30px;" ><view class"itembtn" tabindex"1"> 选中变色1 </view><view class"itembtn" tabindex"2"> 选中变色2 &…

在商城里边怎么做分销功能_微信小程序商城如何开展分销

一、开篇引子 在数字化浪潮的推动下&#xff0c;商城已不再是一个单纯的购物场所&#xff0c;而是一个集购物、社交、娱乐为一体的多元化平台。在这个竞争激烈的市场环境中&#xff0c;如何让自己的商城脱颖而出&#xff0c;成为众多商家关注的焦点。而分销功能的引入&#xf…

uniapp一键换色

需求 : 在我们现有项目基础上, 把原来的颜色替换成另一个颜色, 同时需要为下一个项目预留出来随时更换主题色, 实现一键换色 实现 : 1. 介绍 兼容不同项目对主题色及图标的需求 主要通过以下对css颜色和icon主题色图标两个模块的切换 scss/less的css变量config/index.js中的…

利用海外動態IP代理開展市場調研

我們在進行市場調研的時候&#xff0c;不管是為了瞭解競品動態&#xff0c;還是為了獲取不同地區的消費者回饋&#xff0c;都需要克服一個難題&#xff0c;那就是地理限制。例如&#xff0c;我們無法直接訪問某些地區的網站&#xff0c;或者無法看到其他地區的搜索結果。這時候…

【面试突击】计算机网络面试实战(下)

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

Qt下载http文件

这是一个有问题的版本&#xff1a; class download_file :public QObject{Q_OBJECT; public:download_file(QString url, QString path);void sendRequest(); public slots:void requestFinished(QNetworkReply* reply); protected:QNetworkAccessManager* httpMgr; private:…

【LeetCode-53】最大子数组和(贪心动归)

LeetCode53.最大子数组和 力扣题目链接: https://leetcode.cn/problems/maximum-subarray/description/ 给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,…

第一篇:node的背景及版本的检查

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 前言 Node.js 是一个基于 Chrome V8 JavaScript 引擎…

Linux第23步_安装windows下的STM32CubeProgrammer软件和安装 DFU驱动程序

STM32CubeProgrammer软件是通过USB3.0接口烧写系统软件。 STM32CubeProgrammer需要java运行环境&#xff0c;因此需要安装JAVA软件。 Java 运行环境版本必须是 V1.7 及以上&#xff0c;一定要用 64位的&#xff0c;和win系统一致&#xff0c;否则使用 STM32CubeProgrammer烧…

微信怎么申请小程序商城?一步步教你完成

随着移动互联网的发展&#xff0c;越来越多的企业和个人开始关注微信小程序。微信小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下就能打开应用。其中&#xff0c;小程序商城因其便捷性和实用性&#xf…

吸嘴旋转对位贴合

背景&#xff1a;高精度贴片机需要在上看相机视觉定位芯片&#xff0c;芯片准确的贴合到leadframe里面。 问题&#xff1a;首先相机手眼标定后&#xff0c;已知视觉相机给出的芯片几何中心位置A1(x1,y1)&#xff0c;角度θ1&#xff0c;吸嘴几何中心的位置A2&#xff08;x2&am…

Embedding:数据的奇妙之变

在深度学习的领域&#xff0c;Embedding是连接符号与连续的一座桥梁。它通过将高维离散数据映射到低维连续向量空间&#xff0c;为大模型提供了更好的处理能力。 在这一部分&#xff0c;我们将深入研究Embedding的基本概念、作用以及在深度学习中的广泛应用。 一、向量Embedd…

如何一台电脑操作两个adb 设备

1.首先使用 adb devies 命令 2.然后使用 adb -s 上面的返回的id号 shell 进入对应的开发板

机器学习:自然语言处理介绍

机器学习在自然语言处理&#xff08;NLP&#xff09;领域扮演着关键的角色&#xff0c;它利用算法和统计模型来处理和理解人类语言。以下是一些与机器学习和自然语言处理相关的关键概念和技术&#xff1a; 文本分类&#xff1a; 机器学习可以用于对文本进行分类&#xff0c;例如…

matlab/simulink风电光伏储能虚拟同步机VSG下垂控制虚拟惯量控制,光伏变压减载控制一次调频二次调频研究,储能下垂控制SOC

非无穷大系统&#xff01; 第一个介绍风光储VSG算例研究。 其中风机采用虚拟惯性控制&#xff0c;下垂控制&#xff0c;网侧采用VSG虚拟同步机控制。储能下垂控制。 上述结果为整个系统的仿真波形&#xff0c;包括频率&#xff0c;pmsg永磁风机出力&#xff0c;储能出力&…

Python 使用类实现装饰器

一、基本原理 使用类实现装饰器的基本原理: 定义一个类&#xff0c;__init__ 方法用于初始化装饰器的状态&#xff0c; __call__ 方法用于定义在调用被装饰函数时所执行的逻辑。通过类创建一个可调用对象&#xff08;类的实例&#xff09;&#xff0c;该对象在被调用时执行 _…

批量合并PDF 文件的 5 大解决方案

PDF 可以将一个、两个、三个甚至更多的记录封装在一起&#xff0c;以显示完整的信息和用于逻辑和交互式结构化的不同元素。由于 PDF 可以提出多层结构&#xff0c;因此当用户知道如何最大化这种格式时&#xff0c;将所有文件组织到其中非常有效。正如许多经验丰富的用户和 PDF …

中国飞行模拟器行业研究与投资前景报告(2024版)

内容简介&#xff1a; 国外从事飞行模拟器研究的公司主要有加拿大航空电子设备(CAE)公司和MSI公司&#xff0c;法国的泰雷兹公司&#xff0c;美国的飞安国际公司、罗克韦尔•科林斯公司、L3技术公司和红雀模拟飞行技术公司&#xff0c;德国Simtec六自由度运动模拟系统公司等。…