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

╰+攻爆jí腚メ 2022-12-02 15:20 246阅读 0赞

要求是计算 3.156 × 1 0 7 3.156×10^7 3.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位结果。
由此可知计算较大整数的运算时,需要特别注意数制不同的表示范围,防止溢出出错。

发表评论

表情:
评论列表 (有 0 条评论,246人围观)

还没有评论,来说两句吧...

相关阅读

    相关 提升

    何为整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的,我个人的理解是:C语言算术运算中字节数少于整型字节数的数据类型在进行整形运算中会被转化为整型数据,这个

    相关 golang:

    > Go语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8、int16、int32、int64 等,每种数值类型

    相关

    Go语言基础之基本数据类型 除了基本的整型,浮点型,布尔型,字符串外,还有数组,切片,结构体,函数,map,通道(channel)等,Go语言的基本类型和其他语言大同小异