C 从2个位图中获取on位索引的组合

C 从2个位图中获取on位索引的组合,c,bitmap,bit-manipulation,C,Bitmap,Bit Manipulation,这个问题有两个层次 一级。 我有一个64位位图,我知道只有很少一个是打开的或设置为1。有没有一种方法可以在不使用分支的情况下获取设置的位 e、 g.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。63 BMP=00000000 1000010000000000000000000000000000000000

这个问题有两个层次 一级。 我有一个64位位图,我知道只有很少一个是打开的或设置为1。有没有一种方法可以在不使用分支的情况下获取设置的位

e、 g.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。63

BMP=00000000 1000010000000000000000000000000000000000000000000000000000000000000000000000000000

f(BMP)={9,14,26,51,52}

二级

现在我有2个64位位图,我需要2个集合位的组合

e、 g.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。63

BMP1=00000000000000000000000000000000000000000000000000000011000000000000

BMP2=000000000000000000000000000000000000000000000000000000000000000000000000000000000000

f(BMP1,BMP2)={(9,14)、(9,26)、(51,14)、(51,26)、(52,14)、(52,26)}

  • 我知道位图几乎总是稀疏的
  • 如果建议的解决方案可以一次扩展到2个以上的位图,那就太好了,但我更希望有一种方法,它可以非常快地处理多达2个位图,然后再稍微慢一点处理更多的位图
  • 即使没有分支的解决方案是不可能的,那么请建议使用分支的最快方法
    (很抱歉格式化错误)

    如果可能的位字段相对较少,例如如果您知道设置的位不超过两位,并且最多有几千个,则可以将这些位字段存储在哈希表中

    如果做不到这一点,您可以使用两位补码算法和有符号数来获得向量中的第一位集
    v&-v
    将获得在
    v
    中设置的最低阶位的列向量。您可以通过位掩码和重复来获取所有这些内容