标题:100000*99999 结果竟然成了1409965408,大家帮帮忙
只看楼主
zhenhang
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2009-2-3
结帖率:80%
 问题点数:0 回复次数:8 
100000*99999 结果竟然成了1409965408,大家帮帮忙
#include<stdio.h>
int main()
{
    int i;long long j=0;
    i=100000;j=i*(i-1);
    printf("%d\n",sizeof(long long));
    printf("%ld\n",j);
}
代码在dev-c++下能顺利编译通过
执行结果:8
          1409965408
搜索更多相关主题的帖子: long 
2012-04-17 22:59
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
j=i*(i-1);
 
问题在这,在计算i*(i-1)时候,会先结果用int来保存的,这样结果就截断了,win7有个计算器可以验证你的结果,呵呵
主要先算在程序员计算机 和双字(int 为4个字节 也就是双字)


我行我乐
我的博客:
http://blog.yuccn. net
2012-04-18 00:25
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
如果想结果正确,吧int i;改成longlong类型就行了

我行我乐
我的博客:
http://blog.yuccn. net
2012-04-18 00:26
zhenhang
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2009-2-3
得分:0 
程序改为下面代码:
#include<stdio.h>
int main()
{
    long long i;long long j=0;
    i=100000;j=i*i;
    printf("%d\n",sizeof(long long));
    printf("%lld\n",j);
}
结果为 1410065408

在gcc下编译的


2012-04-19 12:47
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 

我行我乐
我的博客:
http://blog.yuccn. net
2012-04-20 00:45
sunnysab
Rank: 2
来 自:安徽安庆
等 级:论坛游民
帖 子:38
专家分:67
注 册:2011-8-11
得分:0 
类型小了,改一下

快乐一些~
2012-04-20 18:05
computeryuya
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2012-3-28
得分:0 
汗呢  我的vc6.0居然不认识  long long - -  难道vc 太老了。。
2012-04-21 16:06
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
得分:0 
数字太大,溢出啦。。。。。

持之以恒,别留遗憾,加油
2012-04-21 18:10
longwu87
Rank: 2
等 级:论坛游民
帖 子:14
专家分:69
注 册:2011-7-28
得分:0 
int64
2012-04-22 00:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366047-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.126280 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved