C/C++关于整型数值运算较大超出整型int表示范围的试验

本文通过实例分析了C/C++中整型int类型在进行大数值运算时可能出现的溢出问题,具体表现为计算3.156×10^7与0~200整数相乘时,当乘以200时结果错误。通过对比计算器计算的正确结果,发现程序计算结果在二进制表示下缺少最高位,这是由于运算结果超出了int类型的表示范围。文章强调在处理大整数运算时需要注意数据类型的表示范围,以避免溢出错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求是计算3.156×1073.156×10^73.156×107乘以0~200的任意整数,并输出此时的积。
刚开始使用整型int变量分别存储0~200的数和单位数3.156E7,此时大部分结果均正确无误,但200*3.156E7结果有误,运行情况如下:
在这里插入图片描述
如上所述,将积变量设置为整型还是长整型,得出结果均为2017032704,但此时用计算器计算情况如下
在这里插入图片描述
将计算器运行得到的正确结果,换为二进制表示如下
在这里插入图片描述
将程序运行得到的结果,换为二进制表示如下
在这里插入图片描述
可见,程序运算得到的结果换算成二进制为0111 1000 0011 1001 0111 1010 0000 0000,而正确结果换成二进制为1 0111 1000 0011 1001 0111 1010 0000 0000 总共33位,比前者正好多一位,前者与后者的后32位一模一样,由此判定,乘积运算的结果超出了int整型表示的范围,造成如上所示的程序计算错误。
clion测试int整型共4字节,包括一个最高符号位,其范围是 -21474836482147483647而6,312,000,000超出整型表示范围,因此得出 1 0111 1000 0011 1001 0111 1010 0000 0000 的后32位结果。
由此可知计算较大整数的运算时,需要特别注意数制不同的表示范围,防止溢出出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值