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