printf 函数采用参数类型,例如 %d 或 %i 用于 signed int . 但是,我没有看到 long 值的任何内容 .
printf
%d
%i
signed int
long
我想你的意思是:
unsigned long n; printf("%lu", n); // unsigned long
要么
long n; printf("%ld", n); // signed long
在说明符之前直接放置一个 l (小写字母L) .
l
unsigned long n; long m; printf("%lu %ld", n, m);
在大多数平台上, long 和 int 的大小相同(32位) . 不过,它确实有自己的格式说明符:
int
long n; unsigned long un; printf("%ld", n); // signed printf("%lu", un); // unsigned
对于64位,你需要一个 long long :
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" .
"%lu"
"%ld"
%ld 见printf reference on cplusplus.com
%ld
如果您打算像我一样打印 unsigned long long ,请使用:
unsigned long long
unsigned long long n; printf("%llu", n);
对于所有其他组合,我相信您使用the printf manual中的表格,获取行,然后选择您要尝试打印的类型的列标签(就像上面的 printf("%llu", n) 一样) .
printf("%llu", n)
我想回答这个问题肯定需要知道你正在使用的编译器名称和版本以及它正在编译的平台(CPU类型,操作系统等) .
7 回答
我想你的意思是:
要么
在说明符之前直接放置一个
l
(小写字母L) .在大多数平台上,
long
和int
的大小相同(32位) . 不过,它确实有自己的格式说明符:对于64位,你需要一个
long long
:哦,当然,它在Windows中有所不同:
通常,当我打印64位值时,我发现以十六进制打印它们很有帮助(通常数字很大,它们是指针或位字段) .
将打印:
顺便说一句,“长”并不意味着那么多(在主流x64上) . “int”是平台默认的int大小,通常为32位 . “长”通常是相同的大小 . 但是,它们在旧平台(以及现代嵌入式平台上)具有不同的可移植性语义 . “long long”是一个64位的数字,通常是人们想要使用的,除非他们真正知道他们在编辑一个x平台可移植代码时正在做什么 . 即便如此,他们可能会使用宏来代替捕获类型的语义(例如uint64_t) .
回到当天,"int"是16位 . 您认为现在它将是64位,但不会,这会导致疯狂的可移植性问题 . 当然,即使这是对神秘和历史丰富真相的简化 . 见wiki:Integer
这取决于,如果您指的是unsigned long,则格式化字符为
"%lu"
. 如果您指的是签名长,格式字符是"%ld"
.%ld
见printf reference on cplusplus.com如果您打算像我一样打印
unsigned long long
,请使用:对于所有其他组合,我相信您使用the printf manual中的表格,获取行,然后选择您要尝试打印的类型的列标签(就像上面的
printf("%llu", n)
一样) .我想回答这个问题肯定需要知道你正在使用的编译器名称和版本以及它正在编译的平台(CPU类型,操作系统等) .