| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:在win-tc上通过,在dev-c++上没通过,为什么?
只看楼主 加入收藏
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
结帖率:66.67%
收藏
 问题点数:0 回复次数:12 
在win-tc上通过,在dev-c++上没通过,为什么?
图片附件: 游客没有浏览图片的权限,请 登录注册

这张是win-tc
图片附件: 游客没有浏览图片的权限,请 登录注册

这张是dev-c++
2012-12-25 14:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
狗屎
int 对应 "%d"
long 对应 "%ld"
如果没对应,结果是“未定义的”
2012-12-25 14:51
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
收藏
得分:0 
还是一样的,你试试看。
2012-12-25 14:55
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-12-25 14:57
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-12-25 14:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
试个球呀,两个都是正确的,你没考虑溢出(代码是正确的,但你没有将你的意图正确的表达为代码)
如果你考虑溢出,你就不会用平台相关的int作存储
2012-12-25 15:00
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
收藏
得分:0 
版主老大,菜鸟没懂啊。恳求赐教
2012-12-25 15:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
从你的代码来看,就是求
1 + 2 + 4 + 8 + 16 + …… + 2的63次方
换成二进制表达,就是求
1 + 10 + 100 + 1000 + 10000  + …… + 1000000000000000000000000000000000000000000000000000000000000000
结果当然就是二进制的
1111111111111111111111111111111111111111111111111111111111111111

换句话说,你使用的存储类型起码要能达到64bits。在C语言的标准内建类型中,只有unsigned long long能表示这么大的范围

此后,代码很简单,你使用符合C标准的编译器(若你使用TC、VC等不支持现代C标准的编译器我就和你没什么好说的了),比如gcc4.7.2(带上编译参数-std=c99)编译运行如下代码
程序代码:
#include <stdio.h>

int main()
{
    unsigned long long sum = 0;
    for( unsigned i=0; i<64; ++i )
        sum += 1ull<<i;
    printf( "%llu\n", sum );

    return 0;
}
输出为:

2012-12-25 15:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
(一回车,它就贴上去了,我还没写完呐 ^_^ )

输出为:18446744073709551615

顺便说一下,dev-cpp是个IDE,而不是编译器。你的代码只跟你使用的编译器有关,跟你用什么编辑器写的代码无关。
再说一下,dev-cpp是个古老的,早就停止更新的IDE了。建议你换 CodeLite 或 Code::Blocks 等IDE
2012-12-25 15:20
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
楼主的dev-c++我没用过,但是winTC我用过,而且深受其害,最后百般实验,千次找谷歌大神才明白一些原因,WINTC的int,long int,unsigned int貌似没有数据类型之类的检测,我有一写代码long stu;结果有效数字只有5位,换成unsigned int,long int ,int都是我为有效数字。
后来就换了编译器

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-25 15:40
快速回复:在win-tc上通过,在dev-c++上没通过,为什么?
数据加载中...
 
   



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

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