2010-04-02 16 views
9

Cómo invertir en bits AND (&) en C?Cómo invertir en bits AND (&) en C?

Por ejemplo, tengo una operación en C como esto:

((unsigned int)ptr & 0xff000000)) 

El resultado es 0xbf000000. Lo que necesito en este momento es cómo invertir lo anterior, es decir, determine ptr utilizando el resultado de la operación y, por supuesto, 0xff000000.

¿Hay alguna manera simple de implementar esto en C?

Respuesta

22

bit a bit & no puede ser revertida:

0 & 1 = 0 
0 & 0 = 0 
3

Imposible. Bitwise & de 0xff000000 es una operación con pérdida. Pierdes los 24 bits inferiores de forma permanente.

15

No se puede hacer eso, ya que han tirado de la información (es decir, bits) - no se puede obtener información de vuelta de la nada.

Tenga en cuenta que tanto AND (&) y OR (|) son destructivos. Las únicas operaciones booleanas que son reversibles son XOR (^) y NO (~).

1

Solo puede revertir XOR, ya que no es destructivo.

Tanto el O como el AND son destructivos.

+5

Puede invertir "no" también. –

+0

Sí, por supuesto, mi mal dejo que eso resbale :-) – Steffen