交换python

时间:2016-02-21 17:15:24

标签: python binary bitwise-operators

我正在尝试将二进制数中的最后两位与前两位交换。

E.g。我希望0b11101011成为0b11101110。

如何使用按位运算符在python中实现?

感谢。

2 个答案:

答案 0 :(得分:3)

正如您在calcperm *中看到的那样,可以使用bit_permute_step(又名delta swap)来完成,就像这样

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)

..或类似的东西。如果我犯了任何错误,请更正我的Python。

*:填写2 3 0 1 4 5 6(或更多位,但答案相同)

答案 1 :(得分:2)

一种方法是

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'