long long与__int 64区别?

long long与__int 64区别?
在线等~
为什么
#include <stdio.h>
int main(){
__int64 a[91];
int i, n;
a[1] = 1; a[2] = 2;
for (i=3; i<=90; i++){
a[i] = a[i-2]+a[i-1];
}
while (scanf("%d", &n)==1 && n!=0){
printf("%I64d\n", a[n]);
}
return 0;
}

我提交是对的,而下面的就Output Limit Exceed 呢?
#include<stdio.h>
int main()
{
long long int f1,f2,f3,n,i,a[91];

a[1]=1;
a[2]=2;

for(i=3;i<91;i++)

{ a[i]=a[i-1]+a[i-2];

}

while(scanf("%lld",&n)!=EOF,n!=0)
{
printf("%lld\n",a[n]);
}
return 0;
}

第1个回答  2012-11-13
这是和平台相关的。
__int 64由微软来确保是64位,8个字节,不可移植。
long long与平台相关,可能是8字节也可能不是。追问

亲,看一下问题补充吧,回答好的话,追加20分,立刻采纳,谢谢啦~~

追答

while(scanf("%lld",&n)!=EOF,n!=0)
{
printf("%lld\n",a[n]);
}
这里为什么用逗号表达式?
你的逗号表达式导致n溢出了。

第2个回答  2012-11-13
个人感觉没啥区别,《c++primer》上说过long long是64位。
有时候编译器却会影响,
HDU上遇到过int64WA,long long A了的情况。追问

恩恩,那看一下问题补充吧!两者好像一样的,为什么一个accepted而另一个就Output Limit Exceed 呢?

追答

把网址给我吧,我去试试long long能不能a。

第3个回答  2012-11-13
没区别,__int 64是VC扩展的东西,不属于标准范畴。追问

亲,看一下问题补充吧,回答好的话,追加20分,立刻采纳,谢谢啦~~

追答

试了,vc8上两段代码结果相同。不知Output Limit Exceed是何意

追问

恩恩,是啊,测试结果一样,提交后就说Output Limit Exceed

我也不知道为什么?

第4个回答  2012-11-13
你的n是long long类型的,会有潜在的问题。
a[n] 这样的下标索引,是只支持int的。追问

好吧,您所说的潜在问题是什么呢?

我定义的是long long int也属于int类型,您所说的a[n] 这样的下标索引,是只支持int的条件,不是已经符合这个条件了吗?

追答

long long int 其实就是long long,和int在Windows平台下并不是一回事。典型的,int是32位,而long long 是64位的。
而a[n]这样的下标,n只支持机器最高效的类型。也就是说在32位环境下是int,而64位环境下才是long long。

本回答被提问者采纳