Ich will eine zahl gröesser 2^32 in gnu cc in Hexformat ausgeben. unsigned long long int val = 4 295 000 000; val ist dann wohl unsigned long long int? also bis 64 bit. printf ("%o2x",val); Gibt: Typen passen nicht. Bei unsigned int val = 2561; geht printf ("%o2x",val); (hex a01) M.
Hallo Matthias, ich kann aus deinem Beitrag leider nicht genau erkennen was du meinst. Folgendes compiliert bei mir ohne Warnung oder sonstiges:
1 | unsigned long long int val = 4295000000; |
2 | printf ("%llx",val); |
matthias schrieb: > Ich will eine zahl gröesser 2^32 in gnu cc in Hexformat ausgeben. > > unsigned long long int val = 4 295 000 000; > val ist dann wohl unsigned long long int? also bis 64 bit. Ja, es ist größer als 2^32-1 = 4 294 967 295. Ob es long long sein muss, hängt von der ABI ab. Auf LP64 genügt long, auf ILP64 genügt int um einen 64-BIt Wert darzustellen. > printf ("%o2x",val); Um einen unsigned long long als hex auszugeben:
1 | #include <stdio.h> |
2 | |
3 | int main () |
4 | {
|
5 | printf ("%llx", -1ull); |
6 | }
|
um einen unsigned 64-Bit Wert als hex auszugeben:
1 | #include <stdio.h> |
2 | #include <inttypes.h> |
3 | |
4 | int main () |
5 | {
|
6 | printf ("%" PRIx64, UINT64_C (-1)); |
7 | }
|
Beides erfordert mindestens C99.
ja danke auf llx wär ichnicht gekommen so was wie "lllx" für __int128 Typen musste ich mir selber schreiben also ein printf_128 in dezimal. Thx // \\\// // (o|o) // --o00o-------oOOo-------------------- // printf_128 // ------------------------------------- void printf_128(__int128 path) { // Ausgabe int128 im Dezimalformat // jeweils 6 Ziffern durch Kommata getrennt int ziffer[42]; int cnt = 0; int loop; if (path ==0) printf ("0"); while (path>0) { ziffer[cnt]=path%10; path=path/10; cnt++; } for (loop = cnt-1;loop>=0;loop--) { printf("%i",ziffer[loop]); if ( (loop%6==0) && (loop>0) ) printf(","); } }
Abgesehen davon, daß die Verwendung von printf für die Ausgabe einzelner Zeichen recht ineffizient ist (ein simples putc würde hier genügen*), kann diese Routine nichts mit negativen Zahlen anfangen - sie ist also bestenfalls für uint128_t, aber nicht für int128_t geeignet. *) Für die Ausgabe einer Zahl zwischen 0 und 9 so: putc(zahl + '0');
matthias schrieb: > ja danke auf llx wär ichnicht gekommen Darauf musst du auch nicht alleine kommen, das ist dokumentiert: http://www.cplusplus.com/reference/cstdio/printf/ matthias schrieb: > printf ("%o2x",val); Durch das kleine o hinter dem % wäre das auch eine oktale Ausgabe.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.