2010-04-02 4 views
9

Comment faire pour inverser ET binaire (&) dans C?Comment faire pour inverser ET (&) au niveau du bit dans C?

Par exemple, j'ai une opération en C comme ceci:

((unsigned int)ptr & 0xff000000)) 

Le résultat est 0xbf000000. Ce dont j'ai besoin en ce moment, c'est comment inverser ce qui précède, c'est-à-dire déterminer ptr en utilisant le résultat de l'opération et bien sûr 0xff000000.

Existe-t-il un moyen simple d'implémenter ceci dans C?

Répondre

22

Bitwise & ne peut pas être inversée:

0 & 1 = 0 
0 & 0 = 0 
3

Impossible. Bitwise & de 0xff000000 est une opération avec perte. Vous perdez les 24 bits inférieurs en permanence.

15

Vous ne pouvez pas faire cela parce que vous avez jeté l'information (à savoir les bits) - vous ne pouvez pas obtenir des informations de retour de nulle part.

Notez que les deux AND (&) et OR (|) sont destructrices. Les seules opérations booléennes réversibles sont XOR (^) et NOT (~).

1

Vous pouvez uniquement inverser XOR, car il est non destructif.

OR et AND sont destructifs.

+5

Vous pouvez inverser "non" aussi. –

+0

Ouais euh, mon mauvais je laisse ça glisser :-) – Steffen

Questions connexes