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.