Ergebnis von 16 Bit Multiplikation? Wieder 16 Bit oder 32 Bit?



  • Hallo C++ler,

    kann mir jemand weiterhelfen?

    Wer legt fest, ob das Ergebnis von zwei 16-Bit-Variablen wiederum ein 16 Bit Wert ergibt oder einen 32 Bit Wert.

    Ich habe folgenden Fall:

    int a = 30000, b = 10; // int = 16 bit
    long result = a * b;   // long = 32 bit
    

    Auf 2 Prozessoren hatte ich unterschiedliche Ergebnisse.
    Einmal war das Ergebnis 300000, ein andermal -27679.

    Legt der Standard fest, wie das Ergebnis sein muss oder ist das compilerabhängig?

    Greets,
    Zero



  • Stichwort Integral Promotion, in Kürze etwa: Das Ergebnis von Ganzzahlarithmetik hat mindestens int -Genauigkeit bzw. den genaueren Typen beider Operanden.

    short * short == int
    int   * int   == int
    long  * int   == long
    

    Du müsstest also casten. Aber was ist das für ein System, wo int nur 16 Bit gross ist?



  • Hallo,
    vielen Dank für den Beitrag.

    int ist auf meinem DSP von TI 16 Bit groß (sizeof(int)) liefert hier sogar 1, 1 entspricht 16 Bit.

    Danke nochmals,
    Zero



  • Zero_Clamping schrieb:

    Hallo,
    vielen Dank für den Beitrag.

    int ist auf meinem DSP von TI 16 Bit groß (sizeof(int)) liefert hier sogar 1, 1 entspricht 16 Bit.

    Danke nochmals,
    Zero

    Kannst du mal die Ausgabe von

    #include <climits>
    #include <cstsio>
    
    int main()
    {
      std::printf("bits: %d\n", CHAR_BIT);
    }
    

    posten? Würde mich interessieren ob die Konstante auf diesem System dann 16 ist.



  • Hallo,

    short int, int und char sind in dem Fall sogar dasselbe.
    Alles 16 bit Variablen,
    alle sizeof-Operatoren auf diese Datentypen liefern 1.

    So ist es eben 🙂

    Damit macht die erste Aussage auch Sinn:

    short * short = int

    Wenn int jetzt eben nur 16 Bit sind, dann ist das erwartete Ergebnis ok.

    Zero


Anmelden zum Antworten