Question

L' printf la fonction prend un argument de type, comme les %d ou %i pour un signed int.Cependant, je ne vois pas quoi que ce soit pour un long de la valeur.

Était-ce utile?

La solution

Mettre un l (lowercase lettre L) directement avant le spécificateur.

unsigned long n;
long m;

printf("%lu %ld", n, m);

Autres conseils

Je pense que tu veux dire:

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

ou

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

Sur la plupart des plateformes, long et int sont de la même taille (32 bits).Pourtant, il possède son propre spécificateur de format:

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

Pour la version 64 bits, vous voulez un long long:

long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned

Oh, et bien sûr, c'est différent dans Windows:

printf("%l64d", n); // signed
printf("%l64u", un); // unsigned

Souvent, quand je suis à l'impression des valeurs 64 bits, je trouve utile de les imprimer au format hexadécimal (généralement avec les nombres très grands, ils sont des pointeurs ou des champs de bits).

unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"

affichera:

0x00000000DEADBEEF

Btw, "long" ne veut pas dire que plus beaucoup (sur les x64)."int" est la plate-forme par défaut int taille, généralement de 32 bits."long", c'est généralement de la même taille.Cependant, ils ont différents portabilité de la sémantique sur les anciennes plates-formes (et moderne plateformes embarquées!)."long long" est un nombre de 64 bits et généralement ce que les gens destinés à l'utilisation à moins qu'ils vraiment vraiment su ce qu'ils faisaient de l'édition d'un morceau de x-plate-forme du code portable.Même alors, ils auraient probablement utilisé une macro au lieu de capturer la sémantique du type (par exemple un 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 

Retour dans la journée, "int" est de 16 bits.Pensez-vous que ça serait maintenant en 64 bits, mais non, cela aurait provoqué un fou des problèmes de portabilité.Bien sûr, ce qui est une simplification de l'arcane et riches en histoire de la vérité.Voir wiki:Integer

Ça dépend, si vous faites référence à unsigned long de la mise en forme de caractères est "%lu".Si vous faites allusion à longue signée le caractère de mise en forme est "%ld".

Dans le cas où vous êtes à la recherche d'imprimer unsigned long long comme je l'ai été, utilisez:

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

Pour toutes les autres combinaisons, je crois que vous utilisez le tableau de le printf manuel, en prenant la ligne, la colonne étiquette quel que soit le type que vous tentez d'imprimer (comme je le fais avec printf("%llu", n) ci-dessus).

Je pense que pour répondre à cette question de façon définitive aurait besoin de connaître le compilateur nom et la version que vous utilisez et de la plate-forme (type de PROCESSEUR, système d'exploitation, etc.) qu'il est en train de compiler pour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top