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 bitAuf 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 == longDu müsstest also casten. Aber was ist das für ein System, wo
intnur 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,
ZeroKannst 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