Warum kann man printf() in C nicht drucken zwei 64-bit-Werte zur gleichen Zeit?

Arbeite ich auf einem 32-bit-system. Wenn ich versuche zu drucken, die mehr als eine 64-bit-Wert in einer einzigen printf -, dann kann es nicht drucken, keine weiteren (d.h. 2., 3., ...) variable Werte.

Beispiel:

uint64_t a = 0x12345678;
uint64_t b = 0x87654321;
uint64_t c = 0x11111111;

printf("a is %llx & b is %llx & c is %llx",a,b,c);

Warum kann das printf nicht drucken aller Werte?

Ich bin das ändern meiner Frage

printf("a is %x & b is %llx & c is %llx",a,b,c);

by doing " dieses Ergebnis ist : ein 12345678 & b ist 8765432100000000 & c ist 1111111100000000

wenn ich bin nicht den Druck ein Wert richtig, warum dann der andere Wert sind gona ändern??

  • Was ist der output (oder Fehler), dass Sie bekommen?
  • Tatsächlich, es funktioniert: ideone.com/um0QL
  • Sie können nicht verwenden ll für uint64_t. Sie können nur ll für long long Arten. Sollten Sie die <inttypes.h> Makros!
  • Wenn ich dein code-snippet in ein komplettes Programm, es liefert die erwartete Ausgabe. Bitte geben Sie eine minimale, vollständige Beispiel-Programm zusammen mit dem erwarteten Ausgang und die Ausgabe, die Sie tatsächlich sehen. Für eine Erklärung, die zum erstellen einer minimalen komplette Programm, und warum, dass ist ein nützliches Werkzeug, finden Sie unter sscce.org.
  • Was compiler, os und compiler-Optionen verwenden Sie?
  • SB: Xcode 4.1 sagt mir %llx ist korrekt für ein uint64_t.
  • Das ist Zufall, nicht tragbar!
  • Ja, du hast Recht. PRIx64 auflöst "llx" hier, aber PRIx64 ist tragbar und "llx" ist es nicht.
  • Gut, llx ist auch portabel, es ist einfach bezieht sich auf eine andere Art! 🙂 Für unsigned long long int Sie drucken llu oder llx für unsigned long int Sie drucken lu oder lx, und für unsigned int Sie drucken u oder x. Never mind, dass diese alle sind bitweise identisch, aber Sie sind unterschiedliche Typen in der Sprache.
  • Ich meinte es ist nicht tragbar, wenn Sie nicht den Umgang mit einer lange, lange geben.
  • printf("a ist %x & b ist %llx & c ist %llx",a,b,c); dadurch ergibt sich : ein 12345678 & b ist 8765432100000000 & c ist 1111111100000000, wenn ich nicht den Druck ein Wert richtig, warum dann der andere Wert sind gona ändern??

InformationsquelleAutor Jeegar Patel | 2011-07-27
Schreibe einen Kommentar