python中的二进制位交换

python中的二进制位交换,python,binary,bitwise-operators,Python,Binary,Bitwise Operators,我试图将二进制数的最后两位与前两位交换 例如,我希望0b11101011变成0b11101110 如何在python中使用位运算符实现这一点 谢谢。一种方法是 bin(a & ~15 | (a & 3) << 2 | (a & 12) >> 2) # a & ~15 -- a with the last 4 bits cleared # | (a & 3) << 2 -- or with the

我试图将二进制数的最后两位与前两位交换

例如,我希望0b11101011变成0b11101110

如何在python中使用位运算符实现这一点

谢谢。

一种方法是

bin(a & ~15 | (a & 3) << 2 | (a & 12) >> 2)

# a & ~15          -- a with the last 4 bits cleared
# | (a & 3) << 2   -- or with the lowest 2 bits (0 & 1) shifted 2 steps to the left
# | (a & 12) >> 2  -- or with bits 2 and 3 shifted 2 steps to the right.

a = 0b11101011
bin(a & ~15 | (a & 3) << 2 | (a & 12) >> 2)
# '0b11101110'
bin(a&15 |(a&3)>2)
#a&~15--a,最后4位已清除
#|(a&3)>2——或位2和3向右移动2步。
a=0b11101011
垃圾箱(a&15 |(a&3)>2)
#“0b11101110”
正如您在*中看到的,它可以通过一个位置换步骤(aka)完成,如下所示

def bit_permute_step(x, m, shift):
    t = ((x >> shift) ^ x) & m
    x = (x ^ t) ^ (t << shift)
    return x

x = bit_permute_step(x, 3, 2)
def位置换步骤(x,m,shift):
t=((x>>移位)^x)和m

你已经试过什么了?