我試過谷歌搜索,但找不到任何可理解的@。@ ... 有人能請外行解釋這個代碼中發生了什麼?什麼是0xaa和0x55在做什麼?
這是「破解編碼採訪」一書中的一個問題。
「寫一個程序,以儘可能少的指令交換整數中的奇數和偶數位(例如,位0和位1被交換,位2和3被交換,依此類推)」。
的方式我這樣做是不涉及位操作,因爲我無法弄清楚如何%\ ...
def swap(n):
b = bin(n)[2:]
print(b)
if len(b)%2 != 0:
c = True
b = b[0] + b
pairs = wrap(b, 2)
pairs = [i[::-1] for i in pairs]
ans = ''.join(pairs)
if c: ans = ans[1:]
print(ans)
但現在我在看他們的回答,我真的不得到它...(不會幫助它不是在Python中):
int swapOddEvenBits(int x) {
return (((x & 0xaaaaaaaa) >>> 1) | ((x & 0x55555555) << 1));
他們的面具,掩蓋無論是奇數或偶數位。然後他們同時向右移動,並且向左平移,交換它們。 – AntonH
上半部分'''你的'int'與'101010 ...' - 這意味着奇數位保持不變,即使位是'0';標誌不敏感將整個事件轉移一點。第二部分 - '010101 ...'帶有'&'你的'int' - 這意味着偶數位保持不變,奇數位爲零;標誌敏感將整件事向下移動一點。你在正確的位置放置了所有正確的棋子 - 「|」它們在一起。它會幫助你分解代碼並在每一步打印出二進制文件。 –
所以這個問題並不是關於[tag:python]或[tag:java] ... – handle