623 Stimmen

Was ist das Argument für printf, das einen long formatiert?

El printf Funktion nimmt einen Argumenttyp an, z. B. %d o %i für eine signed int . Ich sehe jedoch nichts für eine long Wert.

802voto

postfuturist Punkte 21433

Setzen Sie eine l (Kleinbuchstabe L) direkt vor dem Bezeichner.

unsigned long n;
long m;

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

206voto

Blorgbeard Punkte 96796

Ich glaube, Sie meinen:

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

oder

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

103voto

Dave Dopson Punkte 39640

Auf den meisten Plattformen, long y int die gleiche Größe haben (32 Bit). Dennoch hat es seinen eigenen Formatbezeichner:

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

Für 64 Bit benötigen Sie eine long long :

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

Oh, und natürlich ist es unter Windows anders:

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

Wenn ich 64-Bit-Werte ausdrucke, finde ich es oft hilfreich, sie in Hexadezimal zu drucken (bei so großen Zahlen handelt es sich in der Regel um Zeiger oder Bitfelder).

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

wird gedruckt:

0x00000000DEADBEEF

Übrigens bedeutet "long" nicht mehr so viel (auf Mainstream-x64). "int" ist die Standardgröße der Plattform, typischerweise 32 Bit. "long" hat normalerweise die gleiche Größe. Sie haben jedoch eine unterschiedliche Portabilitätssemantik auf älteren Plattformen (und modernen Embedded-Plattformen!). "long long" ist eine 64-Bit-Zahl und in der Regel das, was die Leute verwenden wollten, es sei denn, sie wussten wirklich, was sie taten, als sie ein Stück portablen Code für die x-Plattform bearbeiteten. Selbst dann hätten sie wahrscheinlich stattdessen ein Makro verwendet, um die semantische Bedeutung des Typs zu erfassen (z. B. 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 

Damals war "int" 16 Bit lang. Man sollte meinen, dass es jetzt 64 Bits sind, aber nein, das hätte wahnsinnige Portabilitätsprobleme verursacht. Natürlich ist selbst dies eine Vereinfachung der geheimnisvollen und geschichtsträchtigen Wahrheit. Siehe wiki:Ganzzahlig

17voto

Rob Walker Punkte 45267

17voto

krato Punkte 1156

Es kommt darauf an. Wenn Sie sich auf unsigned long beziehen, ist das Formatierungszeichen "%lu" . Wenn Sie sich auf die Vorzeichenlänge beziehen, ist das Formatierungszeichen "%ld" .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X