有效的方法来取消整数数组的位?

时间:2016-06-16 15:29:28

标签: python bit-manipulation

考虑3个存储在数组中的2位整数

x1 = [ 
    ad,
    be,
    cf,
]

上面显示了整数及其位,但它们存储为常规int 数组x1是整数x = abcdef的转置。

如何取消转换x1以获取

x2 = [ 
    ab,
    cd,
    ef,
]

数组x2按自然顺序只是x

在python中执行此操作的有效方法是什么?

我的最终目标是对整数进行比较 因此,如果整数ab存储为x1,我希望通过查看a > ba1来了解b1
任何实现这一目标的方法都是一个很好的答案。

我可以使用整数的字符串表示,但我想使用一些位移法术。

这个问题与Efficient way to transpose the bit of an integer in python?

相反

1 个答案:

答案 0 :(得分:2)

这是一种方式:

def untranspose(arr):
    x,y,z = arr
    a,d = divmod(x,2)
    b,e = divmod(y,2)
    c,f = divmod(z,2)
    return f + 2*e + 4*d + 8*c + 16*b + 32*a

例如,

>>> untranspose([1,3,2])
30

[1,3,2]对应

01
11
10

所以你想要整数011110:

>>> int('011110',2)
30