如何在 C 中打印“unsigned long”?
Posted
技术标签:
【中文标题】如何在 C 中打印“unsigned long”?【英文标题】:How to printf "unsigned long" in C? 【发布时间】:2011-03-13 16:49:04 【问题描述】:我永远无法理解如何在 C 中打印 unsigned long
数据类型。
假设unsigned_foo
是unsigned long
,那么我试试:
printf("%lu\n", unsigned_foo)
printf("%du\n", unsigned_foo)
printf("%ud\n", unsigned_foo)
printf("%ll\n", unsigned_foo)
printf("%ld\n", unsigned_foo)
printf("%dl\n", unsigned_foo)
他们都打印出某种-123123123
数字,而不是我拥有的unsigned long
。
【问题讨论】:
【参考方案1】:%lu
是 unsigned long
的正确格式。听起来这里还有其他问题,例如内存损坏或未初始化的变量。也许给我们看一张更大的图?
【讨论】:
糟糕,%lu
这次成功了。谢谢。之前肯定发生过其他事情,但没有奏效。
@bodacydo:如果您有错误,它可能会以半随机的方式出现...在尝试打印之前确保您的变量具有有效值。
即使变量未初始化,当格式说明符为%lu
时,printf 也不应该达到可以打印减号的程度。从技术上讲,这是未定义的行为,但实际上该变量具有不可预测的值,该值被传递给 printf,然后 printf 将其解释为无符号。我猜 bodacydo 最初的问题是流程到达了不正确的 printf 调用,而不是预期的调用......
@Anisha Kaul:%lu 是有效的转换规范,%ul 不是。 %lu
,分解为:%
— 启动“转换规范”; l
— 长度修饰符,l
表示“[unsigned] long int”; u
— 转换说明符 u
用于将 unsigned int
打印为十进制。因为我们给了长度修饰符l
,所以它接受unsigned long int
。字母必须按以下顺序排列:百分比、长度、转换。 (您可以添加更多选项,例如宽度和精度。参见手册页,因为它精确地记录了所有这些内容!)
%ul 将只打印无符号(带 %u),然后逐字打印字母“l”。正如“%uw”将打印无符号,后跟字母“w”。 % 开始 convspec,u(或其他字符,如 d、s、c...)结束它。【参考方案2】:
对于 int %d
对于long int %ld
对于 long long int %lld
对于 unsigned long long int %llu
【讨论】:
【参考方案3】:%lu
代表 unsigned long
%llu
代表 unsigned long long
【讨论】:
尤达约定:"unsigned long" "(l)ong (u)nsigned" 是。【参考方案4】:在您尝试的所有组合中,%ld
和 %lu
是唯一有效的 printf 格式说明符。 %lu
(长无符号十进制)、%lx
或 %lX
(带有小写或大写字母的长十六进制)和 %lo
(长八进制)是 unsigned long 类型变量的唯一有效格式说明符(当然您可以在%
和l
之间添加字段宽度、精度等修饰符。
【讨论】:
%ld 可以正常工作,直到 std::numeric_limitsprintf
被指定为需要完全正确的参数类型,而没有 va_arg
所拥有的余量。【参考方案5】:
int main()
unsigned long long d;
scanf("%llu",&d);
printf("%llu",d);
getch();
这会很有帮助。 . .
【讨论】:
【参考方案6】:格式为%lu
。
请检查 printf here 中的各种其他数据类型及其用法
【讨论】:
那里记录了各种非标准行为,但没有将其标记为非标准。 POSIX 是最容易访问的 printf 在线标准;超出 ISO C 的扩展都标有“CX”标签:opengroup.org/onlinepubs/9699919799/functions/fprintf.html【参考方案7】:无符号长整数的正确说明符是%lu
。
如果您没有得到您期望的确切值,那么您的代码中可能存在一些问题。
请在此处复制您的代码。那么也许有人可以更好地告诉你问题所在。
【讨论】:
以上是关于如何在 C 中打印“unsigned long”?的主要内容,如果未能解决你的问题,请参考以下文章
如何打印大于“unsigned long long”的“std::bitset”的十进制值?
(lldb) 以十六进制打印 unsigned long long
在 C 中给出 unsigned long long 变量值的警告
c语言里的无符号unsigned long ulZ = unsigned long dJDM,在java里怎么办?用long型没有c那么大的数值。