c#xor功能

时间:2011-08-14 05:59:49

标签: c# xor

我发现此代码使用或运算符

来反转字符串
public static string ReverseXor(string s)
{

      if (s == null) return null; 
      char[] charArray = s.ToCharArray(); 
      int len = s.Length - 1;

      for (int i = 0; i < len; i++, len--)
      { 
            charArray[i] ^= charArray[len]; 
            charArray[len] ^= charArray[i]; 
            charArray[i] ^= charArray[len]; }

       //some more code
}

问题是我不了解for循环中发生的事情,有人可以向我解释一下吗?

谢谢。

5 个答案:

答案 0 :(得分:5)

以下是如何在没有临时中间变量的情况下交换两个值A,B:

A = A Xor B
B = A Xor B
A = A Xor B

参考:XOR swap algorithm

这是一个8位的例子:

A = 10010010
B = 01111001

A = A Xor B = 11101011
B = A Xor B = 10010010
A = A Xor B = 01111001

答案 1 :(得分:3)

该方法使用“旧技巧”来交换所有的变量,它等于:

char temp = charArray[i];
charArray[i] = charArray[len];
charArray[len] = temp;

它只用于创建新变量“temp”以进行交换。

答案 2 :(得分:1)

我认为,看待这个问题的方法分为两部分。循环在做什么?循环的内部部分是做什么的?

循环正在观察弦的末端,它们向内朝向中心前移。

循环的内部部分正在进行xor交换。这是在没有第三个变量的情况下交换两个变量的技巧。看看它是否正在使用一些布尔逻辑。

答案 3 :(得分:0)

这是臭名昭着的XOR swap algorithm

以下内容交换了XY

的值
X := X XOR Y
Y := X XOR Y
X := X XOR Y

有关详细信息,请参阅维基百科。

答案 4 :(得分:0)

这有点诡计。 XOR运算符可用作位掩码以临时组合两个值。对Y进行两次异或X将得到Y.你可以用真值表轻松证明这一点。

在这种情况下,XOR被用作交换。