Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Wieso funktioniert das? ;)

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Wieso funktioniert das? ;)

    Hi,

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

    Code:
    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
    Geändert von Lin728 (21-08-2017 um 16:15 Uhr)

  2. #2
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von ceisserer Beitrag anzeigen
    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.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •