-2
我試圖改進面試風格問題。 我碰到過這個:請解釋此位交換代碼(Java)
給定一個32位整數輸入x,交換其奇數和偶數位,並返回結果整數。 (例如,比特0和比特1被交換,比特2和比特3被交換,等等)。 例如: X = 5,二進制代碼= 0101 swapOddEvenBits(5) - > 10
答案如下:
public int swapOddEvenBits(int x) {
return (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
}
有人可以解釋這一點,請。 另外,爲什麼我不能使用像(x & 1010101010101)>> 1而不是? 我最初嘗試解決這個問題是將ints轉換爲二進制字符串,然後交換相鄰的字符,然後轉換回int。這會起作用嗎? 謝謝。
謝謝你的解釋。 – Raul