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