如何反转C中的按位AND(&)?

时间:2010-04-02 10:49:43

标签: c reverse bitwise-operators

如何反转C中的按位AND(&)?

例如,我在C中进行了这样的操作:

((unsigned int)ptr & 0xff000000))

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

有没有简单的方法在C中实现它?

4 个答案:

答案 0 :(得分:24)

按位&无法撤消:

0 & 1 = 0
0 & 0 = 0

答案 1 :(得分:16)

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

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

答案 2 :(得分:3)

不可能。按位& 0xff000000是一个有损操作。你永久地丢失了较低的24位。

答案 3 :(得分:1)

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

OR和AND都是破坏性的。