001
13.11.2012, 08:29 Uhr
ao
(Operator)
|
Die Bit-Operatoren (&, |, ^, ~) sind für Pointer-Typen alle nicht definiert, wenn mich nicht alles täuscht. Also wie willst du das machen, "Bit für Bit" über einen Pointer zu fahren, ohne int-Cast?
Du könntest zur Compilezeit einen Test machen:
C++: |
#if (sizeof (void*) == sizeof (unsigned int)) /* Pointer und unsigned int sind gleich groß, verlustfreies Casten ist moeglich */ #elif (sizeof (void*) == sizeof (unsigned long)) /* dasselbe mit unsigned long */ #else /* Sonderfall: Pointer haben eine abweichende Groesse. Gedanken machen, wenns soweit ist. Bis dahin erst mal aussteigen. */ #error Pointer size mismatch #endif
|
Nimm für die Casterei besser unsigned-Typen, weil man bei Bit-Operationen mit Signed-Typen schon mal mit ungewollter Sign-Extension rechnen muss.
Die Mutter aller Fragen ist aber: Wozu soll das gut sein? Wozu willst du Pointer verXORen? Dieser Post wurde am 13.11.2012 um 08:33 Uhr von ao editiert. |