【发布时间】:2012-01-02 15:51:53
【问题描述】:
幂函数(用c++编写)...
long power (long a, long b){
long result=1l;
for (int i = 0;i<b;i++){
result*=a;
}
return result;
}
现在我做一些输出测试...
cout<<power(2l,2l)<<endl;
cout<<power(2l,4l)<<endl;
cout<<power(2l,31l)<<endl;
cout<<power(2l,32l)<<endl;
cout<<power(2l,61l)<<endl;
输出:
4
16
-2147483648
0
0
好吧,长期回落到 32 位大小(而不是保持为 64 位)似乎存在一些问题。我想知道为什么这不起作用,但如果我使用 long long 类型,一切正常。
一些额外的信息:
我正在使用 C++ 和编译器 MinGW
我正在运行 64 位操作系统(Windows 7)
更新:
你们太棒了!没想到会发生这种事情。
我刚刚使用 sizeof 检查了一些任意 PDT,这就是我发现的...
cout<<sizeof(long)<<" "<<sizeof(int)<<" "<<sizeof(char)<<" "<<sizeof(long long)<<" "<<sizeof(uint64_t)<<endl;
输出:
4 4 1 8 8
所以,我的 long 和 int 看起来都是 32 位大小的。更多玩弄表明 intmax_t 类型也是 64 位的。几乎每个 PDT 的上限为 64 位,所以如果我需要表示一个 128 位整数,c++ 是否有一个内置类(类似于 Java 中的BigInteger)?
【问题讨论】:
-
不要猜测 - 打印 sizeof(long) 和 sizeof(int) 的值以找出它们有多大
-
如果您想提出一个新问题,我建议您创建一个新问题(或者更好的是,finding a previous question on the topic)。这是一个快速链接:gmplib.org
标签: c++ long-integer bit pow exponent