我的官方問題是:「是否有一種乾淨的方式來使用數據類型來」編碼和壓縮「數據,而不是使用凌亂的位掩碼。」希望能夠在壓縮的情況下節省空間,並且我想使用本地數據類型,結構和數組來提高位掩碼的可讀性。我精通從我的程序集背景掩蓋位,但我正在學習C++和OOP。我們可以通過使用單獨的位將這麼多信息存儲在32位寄存器中,並且我覺得我正在嘗試回到低級環境,同時具有C++代碼的可讀性。我可以使用像bool這樣的數據類型來壓縮數據,同時提高可讀性嗎?
我試圖節省一些空間,因爲我正在處理巨大的資源需求。我仍然在學習更多關於C++如何處理bool
數據類型的知識。我意識到內存是存儲在字節塊中而不是單個的位。我相信bool
通常使用一個字節並以某種方式被屏蔽。在我的腦海中,我可以在一個字節中使用8 bool
值。
如果我malloc在C++中的一個數組的2 bool
元素。它分配兩個字節還是隻分配一個字節?
示例:我們將使用DNA作爲示例,因爲它可以編碼爲兩位來表示A,C,G和T.如果我用一個名爲DNA_Base的兩個bool
的數組構造一個結構體,那麼我將創建一個數組其中20個。
struct DNA_Base{ bool Bit_1; bool Bit_2; };
DNA_Base DNA_Sequence[7] = {false};
cout << sizeof(DNA_Base)<<sizeof(DNA_Sequence)<<endl;
//Yields a 2 and a 14.
//I would like this to say 1 and 2.
在我的例子中,我還將展示DNA序列長度爲20個鹼基,需要40位編碼的情況。 GATTACA最多隻能佔用2個字節?我想另外一個問題就是「如何讓C++以更可讀的方式爲我掩飾」或者我應該創建自己的數據類型和類,並使用類和運算符重載實現位掩碼。
'bool'實際上使用了一個完整的字節。除非使用按位聯合或「std :: bitset」,否則不能真正處理內存中的一位。 – 2014-09-18 19:18:25
查看'std :: bitset'或錯誤名爲'std :: vector'的方法來創建用於存儲部分字節元素的僞容器。 –
Deduplicator
2014-09-18 19:19:48
它可能不是空間最優的,但使用'enum'或'enum class:char'來表示每個基地可能是最可讀和最有效的表示。位字段通常應該避免。 – Jason 2014-09-18 19:38:20