如何反转C中的按位AND(&)?
如何反转C中的按位AND(&)?
例如,我在C中有一个这样的操作:
((unsigned int)ptr & 0xff000000))
结果是0xbf000000
。 我现在需要的是如何反转上述内容,即通过使用操作的结果来确定ptr
,当然还有0xff000000
。
有没有简单的方法在C中实现这个?
按位&
不可逆转:
0 & 1 = 0 0 & 0 = 0
你不能这样做,因为你扔掉了信息(即比特) – 你无法从任何地方获取信息。
请注意, AND
( &
)和OR
( |
)都具有破坏性。 唯一可逆的布尔运算是XOR
( ^
)和NOT( ~
)。
不可能。 按位和0xff000000是一个有损操作。 你永久地丢失了较低的24位。
你只能反转XOR,因为它是非破坏性的。
OR和AND都是破坏性的。