为什么llu或lld输出小值的时候无法得到正确结果?

btz201601 2016-12-27 09:24:40

如图,谢谢
...全文
527 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2016-12-28
  • 打赏
  • 举报
回复
因为提供的参数和格式并不匹配。
sdghchj 2016-12-28
  • 打赏
  • 举报
回复
printf("%ld\n",2L); printf("%lu\n",2UL); printf("%lld\n",2LL); printf("%llu\n",2ULL);
sdghchj 2016-12-28
  • 打赏
  • 举报
回复
因为2、223这些字面量默认是int类型的,4字节。 而格式化lld和llu会用8个字节的数来格式化,以2为例,2本身只占4字节,在小端字节序时,格式化时用到了2所占的4字节以及2后面4字节,该高位4字节是未定义的伪随机数,结果就是一个很大的伪随机数,如果将该大数强制转成int型,会得到2.
小灸舞 版主 2016-12-28
  • 打赏
  • 举报
回复
%llu是C语言格式化字符的一种,用于格式化输入输出函数中,比如printf和scanf。
%llu对应的数据类型为unsigned long long,这是C语言用来表示整数的最大类型。
不过对于此类型,C规范中并没有明确规定,只是在C99中建议编译器支持比long更大的整型数据类型,由于各编译器实现方式不同,导致unsigned long long 和对应的有符号类型long long并不是所有的编译器都支持。
"%lld"和"%llu"是linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。

70,028

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧