BitArray和XOR

时间:2012-02-07 06:08:46

标签: c# .net

我正在寻找一种基于运算符的方法来处理位掩码和按位布尔运算(XOR / NOR / OR / AND / NOT / EQV /等)。通常我真的喜欢扩展方法样式方法,但在这种情况下,我发现它有点乱。

是否有更简洁的方法在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

3 个答案:

答案 0 :(得分:20)

没有办法直接使用BitArray - 但你总是可以创建一个包含BitArray的包装类,并在那里定义你自己的运算符。

当然,如果你处理64位或更少,你可以使用longulong并完成它...

答案 1 :(得分:12)

无法使用BitArray执行此操作并且有充分的理由:OrXor 等操作会修改第一个操作数。这不是|^通常所做的事情。

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

答案 2 :(得分:6)

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