首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用什么格式说明符在C中打印"unsigned long long“并在控制台上获取截断值?

使用什么格式说明符在C中打印"unsigned long long“并在控制台上获取截断值?
EN

Stack Overflow用户
提问于 2010-04-27 19:52:37
回答 3查看 10.5K关注 0票数 0

类型定义无符号长长IMSI;

imsi;

当我尝试使用%llu作为格式说明符来打印它时,我得到了一个相当不相关的值。

我可以做些什么来消除这个问题?

我也在使用gcc 4.3.3,虽然我一直使用的跟踪机制可能有问题,但即使使用printf,我也遇到了同样的问题。

代码语言:javascript
复制
    imsiAsInt = 9379666465 ;
    brrm_trace(ubm_TRACE_BRRM_UECTRL,ubm_TRACE_INFO,
              UEC_IUH_ACCACHE_ENTRY_FOUND,imsiAsInt, status.ueRegCause,
              mCacheEntries.size());
    printf("printf:UEC_IUH_ACCACHE_ENTRY_FOUND=%llu, sizeof(IMSI)=%d\n",
            imsiAsInt,sizeof(IMSI));

当使用printf时,这会给出以下输出UEC_IUH_ACCACHE_ENTRY_FOUND Imsi=789731873,UeRegCause=1,CurSize=5 --> printf:UEC_IUH_ACCACHE_ENTRY_FOUND=789731873,sizeof(IMSI)=8 ->

另外,对于7位数中较小的值,我没有得到任何问题。

EN

回答 3

Stack Overflow用户

发布于 2010-04-27 20:02:12

您使用的是哪种编译器?下面的程序

代码语言:javascript
复制
#include <stdio.h>
int main()
{
  unsigned long long x;

  x = 12345;
  printf("Value: %llu\n", x);

  x = -1;
  printf("Value: %llu\n", x);

  return 0;
}

确实给出了预期的输出:

代码语言:javascript
复制
Value: 12345
Value: 18446744073709551615

在Linux上使用gcc 4.4.3

票数 2
EN

Stack Overflow用户

发布于 2010-04-27 20:47:10

这可能是一个问题:

代码语言:javascript
复制
imsiAsInt = 9379666465 ;

[Warning] integer constant is too large for 'long' type 

试试9379666465ll

票数 2
EN

Stack Overflow用户

发布于 2010-04-27 20:00:05

你没有说你使用的是什么操作系统或编译器,也没有发布代码,所以给出一个正确的答案并不容易。不过,我将尝试一下,并猜测您正在使用的MSVC旧版本不支持long long的标准printf格式说明符,因此您可能不得不使用微软的非标准%Lu替代方案来获得所需的结果。

为了将来的参考,你应该发布你的代码,并给出足够的细节让人们回答,例如,你使用的是什么操作系统和编译器。正如其他人所指出的那样,你也应该对你的接受率做些什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2720858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档