La printf
fonction prend un type d'argument, tel que %d
ou %i
pour a signed int
. Cependant, je ne vois rien pour une long
valeur.
c
printf
long-integer
Thomas Owens
la source
la source
Réponses:
Mettez une
l
(lettre L minuscule) directement avant le spécificateur.la source
printf("%ld", ULONG_MAX)
renvoie la valeur sous la forme -1. Doit êtreprintf("%lu", ULONG_MAX)
non signé aussi longtemps que décrit par @Blorgbeard ci-dessous.%ld
pour être plus harmonique avec la question OP.%l
déclenche justewarning: unknown conversion type character 0x20 in format [-Wformat]
Je pense que vous voulez dire:
ou
la source
Sur la plupart des plateformes,
long
etint
sont de la même taille (32 bits). Pourtant, il a son propre spécificateur de format:Pour 64 bits, vous voudriez
long long
:Oh, et bien sûr, c'est différent sous Windows:
Souvent, lorsque j'imprime des valeurs 64 bits, je trouve utile de les imprimer en hexadécimal (généralement avec des nombres aussi gros, ce sont des pointeurs ou des champs de bits).
imprimera:
Au fait, "long" ne veut plus dire grand-chose (sur le x64 traditionnel). "int" est la taille int par défaut de la plate-forme, généralement 32 bits. "long" est généralement de la même taille. Cependant, ils ont une sémantique de portabilité différente sur les anciennes plates-formes (et les plates-formes intégrées modernes!). "long long" est un nombre 64 bits et généralement ce que les gens ont l'intention d'utiliser à moins qu'ils ne sachent vraiment ce qu'ils faisaient en modifiant un morceau de code portable x-platform. Même alors, ils auraient probablement utilisé une macro à la place pour capturer la signification sémantique du type (par exemple uint64_t).
À l'époque, "int" était de 16 bits. On pourrait penser que ce serait maintenant 64 bits, mais non, cela aurait causé des problèmes de portabilité insensés. Bien sûr, même cela est une simplification de la vérité obscure et riche en histoire. Voir wiki: Entier
la source
long
taille 32", c'est toujours vrai. Par exemple, je suis sur Oracle Linux x86_64 / AMD64, etnvcc
unlong
est de 8 octets.Cela dépend, si vous faites référence à un long non signé, le caractère de formatage est
"%lu"
. Si vous faites référence à une signature longue, le caractère de formatage est"%ld"
.la source
%ld
voirprintf
référence sur cplusplus.comla source
Dans le cas où vous cherchez à imprimer
unsigned long long
comme moi, utilisez:Pour toutes les autres combinaisons, je pense que vous utilisez le tableau du manuel printf , en prenant la ligne, puis l'étiquette de colonne pour le type que vous essayez d'imprimer (comme je le fais
printf("%llu", n)
ci-dessus).la source
Je pense que pour répondre définitivement à cette question, il faudrait connaître le nom et la version du compilateur que vous utilisez et la plate-forme (type de processeur, système d'exploitation, etc.) pour laquelle il compile.
la source