C:隐式常量转换中的溢出\[-Woverflow\]

新手上路,请多包涵
long long sum;
sum=pow(10,19);
cout<<sum;

上面的 C++ 代码 给出了错误:

隐式常量转换溢出 [-Woverflow]

虽然以下代码运行良好:

 long long sum;
sum=pow(10,18);
cout<<sum;

可能是什么问题?

原文由 mach 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 956
2 个回答

问题是 long long 太小而无法容纳 pow(10,19) 的结果。

long long 通常是 64 位,一个 64 位整数可以容纳大约。 1.8*10^19 个不同的值。然而,由于它是有符号的,你只能得到它的一半(另一半是负值)。其中一半是 0.9*10^19,显然小于 10^19。

另一个问题(但不是警告/溢出的原因)是 pow() 函数返回一个浮点值。因此,即使结果适合 long long - 它不适合 - 您可能会失去一些精度并且无法获得确切的整数结果。

编辑:当然,您可以使用 unsigned long long 代替这种情况。这对于 10 ^ 19 来说已经足够了,但对于 10 ^ 20 来说还不够。因此,当您使用不适合 unsigned long long 的类似大数字时,您只是将问题推迟到以后。

原文由 Striezel 发布,翻译遵循 CC BY-SA 3.0 许可协议

long long 最大值仅为 9223372036854 775 807 而 pow(10,19) 是更大的数字 10000000000000000000

原文由 Angen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题