我是Windows开发的新手,我很困惑。
当我使用Visual C ++ 2010编译此代码时,出现“常量太大”的错误。为什么我会收到此错误,如何解决?
谢谢!
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long long foo = 142385141589604466688ULL;
return 0;
}
答案 0 :(得分:9)
你所表达的数字序列大概需要67位 - 也许你的“无符号长long”类型只需要(!)64位,你的数字序列不适合它等等。
如果您经常需要处理不适合64位的整数,您可能需要查看平滑支持它们的语言,例如Python(可能带有gmpy ;-)。或者,放弃语言支持并选择合适的库,例如GMP和MPIR! - )
答案 1 :(得分:4)
long long是64位,因此保持最大值2 ^ 64,其为有符号值9223372036854775807,无符号值为18446744073709551615。你的价值更大,因此它是一个太大的常数值。
选择不同的数据类型来保存您的价值。
答案 2 :(得分:2)
你得到错误是因为你的常数太大了。
来自Wikipedia:
unsigned long long
的最大值至少为18,446,744,073,709,551,615
以下是最大值和您的值:
18,446,744,073,709,551,615 // Max value
142,385,141,589,604,466,688 // Your value
了解为什么你的价值太长了?
答案 3 :(得分:0)
根据http://msdn.microsoft.com/en-us/library/s3f49ktz%28VS.100%29.aspx,无符号长long的范围是0到18,446,744,073,709,551,615。
142385141589604466688> 18446744073709551615
答案 4 :(得分:0)
您已达到硬件限制以直接表示整数。
似乎超过64位(在您的硬件上)需要通过软件构造模拟整数。有几个项目有帮助。
见BigInt
http://sourceforge.net/projects/cpp-bigint/
注意:其他人误解了long long有64位的限制
这不准确。该语言的唯一限制是:
(另请注意:目前C ++不支持long long(但C确实如此)它是您的编译器的扩展(进入下一版本的标准))
sizeof(long) <= sizeof(long long)
sizeof(long long) * CHAR_BITS >= 64 // Not defined explicitly but deducible from
// The values defined in limits.h
详情请见:
What is the difference between an int and a long in C++?