PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wieso funktioniert das? ;)



Lin728
13-04-2012, 22:46
Hi,

Nach einigem Tüfteln habe ich eine Funktion gebastelt, welche mir einen C "unsigned int" in einen java "long" Datentyp umwandelt:



long UIntToLong(int i) {
return i & 0xFFFFFFFFL;
}


Was mir dabei allerdings nicht klar ist, ist wieso der obige Code funktioniert.

Wird nicht, bevor dir mask-operation ausgeführt wird, das int implizit nach long gecastet?
Würde dabei nicht das vorzeichenbit ganz nach vorne rutschen und die anschließende Maskierung nutzlos werden?

Bitte erleuchtet mich ;)

Danke im Vorraus

sommerfee
14-04-2012, 06:36
Wird nicht, bevor dir mask-operation ausgeführt wird, das int implizit nach long gecastet?

Ja.


Würde dabei nicht das vorzeichenbit ganz nach vorne rutschen und die anschließende Maskierung nutzlos werden?

Ja, und es würde die anschließende Maskierung nicht nutzlos machen, sondern notwendig machen.

Beispiel: Der "unsigned int"-Wert ist 0xFFFFFFFE. Der wird als "int" an die Funktion übergeben, also als -2. Nach "long" gecastet ist dies natürlich immer noch -2, also intern 0xFFFFFFFFFFFFFFFE. Wir wollen aber 0xFFFFFFFE als Ergebnis, also nur die untersten 32 Bit, daher die Maskierung.