Frage

Der printf Die Funktion benötigt einen Argumenttyp, z. B %d oder %i Für ein signed int.Ich sehe jedoch nichts für a long Wert.

War es hilfreich?

Lösung

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

unsigned long n;
long m;

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

Andere Tipps

Ich denke du meinst:

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

oder

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

Auf den meisten Plattformen long Und int sind gleich groß (32 Bit).Dennoch verfügt es über einen 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 drucke, finde ich es oft hilfreich, sie in Hexadezimalform auszudrucken (normalerweise handelt es sich bei so großen Zahlen 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 drucken:

0x00000000DEADBEEF

Übrigens bedeutet „lang“ nicht mehr so ​​viel (auf Mainstream-x64).„int“ ist die standardmäßige int-Größe der Plattform, normalerweise 32 Bit.„lang“ ist normalerweise gleich groß.Allerdings weisen sie auf älteren Plattformen (und modernen eingebetteten Plattformen!) eine unterschiedliche Portabilitätssemantik auf.„long long“ ist eine 64-Bit-Zahl und normalerweise das, was die Leute verwenden wollten, es sei denn, sie wussten wirklich, was sie taten, indem sie einen tragbaren 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 bestand „int“ aus 16 Bit.Man könnte meinen, dass es jetzt 64 Bit wäre, aber nein, das hätte wahnsinnige Portabilitätsprobleme verursacht.Natürlich ist auch dies eine Vereinfachung der geheimnisvollen und geschichtsträchtigen Wahrheit.Sehen Wiki:Ganzzahl

Es hängt davon ab, ob das Formatierungszeichen unsigned long ist "%lu".Wenn Sie sich auf „Signed Long“ beziehen, lautet das Formatierungszeichen "%ld".

Falls Sie drucken möchten unsigned long long wie ich war, verwenden Sie:

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

Für alle anderen Kombinationen verwenden Sie meines Erachtens die Tabelle aus das printf-Handbuch, nehmen Sie die Zeilen- und dann die Spaltenbeschriftung für den Typ, den Sie drucken möchten (wie ich es mit mache). printf("%llu", n) über).

Ich denke, um diese Frage definitiv zu beantworten, müsste man den Namen und die Version des Compilers kennen, den Sie verwenden, sowie die Plattform (CPU-Typ, Betriebssystem usw.), für die er kompiliert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top