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)
有人可以解释为什么两者之间有区别?无论编译器如何,我都希望这样的常量是相同的.
Jam*_*lis 10
如果Visual C++ 2008倍的回报18的std::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.