printf的参数是什么,它的格式是long?

printf'函数需要一个参数类型,如%d'或%i'为signed int'。但是,我没有看到任何关于`长'值的参数。

解决办法

在指定符前直接放一个`l'(小写字母L)。

unsigned long n;
long m;

printf("%lu %ld", n, m);
评论(4)

我想你的意思是。

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

long n;
printf("%ld", n);   // signed long
评论(0)

在大多数平台上,"long "和 "int "的大小是一样的(32位)。 不过,它也有自己的格式指定器。

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

对于64位,你会想要一个 "长长"。

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

另外,"long&quot。 doesn't'不再有那么多意义了(在主流x64上)。 "int"是平台默认的int大小,通常是32位。 是平台默认的int大小,通常是32位。 "long&quot。 通常也是同样的大小。 然而,它们在旧平台(和现代嵌入式平台!)上有不同的可移植语义。 "long长&quot。 是一个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&quot。 是16位的 你'会认为现在应该是64位,但不,那会造成疯狂的可移植性问题。 当然,即使是这样,也是对玄妙而富有历史感的事实的简化。 参见wiki:Integer

评论(4)

这要看情况,如果你指的是无符号的long,格式化字符是"%lu"。 如果你指的是有符号的long,那么格式化字符是"%ld"

评论(0)

如果你像我一样想打印 "无符号长长",请使用。

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

对于所有其他的组合,我相信你可以使用printf manual中的表格,先取行,然后取列标签,不管你要打印的是什么类型(就像我上面用printf("%llu", n)做的那样)。

评论(0)

我想要明确回答这个问题,需要知道你所使用的编译器名称和版本,以及它的编译平台(CPU类型、操作系统等)。

评论(1)