该printf
函数采用参数类型,例如%d
或%i
用于signed int
.但是,我没有看到任何long
价值.
l
在说明符之前直接放一个(小写字母L).
unsigned long n; long m; printf("%lu %ld", n, m);
我想你的意思是:
unsigned long n; printf("%lu", n); // unsigned long
要么
long n; printf("%ld", n); // signed long
在大多数平台上,long
并且int
具有相同的大小(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
这取决于,如果你指的是unsigned long格式化字符"%lu"
.如果你指的是签名长的格式字符"%ld"
.
%ld
请参阅printf
cplusplus.com上的参考资料
如果您打算unsigned long long
像我一样打印,请使用:
unsigned long long n; printf("%llu", n);
对于所有其他组合,我相信您使用printf手册中的表格,对于您要尝试打印的任何类型,使用行,然后是列标签(printf("%llu", n)
如上所述).