记录一次printf打印64位格式不对的问题


0、问题背景

最近,在开发中准备使用一个int64_t的变量,记录64bit信息,结果在调试过程中,打印这个变量值的时候,一直是有问题的,于是去检查代码逻辑,排查半天,最后发现是源头这个打印这个变量的格式出现不对,导致log信息中显示出来的值就不太对。排查了半天时间,特此进行记录一下。

当使用printf打印64位整型(long long)时,如果没有使用正确的格式说明符%lld,会导致打印结果不正确。

1、解决方案

1.1、常见错误形式

  1. 使用%d打印64位整型:

    long long bigNum = 123456789012345;
    printf("%d\n", bigNum);  // 错误,只会打印低32位
    
  2. 在32位系统上混淆longlong long

    printf("%ld\n", bigNum);  // 在32位系统上可能出错
    
    
    

1.2 、正确打印格式

使用正确的格式符号

long long bigNum = 123456789012345;
int_64 bigNum = 123456789012345;
printf("%lld\n", bigNum);  // 正确方式

2、总结

日常使用的变量,仅仅通过%d的变量的大小的范围,就可以打印出来,这个64bitlong long类型的变量,平时开发中所使用的并不是很多,导致在比较“不容易”犯错的地方,确实是大意了。

切忌经验主义,特此记录一下。🤔

posted @ 2025-04-12 16:14  Dreams0001  阅读(48)  评论(0)    收藏  举报