2017-05-03 77 views
1

用於學習高效的內存管理我想知道如何使用單個位字段來共同表示8個bool值的值,以及如何評估和設置每一位。如何使用位字段專門用於以下目的

原因是在我自己的程序,我不會粘貼,因爲成千上萬的行。 在全球範圍內,有百多個,bools都需要,這對FPS有很大的影響。

例如:

 uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1; 

     if (!b0) { 
     // do something 
     b0 = true; 
     } 
+2

請注意,訪問一點並不是一件小事,同時節省了代碼複雜度增加的代價,並且通常會加快速度。 – NathanOliver

+0

另請注意,std :: vector 專門針對每個值只使用1位,所以工作已經完成。 –

+1

只需使用位操作即可。記住數字邏輯?開/關(XOR)。 'b0^= 1'打開/關閉 – jiveturkey

回答

2

位字段只能用於數據成員被指定。從http://en.cppreference.com/w/cpp/language/bit_field的第一行:

聲明具有明確大小類的數據成員 [...]

你需要換你的位域的結構。例如:

#include <cstdint> 
struct bool_pack { 
    uint8_t b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1; 
}; 

int main() 
{ 
    bool_pack b = {}; 

    if (!b.b0) { 
     // do something 
     b.b0 = true; 
    } 
} 

還有一個更方便的標準庫類型std::bitset,你應該考慮使用替代。例如:

#include <bitset> 
int main() 
{ 
    std::bitset<8> b; 

    if (!b[0]) { 
     // do something 
     b[0] = true; 
    } 
} 
+0

感謝您的一個真正下降的例子,我會研究它。 –

相關問題