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.

 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten