Was ist das Argument dafür, dass printf eine lange Datei formatiert?
-
09-06-2019 - |
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.
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"
.
%ld
sehen printf
Referenz auf cplusplus.com
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.