Как поменять местами AND (&) в C? - PullRequest
11 голосов
/ 02 апреля 2010

Как инвертировать поразрядное И (&) в C?

Например, у меня есть операция на C, подобная этой:

((unsigned int)ptr & 0xff000000))

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

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

Ответы [ 4 ]

24 голосов
/ 02 апреля 2010

Побит & не может быть обращено:

0 & 1 = 0
0 & 0 = 0
16 голосов
/ 02 апреля 2010

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

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

3 голосов
/ 02 апреля 2010

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

1 голос
/ 02 апреля 2010

Вы можете только обратить XOR, поскольку это не разрушительно.

ИЛИ и И разрушительны.

...