| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2172 人关注过本帖
标题:c语言 双整型 声明问题
只看楼主 加入收藏
樊草草
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-11-24
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:7 
c语言 双整型 声明问题
#include<stdio.h>
#include<math.h>
int main()
{
    long long int m;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        m=pow(2,n-1);
        printf("%lld\n",m);
    }
    return 0;
}
各位能不能帮我看一下第五行的声明为什么 是错的??  急啊
谢谢!
搜索更多相关主题的帖子: 声明 include return 
2013-01-07 13:41
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:1 
哦 应该和你的编译器有关 一些编译器不支持 long long

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2013-01-07 13:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:1 
第五行是 int n; 吧,虽然算法很烂,但没有语法错误

gcc4.7.2 下编译测试通过
程序代码:
#include <stdio.h>

int main()
{
    unsigned long long int m;
    int n;
    while( scanf("%d",&n) == 1)
    {
        if( n>0 && n<=64 )
        {
            m = 1ull<<(n-1);
            printf( "%llu\n", m );
        }
    }
    return 0;
}

gcc4.7.2(加编译参数 -std=c99) 编译测试通过
程序代码:
#include <stdio.h>

int main()
{
    for( int n; scanf("%d",&n)==1; )
    {
        if( n>0 && n<=64 )
        {
            printf( "%llu\n", 1ull<<(n-1) );
        }
    }
    return 0;
}

2013-01-07 13:55
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:1 
拾人牙慧
long long int不是所有编译器都支持的,有些支持这种数据类型的,可能是真支持,也可能是模拟支持,总之它不是标准类型。在.NET4框架中,有64位的长整型数据,这个框架下的所有语言都能使用,但不是所有语言本身都有定义这样的数据类型,也就是说,你尽可使用_int64或System.Int64来定义64位的整数,但未必有long long这样的定义。

VS2010的.NET4中,C#语言的int是32位的,long是64位的,但其C++的int和long都是32位的,后者支持64位的long long类型。long,对前者,编译后的BCL数据类型是System.Int64,对后者则是System.Int32,把long long编译为System.Int64。这个框架下所有语言的数据类型,在编译后都是这种BCL数据类型,是看不出来原先用什么定义的,而且,所有语言编译之后使用的执行库,都是一样的,各种语言之间的执行效率几乎没有差别,差别在你熟悉哪种语言编程而已。

经典的书也有告诉你编程时不要假定数据的具体尺寸。union对内置数据类型的尺寸很敏感,因此编程经验也有告诫慎用union,除非你决定不考虑移植环境,否则最好不要使用这个东西。


认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-07 14:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 4楼 yaobao
啊! .Net的规定和C/C++有啥关系?C/C++既不是.Net的老子也不是它儿子。
还有,你文中唯一提到C/C++的一句“但其C++的int和long都是32位的”,也是错的,C++没有这样强制规定。事实上,具体是多少取决于编译器所使用的数据模型,比如 ILP64模式下,int和long都是64位;比如 LP64模式下,int是32位,long是64位……

对楼主说:
long long int 是C语言中的标准内建类型,现在也成为C++语言中的标准内建类型。如果你的编译器不支持它,那说明你的编译器太古老了,该扔掉。

当然,yaobao说的“编程时不要假定数据的具体尺寸”是正确的,如果你需要确定的长度,应当使用 int64_t/uint64_t 之类,它们定义在 stdint.h 中。
2013-01-07 15:17
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:1 
long long 基本上很少用到,就算用到了基本上都是大数运算了。
r版说的很好,望楼主采纳,另外我也不认同用CLR的东西来和C\C++之类的比较。

My life is brilliant
2013-01-07 16:48
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
回复 5楼 rjsp
呵呵,我也只是以前看别人这样说的,半懂不懂,觉得对楼主有用就粘贴上来了,说实话,我没太读懂

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-07 16:59
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
收藏
得分:1 
long long int 是C99标准中新添加的啊,如果楼主你要进行大数运算又不考虑符号的话,可以尝试一下unsigned long int.范围会大些

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2013-01-07 17:11
快速回复:c语言 双整型 声明问题
数据加载中...
 
   



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

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