GCC和MSVC之间的数字10的差异

Rik*_*der 5 c++ gcc digits visual-c++ numeric-limits

我有以下代码:

#include <iostream>
#include <limits>

int main()
{
   std::cout << std::numeric_limits<unsigned long long>::digits10 << std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • GCC 4.4返回19
  • MS VS 9.0返回18

有人可以解释为什么两者之间有区别?无论编译器如何,我都希望这样的常量是相同的.

Jam*_*lis 10

如果Visual C++ 2008倍的回报18std::numeric_limits<unsigned long long>::digits10,这是一个错误(我没有安装Visual C++ 2008安装验证所描述的行为).

在Visual C++中(至少对于32位和64位Windows),unsigned long long是64位无符号整数类型,并且能够表示零到18,446,744,073,709,551,615(2 64 - 1)之间的所有整数.

因此,digits10这里的正确值是19,因为a 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.

  • oooooooh.我明白了,所以这是一个内在和最高限度的问题.谢谢! (5认同)