繁体   English   中英

为什么在printf负整数值时需要强制类型转换

[英]why do I need type casting when printf negative interger value

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

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

我需要键入强制类型才能打印-1。

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

有谁知道为什么吗? 是标准的吗? 还是不确定的行为(取决于系统平台)?

我使用x86英特尔处理器和英特尔icc编译器。

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

为了输出int64_t类型(如果您的编译器支持,则必须为2的补码64位有signed类型),您需要首先编写

#include <cinttypes>

然后使用PRId64作为格式规范:

printf("%" PRId64, num);

如果您拥有C ++的比较优势,则可以使用相当简单的std::cout ,假设您的平台实现了该类型,则它将对int64_t具有适当的重载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM