2010-07-06 70 views
5

我最近看到一個面試問題回答下列:專訪:翻轉位

給定一個32位的數字,寫僞 代碼翻轉倒數第二位

什麼是最好的/最簡單的方法來做到這一點?

+0

@Ether這絕對不是什麼奇特的花式。這是異或的最基本用法。因此,這與其他問題無關,即關於比特操作的複雜使用。 – Alderath 2010-07-27 22:09:21

+0

也許面試官正在探討一個後續問題,你是在處理一個大的還是小的endian表示,或者是沿着這些方向。 – NealB 2010-10-07 21:19:21

回答

8
#define MASK 0x00000002

新老=^MASK

3

異或運算。例如I = I^2

3
a = 0x80000000; // the second last bit set 
if(i & a == 0) // not set in i -> set it 
    i |= a; 
else // set -> un-set it in i 
i &= ~a; 

編輯:阿根廷,當然你也可以XOR它:-)但是2是第二位而不是第二位。也許最好談談MSB和LSB。

5
X^(1<<n) will toggle the state of nth bit in the number X. 
6

我看到一些答案將「最後一位」解釋爲MSB,其他人稱爲LSB。也許他們正在尋找候選人,讓他們暫停一下,並在提出代碼之前要求澄清。這在現實世界的工作中非常重要。

+1

+1優點 – 2010-12-09 18:42:25