Как изменить побитовое И (&) в C?

Как изменить побитовое И (&) в C?

Например, у меня есть такая операция в C:

((unsigned int)ptr & 0xff000000))

Результат 0xbf000000. Что мне нужно в данный момент, так это то, как обратить вышесказанное, то есть определить ptr, используя результат операции и, конечно же, 0xff000000.

Есть ли простой способ реализовать это на C?


person VaioIsBorn    schedule 02.04.2010    source источник


Ответы (4)


Побитовое & не может быть отменено:

0 & 1 = 0
0 & 0 = 0
person Andrey    schedule 02.04.2010

Вы не можете этого сделать, потому что вы выбросили информацию (то есть биты) — вы не можете получить информацию из ниоткуда.

Обратите внимание, что и AND (&), и OR (|) являются деструктивными. Единственными обратимыми булевыми операциями являются XOR (^) и НЕ (~).

person Paul R    schedule 02.04.2010

Невозможный. Побитовое & 0xff000000 — это операция с потерями. Вы навсегда теряете младшие 24 бита.

person richb    schedule 02.04.2010

Вы можете только отменить XOR, так как он неразрушающий.

И ИЛИ, и И являются деструктивными.

person Steffen    schedule 02.04.2010
comment
Да, плохо, я проговорился :-) - person Steffen; 02.04.2010