相关疑难解决方法(0)

在 Win32 上双转换为 unsigned int 被截断为 2,147,483,648

编译以下代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

输出 (MSVC x86):

INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483648
Indirect cast value: 2147483649
Run Code Online (Sandbox Code Playgroud)

输出 (MSVC x64):

INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483649
Indirect cast value: …
Run Code Online (Sandbox Code Playgroud)

c floating-point x86 casting visual-c++

85
推荐指数
3
解决办法
4462
查看次数

标签 统计

c ×1

casting ×1

floating-point ×1

visual-c++ ×1

x86 ×1