寻找bitarray的c#按位运算

时间:2011-08-13 06:07:35

标签: c# bitwise-operators

我正在尝试对BitArray执行按位操作,这会导致:

1010
0011
= 1000

因此,只要第一位置位且相应位未置位(1-0),它就会返回1.所有其他场景(0-0,1-1,0-1)都会产生0。

无论是否进行按位操作,我怎样才能实现这一目标?

表现至关重要。

2 个答案:

答案 0 :(得分:3)

这应该有效:

假设ba1是你的第一个BitArray,ba2是你的第二个。

ba1.And(ba2.Not())

应该在O(2N)时间内将ba1置于您正在寻找的状态。 (但是如果你需要通过复制它们来保存源BitArrays,那么你的BitArrays都会被修改 - 需要更多工作和时间。)

答案 1 :(得分:3)

如果性能至关重要,您可能要考虑在给定memory and performance overhead时根本不使用BitArray,而是使用BitVector32或直接对基础字节执行操作:

 byte a = 0x3a;     // 0011 0101
 byte b = 0xa3;     // 1010 0011
 byte r = a & (~b); // 0001 0100

如果您发现BitArray的性能适合您的需求,则无需过早优化;但是,如果您发现性能不合适,您可能需要考虑更换BitArray。