以下代码打印一个非常大的整数值,而不是-1。
int64_t num = -1
printf("%lld",num);
我需要输入强制转换来打印-1。
printf("%lld",(int64_t) num);
有人知道为什么吗? 这是标准的吗?或者未定义的行为可能因系统平台而异?
我使用x86 intel处理器和intel icc编译器。
答案 0 :(得分:5)
我相信您的代码不是严格明确定义。
为了输出int64_t
类型(如果你的编译器支持它,必须是2的补码64位signed
类型),你需要先写
#include <cinttypes>
然后使用PRId64
作为格式规范:
printf("%" PRId64, num);
如果你有比较奢侈的C ++,你可以使用相当简单的std::cout
int64_t
,它会为 [
{
"englishDefault": "Previous question",
"default": "TODO"
},
{
"englishDefault": "Next question",
"default": "TODO"
}
]
提供适当的重载,假设你的平台实现了这种类型。