一次对多个整数应用按位运算符

Apply Bitwise operator on multiple integers at once

我有一个整数列表,可以包含任意数量的项目。现在,我想计算所有这些数字的按位异或。如果数字已知,可以按如下方式完成:

int xor = 10 ^ 25 ^ 40 ^ 55......and so on

但是当元素数量未知时,我无法在运行时为列表中的每个元素动态实现它。 我想一次对所有时间应用按位异或,而不是一次两个。

您可以遍历元素并将异或应用于结果变量,如下所示:

int[] values = new int[] { 10, 25, 40, 55 };
int xor = values[0];
for(int i = 1; i < values.Length; i++) {
    xor ^= values[i];
}

由于 xor 的可互换性,这两种方法具有相同的结果:

// In one line
int xor1 = 10 ^ 25 ^ 40;

// In separate lines
int xor2 = 10 ^ 25;
xor2 ^= 40;

看这里:https://dotnetfiddle.net/zqSVad
这里发生的实际计算是完全一样的。 您可以将此概念扩展为循环并获得所需的效果。

您可以使用 Aggregate 扩展方法(来自 System.Linq)对数组中的每个项目应用累加器函数。它的工作原理是取一个起始值(在这种情况下我们可以使用 0,因为 0 ^ n == n),并对列表中的每个项目应用累加器函数。

在我们的例子中,累加器只是将数字与下一个值的异或再次加回数字:

int[] numbers = {10, 25, 40, 55};
int result = numbers.Aggregate(0, (accumulation, next) => accumulation ^ next);
// result = 12