48-Bit Zahl Multiplizieren und Hexwert ausgeben



  • Hallo zusammen,

    ich habe ein Problem mit einer Berechnung.

    Ich muss eine Zahl(z.B.: 10000000) mit der Zahl 2^48(281474976710656) multiplizieren und durch eine andere Zahl (50000000) dividieren.

    Dieses Ergebniss muss ich in Hex-form(0x333333333333) darstellen.

    Ich finde überhaupt keinen Ansatz. Kann mir jemand weiterhelfen?

    Danke

    Torsten



  • wo liegt das problem? findest du keinen datentyp in den 2^48 reingeht?

    long long a=1;
    a <<= 48;
    /* long long a = 1<<48 geht nicht, da die konstante dann glaub zuerst als int ausgewertet wird und ein integer ja nur 32 bits hat */
    

    jetzt musst noch multiplizieren und dividieren u.u. auch double verwenden, da sonst der rest der division wegfällt. zum ausgeben dann nur noch

    printf("%I64d\n", a); /* der gnu und der ms compiler unterstützt die formatierung, für hex zahlen dann halt statt dem d ein x */
    


  • Hallo blobby ,

    vielen Dank für die schnelle antwort.
    ich verwende den GCC auf basis eines Mikrocontrollers. Dieser kennt den Typen long long nicht.

    Es muss irgendwie mit dem VariablenTyp INT gehen.

    Danke und Gruß
    Torsten



  • hast du vielleicht 'int64_t'?
    oder vielleicht tut's auch 'double'? allerdings geht die genauigkeit dabei vor die hunde.
    🙂



  • Der GCC kennt normalerweise den Typ long long (und long long ist auf Basis des Typs int. Es ist nur eine Abkürzung für long long int).

    Im Zweifelsfall musst du eben den Wert auf mehrere kleinere Integer aufteilen. Multiplikation geht dann so

    a,b * c,d = a*c,a*d+b*c,c*d



  • Hallo rüdiger,

    vielen vielen dank.

    Ich überprüfe deine Aussage.
    Aber eine Frage habe ich noch.... Wo zu teufel bekommt man diese Information her?

    Vielen Dank

    Gruß

    Torsten



  • Torsten_T schrieb:

    Wo zu teufel bekommt man diese Information her?

    Welche Information? Dass der GCC long long kann? Aus dem GCC Handbuch.


Anmelden zum Antworten