最佳答案
编译以下代码:
double getDouble()
{
double value = 2147483649.0;
return value;
}
int main()
{
printf("INT_MAX: %u\n", INT_MAX);
printf("UINT_MAX: %u\n", UINT_MAX);
printf("Double value: %f\n", getDouble());
printf("Direct cast value: %u\n", (unsigned int) getDouble());
double d = getDouble();
printf("Indirect cast value: %u\n", (unsigned int) d);
return 0;
}
输出(MSVC x86) :
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483648
Indirect cast value: 2147483649
输出(MSVC x64) :
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483649
Indirect cast value: 2147483649
在 Microsoft 文档中,从 double
到 unsigned int
的转换中没有提到有符号整数 max 值。
当返回一个函数时,所有高于 INT_MAX
的值都被截断为 2147483648
。
我使用 Visual Studio 2019来构建程序,这在 GCC上是不会发生的。
我是不是做错了什么? 有没有安全的方法把 double
转换成 unsigned int
?