以下代码打印一个非常大的整数值,而不是-1.
int64_t num = -1
printf("%lld",num);
Run Code Online (Sandbox Code Playgroud)
我需要输入cast来打印-1.
printf("%lld",(int64_t) num);
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?这是标准的吗?或不确定的行为,可能会有所不同,具体取决于系统平台?
我使用x86 intel处理器和intel icc编译器.
我相信你的代码没有严格定义.
为了输出一个int64_t类型(如果你的编译器支持它,必须是2的补码64位signed类型),你需要先写
#include <cinttypes>
Run Code Online (Sandbox Code Playgroud)
然后使用PRId64格式specfier:
printf("%" PRId64, num);
Run Code Online (Sandbox Code Playgroud)
如果您具有C++的比较奢侈品,那么假设您的平台实现了该类型,您可以使用相当简单且std::cout具有适当重载的int64_t.