De functie printf
heeft een argumenttype, zoals %d
of %i
voor een signed int
. Ik zie echter niets voor een long
waarde.
Antwoord 1, autoriteit 100%
Zet een l
(kleine letter L) direct voor de specificatie.
unsigned long n;
long m;
printf("%lu %ld", n, m);
Antwoord 2, autoriteit 29%
Ik denk dat je bedoelt:
unsigned long n;
printf("%lu", n); // unsigned long
of
long n;
printf("%ld", n); // signed long
Antwoord 3, autoriteit 12%
Op de meeste platforms zijn long
en int
even groot (32 bits). Toch heeft het zijn eigen formaatspecificatie:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
Voor 64 bits wil je een long long
:
long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned
O, en natuurlijk is het anders in Windows:
printf("%l64d", n); // signed
printf("%l64u", un); // unsigned
Als ik 64-bits waarden afdruk, vind ik het vaak handig om ze in hex af te drukken (meestal met zulke grote getallen, het zijn aanwijzers of bitvelden).
unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
zal afdrukken:
0x00000000DEADBEEF
Trouwens, “lang” betekent niet zoveel meer (op mainstream x64). “int” is de standaard int-grootte van het platform, meestal 32 bits. “lang” is meestal even groot. Ze hebben echter verschillende draagbaarheidssemantiek op oudere platforms (en moderne embedded platforms!). “long long” is een 64-bits nummer en meestal bedoelden mensen het te gebruiken, tenzij ze echt wisten wat ze aan het doen waren met het bewerken van een stuk draagbare x-platformcode. Zelfs dan hadden ze waarschijnlijk een macro gebruikt om de semantische betekenis van het type vast te leggen (bijv. 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
Vroeger was ‘int’ 16 bits. Je zou denken dat het nu 64 bits zou zijn, maar nee, dat zou waanzinnige draagbaarheidsproblemen hebben veroorzaakt. Natuurlijk is zelfs dit een vereenvoudiging van de mysterieuze en geschiedenisrijke waarheid. Zie wiki:Integer
Antwoord 4, autoriteit 2%
Het hangt ervan af, of u verwijst naar lang zonder teken, het opmaakteken "%lu"
is. Als u verwijst naar lang ondertekend, is het opmaakteken "%ld"
.
Antwoord 5, autoriteit 2%
%ld
zie printf
referentie op cplusplus.com
Antwoord 6, autoriteit 2%
Als je unsigned long long
wilt afdrukken zoals ik was, gebruik dan:
unsigned long long n;
printf("%llu", n);
Voor alle andere combinaties gebruik je volgens mij de tabel uit de printf-handleiding, waarbij u de rij en vervolgens het kolomlabel neemt voor het type dat u probeert af te drukken (zoals ik doe met printf("%llu", n)
hierboven).
Antwoord 7
Ik denk dat om deze vraag definitief te beantwoorden, je de compilernaam en -versie die je gebruikt en het platform (CPU-type, besturingssysteem enz.) waarvoor het compileert moet weten.