2010-04-02 89 views
9

如何在C中反轉按位AND(&)?如何在C中反轉按位與(&)?

例如,我有C中的操作是這樣的:

((unsigned int)ptr & 0xff000000)) 

結果是0xbf000000。我現在需要的是如何反轉上述內容,即通過使用操作的結果以及當然是0xff000000確定ptr

有沒有簡單的方法來實現這個在C?

回答

22

按位&不能顛倒:

0 & 1 = 0 
0 & 0 = 0 
3

不可能。 0xff000000的bitwise &是有損操作。永久丟失較低的24位。

15

你不能這樣做,因爲你已經扔掉的信息(即比特) - 你不能獲取信息從無處回來。

請注意,AND&)和OR|)都具有破壞性。唯一可逆的布爾操作是XOR^)和NOT(~)。

1

您只能反轉異或,因爲它是非破壞性的。

OR和AND都具有破壞性。

+5

您也可以反轉「不」。 – 2010-04-02 10:56:45

+0

是的,我不好意思讓我滑倒:-) – Steffen 2010-04-02 13:57:12