考虑以下代码:
\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}\nRun Code Online (Sandbox Code Playgroud)\n使用 GCC g++ (7.5.0) 编译此代码并运行会产生预期的以下输出:
\n1: 1.84467e+19\n2: 18446744073709551615\n3: 18446744073709551615\nRun Code Online (Sandbox Code Playgroud)\n但是,使用 Microsoft Visual C++ 编译器(16.8.31019.35,64 位和 32 位)对其进行编译并运行会产生以下输出:
\n1: 1.84467e+19\n2: 9223372036854775808\n3: 9223372036854775808\nRun Code Online (Sandbox Code Playgroud)\n将值转换为 an 时unsigned long …