printf的格式很长的论点是什么?

筅森魡賤 提交于 2020-02-27 20:51:33

printf函数采用参数类型,例如%d%i用于signed int 。 但是,我没有看到任何long价值的东西。


#1楼

如果您打算像我一样打印unsigned long long ,请使用:

unsigned long long n;
printf("%llu", n);

对于所有其他组合,我相信您使用printf手册中的表格,对于您尝试打​​印的任何类型的行,然后是列标签(就像我上面的printf("%llu", n) )。


#2楼

在大多数平台上, longint的大小相同(32位)。 不过,它确实有自己的格式说明符:

long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned

对于64位,你需要很long long

long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned

哦,当然,它在Windows中有所不同:

printf("%l64d", n); // signed
printf("%l64u", un); // unsigned

通常,当我打印64位值时,我发现以十六进制打印它们很有帮助(通常数字很大,它们是指针或位字段)。

unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"

将打印:

0x00000000DEADBEEF

顺便说一句,“长”并不意味着那么多(在主流x64上)。 “int”是平台默认的int大小,通常为32位。 “长”通常是相同的大小。 但是,它们在旧平台(以及现代嵌入式平台上)具有不同的可移植性语义。 “long long”是一个64位数字,通常是人们想要使用的,除非他们真的知道他们在编辑一个x平台可移植代码时正在做什么。 即便如此,他们可能会使用宏来代替捕获类型的语义(例如uint64_t)。

char c;       // 8 bits
short s;      // 16 bits
int i;        // 32 bits (on modern platforms)
long l;       // 32 bits
long long ll; // 64 bits 

在当天,“int”是16位。 您认为现在它将是64位,但不会,这会导致疯狂的可移植性问题。 当然,即使这是对神秘和历史丰富真相的简化。 请参阅wiki:Integer


#3楼

这取决于,如果您指的是unsigned long,则格式化字符为"%lu" 。 如果您指的是signed long,格式化字符为"%ld"


#4楼

%ld 在cplusplus.com上查看printf参考


#5楼

在说明符之前直接放置l (小写字母L)。

unsigned long n;
long m;

printf("%lu %ld", n, m);
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!