我正在尝试对BitArray执行按位操作,这会导致:
1010
0011
= 1000
因此,只要第一位置位且相应位未置位(1-0),它就会返回1.所有其他场景(0-0,1-1,0-1)都会产生0。
无论是否进行按位操作,我怎样才能实现这一目标?
表现至关重要。
答案 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。