免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4481 | 回复: 22
打印 上一主题 下一主题

[C] 整数乘法问题,求助!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-11 16:52 |只看该作者 |正序浏览
写了如下一个测试程序:
  1. #include <stdio.h>

  2. #define num1 (10000000*1000000)

  3. int main()
  4. {
  5.     printf("%d\r\n", num1);
  6.     return 0;
  7. }
复制代码
输出结果是1316134912

显然是溢出了,整数乘法在这种超大的情况下溢出处理是怎么样的?为什么最终结果是1316134912,

谁能给出计算机的计算过程。

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
23 [报告]
发表于 2013-01-12 21:21 |只看该作者
回复 21# hellioncu


    我刚开始手工算了一会儿,就不想算了

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
22 [报告]
发表于 2013-01-12 21:20 |只看该作者
回复 21# hellioncu


    这个……刚刚发现,谢谢你

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
21 [报告]
发表于 2013-01-12 21:17 |只看该作者
方兆国 发表于 2013-01-12 17:20
10000000000000除以16得除多久啊……您真有耐心


Windows自带的计算器一下子就能转换好

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
20 [报告]
发表于 2013-01-12 17:20 |只看该作者
hellioncu 发表于 2013-01-11 17:07
针对你这个情况
10000000000000 = 0x9184E72A000
截断后0x4E72A000=1316134912


10000000000000除以16得除多久啊……您真有耐心

论坛徽章:
0
19 [报告]
发表于 2013-01-12 16:16 |只看该作者
非常全,真是太感谢了!回复 17# starwing83


   

论坛徽章:
0
18 [报告]
发表于 2013-01-12 16:14 |只看该作者
牛人正解,你总是能更进一步,哈哈回复 16# pmerofc


   

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
17 [报告]
发表于 2013-01-12 16:01 |只看该作者
大数运算库,如果要速度并且专业计算,推荐GMP(GNU的少数还值得称道的作品),如果要适应性广但对速度没啥要求,可以M-APM,如果想找个代码简单点儿的学习或者研究,可以看看libtommath,风格还不错。

反正都比自己写好多了……不过如果你只是想要64bit计算的话,用32bit算也挺快的吧……

a*b
= (a1*2^16+a2)*(b1*2^16+b2)
= a1*b1*2^32 + a1*b2*2^16 + a2*b1*2^16 + a2*b2

所以通过这个式子直接算lo和hi也挺方便的吧……

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
16 [报告]
发表于 2013-01-12 15:52 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
15 [报告]
发表于 2013-01-12 15:24 |只看该作者
可以加ULL后缀。

输出请用%lld
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP