Es gibt Operationen, die sind umkehrbar und andere, die NICHT umkehrbar sind.
Dein Beispiel ist nicht umkehrbar. Mit einer kleiner Änderung gehts aber doch:
Address2 := (Address and $000FFFFF) or (UserID shl 21);
Und wieder zurück:
Delphi-Quellcode:
Adress := Address2 and $000FFFFF;
UserID := Address2 shr 21;
Natürlich haben UserID und Adress einen begrenzten Wertebereich!