寻找一个c# bitarray的按位操作

本文关键字:bitarray 位操作 一个 寻找 | 更新日期: 2023-09-27 18:05:42

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

,,, 1010,
,, 0011,
1000年=,

所以当第一个位被设置并且对应的位没有被设置(1-0)时,它返回1。所有其他场景(0-0、1-1、0-1)的结果为0。

我如何实现这一点,有或没有位操作?

性能至关重要

寻找一个c# bitarray的按位操作

应该可以:

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

ba1.And (ba2.Not ())

应该在O(2N)时间内使ba1处于您所寻找的状态。(但是你的两个BitArrays都将被修改——如果你需要通过复制它们来保存源BitArrays,则需要更多的工作和时间)

如果性能很重要,考虑到内存和性能开销,您可能想要考虑根本不使用BitArray,而是使用BitVector32或直接对底层字节执行操作:

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

如果你发现BitArray的性能适合你的需要,那么没有必要过早优化;但是,如果您发现性能不合适,您可能需要考虑替换BitArray。