Hallo sternst,
also mit deiner Vermutung daß der Short kleiner ist als der Int, gebe ich Dir erstmal recht.
Aber nun werde ich mal versuchen was mir das sagt:
Der Short hat in meinem Falle eine Bitbreite von 16.
Demnach bei einem "signed short " einen Wertebereich von -32768 bis+32767
Der int hat 32 Bits also bei einem signed int -2147483648 bis +2147483647
-1 wird in signed 16 Bit als 0xFFFF dargestellt.
-1 mit 32 Bit ist 0xFFFFFFFF
+12 ist in 16 Bit 0x000C
+12 in 32 Bit ist 0x00000000C
jetzt die Abfrage
if (0xFFFF < 0x000C) würde FALSE ergeben, wenn ich die Werte ohne Vorzeichen behandele,
denn 65535 ist NICHT kleiner als 12
TRUE wenn ich die Vorzeichen beachte, weil -1 nunmal kleiner ist als +12
Das Ergebnis des Compilers ist richtig, er liefert TRUE, hat also anscheinend das Vorzeichen richtig beachtet.
Würde er ohne Vorzeichen arbeiten wäre das Ergebnis FALSE weil 65535 NICHT kleiner ist als 12
Also ist das Ergenis einwandfrei bei 16 Bit Operationen.
nun der Fall für 32 Bit
if (0xFFFFFFFF < 0x000000C) würde FALSE ergeben, wenn ich die Werte ohne Vorzeichen behandele.
TRUE wenn ich die Vorzeichen beachte.
Das Ergebnis des Compilers ist aber FALSCH, er behandelt das Vorzeichen anscheinend nicht
und deshalb ist 4294967296 nicht kleiner als 12 und damit liefert er FALSE, was halt FALSCH ist.
Im Prinzip ist es mir eagal ob er die Mischung von signed und unsigned nicht hinbekommt, dann aber bitte konsequent
immer falsch, aber bitte nicht Bitanzahl abhängig.
Mir ist der Arbeitsweise hier leider nicht einleuchtend. Vielleicht denke ich immer noch zu viel in Assembler ???
Eigentlich spielt das doch gar keine Rolle wie viele Bits ich für einen signed bzw. unsigned benutze. Dafür
gibt es doch eine Rechenvorschrift, die hier anscheinend nicht immer identisch "verhackstückt" wird.
Ich verstehe es wirklich nicht,
komme nicht dahinter,
Siro
Lesezeichen