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