【发布时间】:2013-05-10 22:11:11
【问题描述】:
以下几行是我真正“无用”的 C++ 程序的一部分...由于“无符号”的长度,该程序仅计算 2 的幂到 2^63 而不是“正在询问”的 2^128 long long" 变量,建议用于精度为 15 位的数字...!!!
就是这样....我需要一个 16 字节或更多的变量...不是由以下提供的:
-__int128(Visual Studio 2010 将字母变为蓝色,但出现红线和调试错误:“keyword not supported on this architecture”32 位系统)
-Boost::Projects...当我遇到专业网站(boost::bigint...存在吗? ??不是反问句)
(-当然要多打字)
int main()
{
unsigned long long result;
int i;
const int max=128;
for(i=0, result=1ll; i <= max; ++i,result *=2 )
cout<<setw(3)<< i <<setw(32)<< result <<endl;
system("pause");
return 0;
}
【问题讨论】:
-
在旁注中,循环中的边界检查是错误的,128 位无符号可以从 2⁰ 变为 2exponent(128)-1。你的循环被执行了 129 次(0 到 128),它应该是 128。
-
@Étienne 第一个通知是正确的(我已经使用 8 和 4 字节变量面对 64,32 等较小的循环......另一方面,从我的观点来看,第二个不是真的观点。如果
for(expressions;test;increasement)statements;并且具有test=>statements=>increasement=>test=>statements etc当它“运行”时的顺序,因为 x^0=1 如果你运行这个程序会给你输出: 2^0=1 , 2^1=2 , 2^2=4 2^3=8 等等 -
使用 128 位变量,它将显示 2^0=1 2^1=2 2^3=8...2^128=0 因为 2^128 会溢出。使用 unsigned long long 它已经显示 2^64=0。