为什么我需要类型转换时打印负整数值

why do I need type casting when printf negative interger value

本文关键字:打印 整数 类型转换 为什么      更新时间:2023-10-16

下面的代码输出一个非常大的整数值,而不是-1。

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

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

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

有人知道为什么吗?这是标准的吗?或者根据系统平台而变化的未定义行为?

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

我相信你的代码没有严格定义

为了输出一个int64_t类型(如果你的编译器支持,它必须是一个2的补位64位signed类型),你需要先写

#include <cinttypes>

然后使用PRId64作为格式说明符:

printf("%" PRId64, num);

如果您有比较奢侈的c++,您可以使用相当简单的std::cout,它将为int64_t提供适当的重载,假设您的平台实现了该类型。