小编Man*_*ack的帖子

从 long double 到 unsigned long long 的转换在 MSVC C++ 编译器中似乎被破坏

考虑以下代码:

\n
#include <iostream>\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n    long double test = 0xFFFFFFFFFFFFFFFF;\n    cout << "1: " << test << endl;\n    unsigned long long test2 = test;\n    cout << "2: " << test2 << endl;\n    cout << "3: " << (unsigned long long)test << endl;\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用 GCC g++ (7.5.0) 编译此代码并运行会产生预期的以下输出:

\n
1: 1.84467e+19\n2: 18446744073709551615\n3: 18446744073709551615\n
Run Code Online (Sandbox Code Playgroud)\n

但是,使用 Microsoft Visual C++ 编译器(16.8.31019.35,64 位和 32 位)对其进行编译并运行会产生以下输出:

\n
1: 1.84467e+19\n2: 9223372036854775808\n3: 9223372036854775808\n
Run Code Online (Sandbox Code Playgroud)\n

将值转换为 an 时unsigned long …

c++ casting visual-c++

4
推荐指数
1
解决办法
163
查看次数

标签 统计

c++ ×1

casting ×1

visual-c++ ×1