Die printf
Funktion nimmt einen Argumenttyp an, z. B. %d
oder %i
für a signed int
. Für einen long
Wert sehe ich jedoch nichts .
c
printf
long-integer
Thomas Owens
quelle
quelle
Antworten:
Setzen Sie einen
l
(Kleinbuchstaben L) direkt vor den Bezeichner.quelle
printf("%ld", ULONG_MAX)
gibt den Wert als -1 aus. Sollte lange ohneprintf("%lu", ULONG_MAX)
Vorzeichen sein, wie unten von @Blorgbeard beschrieben.%ld
, dass es harmonischer mit der OP-Frage ist.%l
löst nur auswarning: unknown conversion type character 0x20 in format [-Wformat]
Ich denke du meinst:
oder
quelle
Auf den meisten Plattformen
long
undint
gleich groß (32 Bit). Trotzdem hat es einen eigenen Formatbezeichner:Für 64 Bit möchten Sie Folgendes
long long
:Oh, und natürlich ist es in Windows anders:
Wenn ich 64-Bit-Werte drucke, finde ich es häufig hilfreich, sie hexadezimal zu drucken (normalerweise mit so großen Zahlen, dass es sich um Zeiger oder Bitfelder handelt).
wird drucken:
Übrigens bedeutet "lang" nicht mehr so viel (auf Mainstream x64). "int" ist die Standardgröße der Plattform, normalerweise 32 Bit. "lang" ist normalerweise gleich groß. Sie haben jedoch unterschiedliche Portabilitätssemantiken auf älteren Plattformen (und modernen eingebetteten Plattformen!). "long long" ist eine 64-Bit-Zahl und normalerweise das, was die Leute verwenden wollten, es sei denn, sie wussten wirklich, was sie beim Bearbeiten eines tragbaren X-Plattform-Codes taten. Selbst dann hätten sie wahrscheinlich stattdessen ein Makro verwendet, um die semantische Bedeutung des Typs zu erfassen (z. B. uint64_t).
Früher war "int" 16 Bit. Sie würden denken, es wären jetzt 64 Bit, aber nein, das hätte verrückte Portabilitätsprobleme verursacht. Selbst dies ist natürlich eine Vereinfachung der arkanen und geschichtsträchtigen Wahrheit. Siehe Wiki: Integer
quelle
long
Größe von 32 haben" noch wahr ist. ZB bin ich unter Oracle Linux x86_64 / amd64 und mitnvcc
along
ist 8 Bytes.Es hängt davon ab, ob das Formatierungszeichen auf unsigned long verweist
"%lu"
. Wenn Sie sich auf lange signiert beziehen, lautet das Formatierungszeichen"%ld"
.quelle
%ld
sieheprintf
Referenz auf cplusplus.comquelle
Wenn Sie so drucken möchten,
unsigned long long
wie ich es war, verwenden Sie:Ich glaube, Sie verwenden für alle anderen Kombinationen die Tabelle aus dem printf-Handbuch , indem Sie die Zeilen- und dann die Spaltenbezeichnung für den Typ verwenden, den Sie drucken möchten (wie
printf("%llu", n)
oben beschrieben).quelle
Um diese Frage endgültig zu beantworten, müssen Sie den Namen und die Version des Compilers, die Sie verwenden, und die Plattform (CPU-Typ, Betriebssystem usw.) kennen, für die er kompiliert wird.
quelle