为什么我需要在printf负整数值时进行类型转换

时间:2016-10-17 09:28:04

标签: c++

以下代码打印一个非常大的整数值,而不是-1。

int64_t num = -1
printf("%lld",num);

我需要输入强制转换来打印-1。

printf("%lld",(int64_t) num);

有人知道为什么吗? 这是标准的吗?或者未定义的行为可能因系统平台而异?

我使用x86 intel处理器和intel icc编译器。

1 个答案:

答案 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" } ] 提供适当的重载,假设你的平台实现了这种类型。