小心编程中整数溢出的问题
2012-05-08 17:24
260 查看
今天把一个项目运行了一下,发现和预想的结果不一样,查到最后才发现是溢出的问题所致。
出个题目如下:
__int64 cnt = 1048;
__int64 n = 10000000 * 1001 / 30000 * cnt;
呵呵,你觉得这个运行结果是多少呢?用计算器算出来为349682666
你在用printf("%I64d", n);打出来看一下,结果竟是49607080
简直相差甚远。
作为一个有7年开发经验的码农,能够感到骄傲的是,在遇到一些奇怪的问题最后终能找出原因,这也许就是所谓的格物致知精神吧。
这个代码应该怎么改才好,留给看官了。
出个题目如下:
__int64 cnt = 1048;
__int64 n = 10000000 * 1001 / 30000 * cnt;
呵呵,你觉得这个运行结果是多少呢?用计算器算出来为349682666
你在用printf("%I64d", n);打出来看一下,结果竟是49607080
简直相差甚远。
作为一个有7年开发经验的码农,能够感到骄傲的是,在遇到一些奇怪的问题最后终能找出原因,这也许就是所谓的格物致知精神吧。
这个代码应该怎么改才好,留给看官了。
相关文章推荐
- 经典面试编程题--atoi()函数的实现(就是模拟手算,核心代码就一句total = 10 * total + (c - '0'); 但是要注意正负号、溢出等问题)
- java 字符串转化为整数溢出问题处理
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 解法2-------解题总结
- Ubuntu下整数溢出问题
- 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- 有符号整数加减溢出检测问题
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解) .
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- 翻译《有关编程、重构及其他的终极问题?》——4.小心--操作符,请把表达式放在括号中
- C/C++编程常见问题(2)-错误打印64位长整数
- 编程珠玑之第二章questionA: 40亿个随机排列整数问题
- 编程珠玑: 12章 取样问题 12.1程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 优化解法-------解题总结
- 有符号整数翻转问题----注意溢出的问题
- Oracle 11g 导出数据报 “ORA-01455: 转换列溢出整数数据类型”的问题
- (编程基础)整数溢出的检测
- java编程:无序整数序列,求连续子串最大和问题
- 07_整数类型_进制转换_编程中的L问题
- 编程之美 2.7 最大公约数 扩展问题之逆转一个整数的二进制表示