C#:对于标志,bitvector32 是否比 bool 更有效?

C#: is bitvector32 more efficient than bool for flags?

一个布尔值需要 8 位来存储一个标志:true 或 false。 Bitvector32 允许您以 32 位存储 32 个标志。所以 32 个布尔标志将是 256 位。

然而...

Bitvector32 要求您为要寻址的每个位声明一个整数掩码。该掩码是一个整数,或 32 位——32 个掩码乘以 32 位 + 32 位向量 32 位 = 1056 位,用于 32 个标志。

如果位掩码不仅抵消了标志的有效存储,那么 bitvector32 有什么意义?

如果我需要同时测试多达 32 个标志,则 BitVector32 效率更高:

if (bv & 0X...) ...

将测试几个标志 "on"。

if ((bv & 0X...) == 0) ...

测试所有指定的标志是否关闭。

如果我有十亿个标志,我宁愿玩 div 和 mod 32 来找到要使用的位向量——而不是使用大量 RAM。

(实际上,我可能会使用 long 或 longlong,而不用 BitVector。)

OTOH,对于几个标志,我可能会使用 1 字节的东西。浪费几个字节,但速度更快。

如果我需要 yes/no/maybe,一点也做不到。 (同上 M/F/...)