bits shift fehler



  • Ich habe folgende Zeile:

    M = ((E > 127) ? (M << (E-127)) : (M >> (127-E)));
    

    M ist ein uint32.
    Wenn E = 9 dann sollte doch M = 0 sein.
    Egal welchen Wert M hat da die bits um 118 stellen geschiftet werden und immer Nullen nachruecken...
    Ich bekomme aber eine 2 als wert fuer M und sehe keinen Fehler.
    Wenn ihn einer von euch sieht und ihn mir nennen koennte waere das grossartig.



  • Wie willst du einen uint32 (ich nehme mal stark an, daß es 4 Byte sind -) um 118 Stellen shiften? Der Shift-Operator ist (für Intel/AMD) nur bis 31 definiert...

    Es werden also nur die untersten 5 Bits beachtet:
    bei 118 also (118 & 31) = 22.

    Wie du allerdings dann konkret auf 2 als Ergebnis kommst, weiß ich auch nicht.

    (Such mal im Internet nach "right shift intel 31", dann erfährst du mehr darüber.)



  • Ja danke, der Standard (ISO/IEC: 9899:1999) sagt dazu:

    If the value of the right operand is negative or is
    greater than or equal to the width of the promoted left operand, the behavior is undefined.


Anmelden zum Antworten