16

如何在C中反转按位与(&)?

例如,我在 C 中有这样的操作:

((unsigned int)ptr & 0xff000000))

结果是0xbf000000。我现在需要的是如何扭转上述情况,即ptr通过使用操作的结果来确定,当然0xff000000

有什么简单的方法可以在 C 中实现吗?

4

4 回答 4

31

按位&不能反转:

0 & 1 = 0
0 & 0 = 0
于 2010-04-02T10:52:06.327 回答
19

你不能这样做,因为你已经丢弃了信息(即比特)——你无法从任何地方获取信息。

请注意,AND( &) 和OR( |) 都是破坏性的。唯一可逆的布尔运算是XOR( ^) 和 NOT ( ~)。

于 2010-04-02T10:52:37.400 回答
4

不可能的。0xff000000 的按位 & 是有损操作。您将永久丢失低 24 位。

于 2010-04-02T10:51:57.310 回答
3

您只能反转 XOR,因为它是非破坏性的。

OR 和 AND 都是破坏性的。

于 2010-04-02T10:55:31.633 回答