BitArray and XOR

本文关键字:XOR and BitArray | 更新日期: 2023-09-27 18:22:43

我正在寻找一种基于运算符的方式来处理位掩码和逐位布尔运算(XOR/NOR/OR/and/NOT/ECV/等)。一般来说,我真的很喜欢扩展方法风格的方法,但在这种情况下,我发现它有点混乱。

有没有一种简洁的方法来处理C#中的位?

        BitArray a = new BitArray(0x001);
        BitArray b = new BitArray(0x100);
        BitArray c = new BitArray(0x010);
        BitArray test = a | b;   // won't compile
        BitArray test2 = a ^ c;  // won't compile
        BitArray test3 = a.Or(b);   // compiles
        BitArray test4 = a.Xor(c);  // compiles

BitArray and XOR

没有办法直接用BitArray实现这一点,但您可以创建一个包含BitArray的包装类,并在那里定义自己的运算符。

当然,如果您处理的是64位或更少,您可以只使用longulong并完成它…

BitArray无法执行此操作,原因很充分:像OrXor这样的操作会修改第一个操作数|^通常不会这样做。

如果需要,可以创建一个包含所需运算符的包装,包括在执行操作之前复制第一个操作数的值。

不幸的是,由于扩展类中没有运算符重载(运算符重载必须在类或结构本身中定义),因此没有真正的方法将这些方法转换为运算符。我希望(我相信很多其他人也会这样做)这一点在未来会改变,但目前还没有办法做到这一点。