我试过谷歌搜索,但找不到任何可理解的@。@ ... 有人能请外行解释这个代码中发生了什么?什么是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