C/C++关于整型数值运算较大超出整型int表示范围的试验
要求是计算乘以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字节,包括一个最高符号位,其范围是 -2147483648 到2147483647而6,312,000,000超出整型表示范围,因此得出 1 0111 1000 0011 1001 0111 1010 0000 0000 的后32位结果。
由此可知计算较大整数的运算时,需要特别注意数制不同的表示范围,防止溢出出错。