TBits(單元 Classes)提供動態大小的布林值陣列,自動管理記憶體、支援擴充,適合需儲存大量布林旗標的場合。若位元數固定 ≤ 32,用整數位運算(&、|)更輕量。
TObject
└── TBits
| 屬性 | 型別 | 說明 |
|---|---|---|
| Bits | bool __property Bits[int Index] | 索引存取指定位置的布林值。超出範圍拋出 EBitsError。 |
| Size | int | 目前陣列容量(位元數)。設定此屬性可擴充/縮減陣列;擴充時新位元預設 false,縮減時超出部分捨棄。 |
| 方法 | 說明 |
|---|---|
__fastcall TBits() | 建構函式。勿直接呼叫,請用 new TBits 建立實例。 |
__fastcall virtual ~TBits() | 解構函式,釋放內部記憶體。應用程式請用 delete 銷毀實例。 |
int __fastcall OpenBit() | 傳回第一個值為 false 的索引。若全為 true 則傳回 Size(即下一個可用位置)。 |
#include <Classes.hpp>
void DemoTBits() {
TBits *bits = new TBits();
try {
bits->Size = 100; // 配置 100 個位元,全為 false
bits->Bits[10] = true; // 設定第 10 位為 true
bits->Bits[50] = true;
int firstFree = bits->OpenBit(); // 傳回 0(第一個 false)
// 可用於資源池分配:尋找第一個可用槽位
for (int i = 0; i < bits->Size; i++) {
if (bits->Bits[i]) {
// 處理已設定的位元
}
}
}
__finally {
delete bits;
}
}
OpenBit() 快速尋找第一個空閒槽位。TBits 內部以 32-bit 整數陣列儲存,單次存取需計算字索引與位遮罩,略慢於 std::vector<bool> 或手工位運算,但介面更安全易用。unsigned long* 陣列配合內建函式(_BitScanForward 等)。TBits 是 VCL 中處理動態布林陣列的標準工具,善用可簡化代碼並減少邊界錯誤。