我发现此代码使用或运算符
来反转字符串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循环中发生的事情,有人可以向我解释一下吗?
谢谢。
答案 0 :(得分:5)
以下是如何在没有临时中间变量的情况下交换两个值A,B:
A = A Xor B
B = A Xor B
A = A Xor B
这是一个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)
答案 4 :(得分:0)
这有点诡计。 XOR运算符可用作位掩码以临时组合两个值。对Y进行两次异或X将得到Y.你可以用真值表轻松证明这一点。
在这种情况下,XOR被用作交换。