我试过谷歌搜索,但是没有找到任何能够理解的内容@.@... 有人可以用通俗易懂的语言解释一下这段代码正在发生什么吗?
这是《Cracking the Coding Interview》这本书中的一个问题。
"编写程序尽可能少地使用指令来交换整数中的奇偶位(例如,交换位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) );
int
与101010...
进行&
运算 - 这意味着奇数位保持不变,偶数位为0
;对整个位向上移动一位,忽略符号。第二部分 - 将您的int
与010101...
进行&
运算 - 这意味着偶数位保持不变,奇数位为零;对整个位向下移动一位,考虑符号。现在您已经将所有正确的部分放在了正确的位置 - 将它们|
在一起。将代码分解并在每个步骤中打印出二进制将有助于您。 - Boris the Spiderbin(0xaaaaaaaa)
将返回'0b10101010101010101010101010101010'
,而bin(0x55555555)
则返回'0b1010101010101010101010101010101'
。 - tdelaney