簡體   English   中英

如何在c ++中管理位/二進制?

[英]How can I manage bits/binary in c++?

我需要做的是打開一個0和1的文本文件,以查找文件中的列之間的模式。

所以我的第一個想法是將每一列解析為一大堆bool,然后在列之間進行邏輯(現在在數組中)。 直到我發現bool的大小實際上是一個字節而不是一點,所以我會浪費1/8的內存,將每個值分配給bool。

它甚至與800x800值的網格相關嗎? 處理這個問題的最佳方法是什么? 如果它是一個復雜的答案,我會很感激代碼片段

你可以使用std::vector<bool>這是一個使用緊湊商店的布局的向量的專門化.... 1位不是8位。

您可以使用std :: bitset或Boosts dynamic_bitset ,它們提供了不同的方法來幫助您管理位。

例如,它們支持從其他默認類型(如int或char)創建位集的構造函數。 您還可以將bitset導出為ulong或字符串(然后可以將其再次轉換為bitset等)

我曾經問過關於連接那些,這是不可能做到的。 但也許你也可以在這個問題中使用這些信息。

我認為是Knuth說過早優化是所有邪惡的根源。 讓我們更多地了解這個問題。 你的陣列是800 ** 2 == 640,000字節,這對於比數字手表更強大的東西來說沒什么大不了的。

雖然將它存儲為字節可能看起來很浪費 - 正如你所說,7/8的內存是冗余的 - 但另一方面,大多數機器不像字節那樣有效地執行位操作; 通過保存內存,您可能會浪費太多精力進行屏蔽和測試,使用字節模型會更好。

另一方面,如果你想要用它來尋找更大的模式,你可能想要使用按位表示,因為你可以一次做8位。

這里的真正要點是有幾種可能性,但沒有人能夠在不知道問題的情況下告訴你“正確”的表示。

對於那個大小的網格,你的bool數組大約是640KB。 如果這將是一個問題,取決於你有多少內存。 它可能是邏輯分析代碼最簡單的。

通過對這些位進行分組並存儲在int數組中,您可以將內存需求降低到80KB,但邏輯代碼會更復雜,因為您總是要隔離要檢查的位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM