我正在尝试将二进制数中的最后两位与前两位交换。
E.g。我希望0b11101011成为0b11101110。
如何使用按位运算符在python中实现?
感谢。
答案 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'