2015-05-04 35 views
0

我有動態位集我在其中存儲隨機生成的整數值。提取設置在boost :: dynamic_bitset中的位的索引

然後我想取n位的塊,然後檢查是否設置爲1。在最後我治療動態位集合作爲一種表位的索引。所以我現在想要的是,如果我處於該塊中的比特被設置爲1的n比特的塊中,則該塊內的比特的索引總是從0開始。換句話說,我需要跟蹤第n個位的第i個塊,並且我還需要該塊中設置爲1的位的索引。

注意我使用的是動態位集,因爲位集I的大小隻能在運行時知道,也是n位的區塊大小。

非常感謝您提供的任何幫助。

+0

比如std :: bitset的邏輯是C解決方案,提高::來,dynamic_bitset不支持迭代器。 http://heboostcpplibraries.com/boost.dynamicbitset – sehe

+0

@sehe bitmasking怎麼樣?正如我在運行時知道動態位集的大小,是否有辦法構建掩碼,然後提取設置爲1的位,並知道這些位的索引?我不知道我的問題是否有意義。 – Hassingard

回答

0

這裏是因爲我認爲你在尋找換

for (int blk_num = 0; blk_num < BLOCK_COUNT; blk_num++) { 
     U32 tmp_bitmap = bitmap_arr[blk_num]; 
     while (tmp_bitmap > 0) { 
      int next_psn = __builtin_ffs(tmp_bitmap) + blk_num * 32 - 1; 
      tmp_bitmap &= (tmp_bitmap-1); 
      printf("Index: %d set\n", next_psn); 
     } 
    }