pascal,c,c++使用大于2^32整型的注意要点

时间:2022-11-10 22:32:46

如果在你的电脑出现以下这种现象,则说明这篇文章适合你,否则不必理会。

适用于取余

比如求n!除以1000000007(被除数较大)的余数。

pascal:

pascal输出不需要说明格式,而若式子运算过程中的值都在2^64范围内,在整型范围内,则结果输出无错误,不需要高精度。

 begin
writeln(*);
writeln(* mod );
end.

c:

1.若式子运算过程中的值曾经在2^64范围内,大于2^32的范围,即使结果在2^32内,即使用long long,__int_64的数据保存,都要加上(long long) 或 (__int_64)。

Wrong:long long x;  x=1000000*1000000+2;

Yes:long long x;  x=(long long)1000000*1000000+2;

Wrong:printf("%ld\n",1000000*1000000/1000000);

Yes:printf("%ld\n",(long long)1000000*1000000/1000000);

2.若运算结果在2^64范围内,大于2^32的范围,则需要用到long long: %lld,__int_64: %i64d。

Wrong:printf("%lld\n",(long long)1000000*1000000+2);

Yes:printf("%ld\n",(long long)1000000*1000000+2);

 #include <stdio.h>
#include <stdlib.h> int main()
{
long long x;
x=(long long)*+;
printf("%lld\n",x);
printf("%lld\n",(long long)*+); printf("--------\n"); x=*+;
printf("%lld\n",x);
printf("%lld\n",*+);
printf("%ld\n",(long long)*+); printf("--------\n"); printf("%ld\n",*/);
printf("%ld\n",(long)*/);
printf("%ld\n",(long long)*/);
printf("%lld\n",*/);
printf("%lld\n",(long long)*/); return ;
}

pascal,c,c++使用大于2^32整型的注意要点

c++:

1.c++和pascal一样,输出不需要说明格式;而c输出需要说明格式,所以c++不用像c一样判断什么时候用%ld,或者%lld,%i64d。

2.若式子运算过程中的值曾经在2^64范围内,大于2^32的范围,即使结果在2^32内,即使用long long,__int_64的数据保存,都要加上(long long) 或 (__int_64)。这一点和c一样。

 #include <iostream>
using namespace std; int main()
{
long long x;
x=(long long)*+;
cout<<x<<endl;
cout<<(long long)*+<<endl; cout<<"--------"<<endl; x=*+;
cout<<x<<endl;
cout<<*+<<endl; cout<<"--------"<<endl;
cout<<*/<<endl;
cout<<(long)*/<<endl;
cout<<(long long)*/<<endl; return ;
}

pascal,c,c++使用大于2^32整型的注意要点