我有以下代码:
#include <iostream>
#include <limits>
int main()
{
std::cout << std::numeric_limits<unsigned long long>::digits10 << std::endl;
return 0;
}
- GCC 4.4 返回 19
- MS VS 9.0 返回 18
有人可以解释一下为什么两者之间有区别吗?无论编译器如何,我都希望这样的常量是相同的。
最佳答案
如果 Visual C++ 2008 返回 18
对于 std::numeric_limits<unsigned long long>::digits10
,这是一个错误(我没有安装 Visual C++ 2008 来验证所描述的行为)。
在 Visual C++ 中(至少对于 32 位和 64 位 Windows),unsigned long long
是 64 位无符号整数类型,能够表示 0 到 18,446,744,073,709,551,615 (264 - 1) 之间的所有整数。
因此,digits10
的正确值这里是 19 因为 unsigned long long
可以表示 9,999,999,999,999,999,999(19 位),但不能表示 99,999,999,999,999,999,999(20 位)。也就是说,它可以代表每一个19位数字,但不能代表每一个20位数字。
当使用 Visual C++ 2010 编译时,您的程序打印预期的 19。
关于c++ - GCC 和 MSVC 之间的 digits10 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925951/