我有以下代码:
#include <iostream>
#include <limits>
int main()
{
std::cout << std::numeric_limits<unsigned long long>::digits10 << std::endl;
return 0;
}有人能解释一下为什么两者之间有区别吗?我本以为无论编译器如何,这样的常数都是相同的。
发布于 2011-05-08 06:26:43
numeric_limits::digits10指定小数点左侧的小数位数,这些数字可以在不丢失精度的情况下表示。因此,我猜根据它们的实现细节,编译器和编译器之间可能会有所不同。
发布于 2014-01-16 06:55:46
总的来说,声明
无论编译器如何,
I都希望这样的常量是相同的。
因为C中类型的大小不是固定的,所以不正确。标准只规定最低限度,编译器可以自由使用更广泛的类型。例如,在32位或64位计算机上的一些奇怪的编译器可能有CHAR_BIT = 9和unsigned long long不再是64位,或者它可能使用不同的1的补码或其他一些数字编码。简而言之,结果可能因编译器而异。
但是,如果unsigned long long是64位类型,那么它肯定是一个bug。我刚检查了一下,发现这个bug在VS 2008中已经修复了。返回正确的值19。
https://stackoverflow.com/questions/5925951
复制相似问题