Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 位数组与异或_C#_.net - Fatal编程技术网

C# 位数组与异或

C# 位数组与异或,c#,.net,C#,.net,我正在寻找一种基于运算符的方法来处理位掩码和位布尔运算(XOR/NOR/OR/and/NOT/EQV/etc)。一般来说,我非常喜欢扩展方法风格的方法,但在这种情况下,我发现它有点混乱 在C#中有没有更简洁的处理位的方法 不幸的是,由于扩展类中没有运算符重载(运算符重载必须在类或结构本身中定义),因此没有真正的方法将这些方法转换为运算符。我希望(我相信许多其他人也会这样做)这一点在将来会有所改变,但目前还没有办法做到这一点。没有办法直接使用BitArray-但是您可以创建一个包含BitArray

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

在C#中有没有更简洁的处理位的方法


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

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


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

使用
位数组
无法完成此操作,原因很好:像
Xor
这样的操作修改第一个操作数。这不是
|
^
通常做的事情


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

为什么不只对int进行操作?INTA=0x001;int b=0x100;int测试=a | b;很好用。我不认为它有你认为的作用。@RobertRouhani适用于这个特定的例子,但是任意数量的位呢?例如,96位整数必须有一个单独的结构。@RobertRouhani:主要是因为这失败了。int test3=!(a) );否则这是个好办法。我需要一整套运算符,或者至少能够从基本函数中删除这些运算符。我将其作为注释发布,因为我知道它有局限性。如果我没有弄错的话,@sgtz,C#中的位求反运算符是
~
,如
inttest3=~a
(除非
~
的行为不同,否则我的位运算符有点生疏。)或者如果降到32位,只需使用
位向量32
:)@leppie如果是32位,最简单的方法就是使用标准的
int
uint
@注释性地说:如果你不知道位运算,就不用了。对于初学者来说,BitVector32会更容易,尤其是在处理掩码等问题时。@leppie:BitVector32也没有定义运算符,因此您仍然需要将其包装起来。。。
        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