2014-10-20 40 views
-3

我現在爲8字節塊創建了一個64點陣列。 如何實現檢查這些斑點是否被使用的位圖? 我創建陣列與此uint64_t中陣列[64]使用位圖控制陣列

回答

-1

假設你編號的位0 64spots .. 4095

接着的6位表示中的索引,位圖字節和6位表示中的位數組元素。

,如果你有

unsigned int bit ; 

然後

unsigned int index = (bit >> 6) & 63 ; 
    uint64_t mask = 1 << (bit & 63) ; 

    if (array [index] & mask) 
      // bit is set 
+0

array []保存數據 - 位掩碼將與之分開,指示array []中的哪些值保存有效數據。所以掩碼不應該與array []按位進行AND操作。然而,我並沒有讓你失望。 – 2014-10-20 17:31:53

0

因爲這是(無標記)作業,我不會放棄的代碼,但是:

第一:什麼是位圖?它單獨使用變量中各個位的值,而不是將整個值解釋。因此,如果您需要一個位圖來指示正在使用64個塊中的哪一個,那麼您將需要64位 - 64位類型對此會很好。如果你需要一個「塊」中的每個單獨字節的位圖,這個想法是一樣的,但顯然你可以使用更小尺寸的映射(一個字節位圖)和更多的映射。

然後,您需要分別訪問每個位 - 有按位運算符可以很容易地進行訪問。位0將指示塊0的狀態(未設置,或者0 =未使用,1或者設置=使用),位63將指示塊63的狀態。在具有塊的位的值之間按位與' d要檢查和位圖,將返回是否正在使用該塊。通過打開計算器程序並將其設置爲「程序員」模式,可以很容易地查看數據類型中的位。

設置一個位很簡單 - 您可以按位或設置位。如果您不熟悉它,則取消設置會有點棘手,但一旦您掌握了按位操作的概念,就很容易。