如何找到所有1位置使用位操作的二进制数?

时间:2018-10-28 10:44:42

标签: python algorithm bit-manipulation

例如,我的二进制数为210或11010010,第二,第五,第七和第八位为1,因此结果为[2、5、7、8]。

找到它的最快方法是什么?

4 个答案:

答案 0 :(得分:2)

  1. 将数字转换为二进制:

    >>> format(210, 'b')
    '11010010'
    
  2. 使用列表推导和enumerate查找1的索引:

    >>> [i for i, digit in enumerate(reversed('11010010'), 1) if digit == '1'] 
    [2, 5, 7, 8]
    

答案 1 :(得分:0)

只需遍历您的二进制数即可得到结果。

a=format(210, 'b')
x=[]
for i in range(0,len(a)):
    if a[i] == '1':
        x.append(i+1)

1个位置是[1、2、4、7]

答案 2 :(得分:0)

最快的方法是通过任何方法预先计算所有组合(其中只有256个),然后存储在一个列表中(列表中)。


您可以通过将1附加到所有条目,然后将2附加到每隔一个条目,然后将3附加到每四个条目,以此类推来构建列表。

答案 3 :(得分:0)

C ++解决方案。

#include<iostream>
using namespace std;
int main()
{
    int n=10;
    int counter=1;
    while(n)
    {
        if(n&1==1)
        {
            cout<<counter<<" ";
        }
         n=n>>1;
        counter++;
    }

}

阅读一些有关按位移位和&运算符的信息,以正确理解解决方案。