Sci*_*n11 8 java algorithm bitwise-xor
这是原始代码:
public static String reverseString(String s){
if(s == null) return "";
char[] rev = s.toCharArray();
int i = 0, j = s.length() - 1;
while(i < j) {
rev[i] ^= rev[j];
rev[j] ^= rev[i];
rev[i++] ^= rev[j--];
}
return String.valueOf(rev);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是Xor如何在这里交换字符值,为什么需要rev [i ++] ^ = rev [j--]?
ajb*_*ajb 14
代码相当于
rev[i] ^= rev[j];
rev[j] ^= rev[i];
rev[i] ^= rev[j];
i++; j--;
Run Code Online (Sandbox Code Playgroud)
最后一部分只需要递增i和递减j下一个循环迭代.
至于为什么x ^= y; y ^= x; x ^= y要交换值,我不知道为什么,但你可以通过查看所有四种可能性看到它适用于1位值:
start after x^=y after y^=x after x^=y
x y x y x y x y
0 0 0 0 0 0 0 0
0 1 1 1 1 0 1 0
1 0 1 0 1 1 0 1
1 1 0 1 0 1 1 1
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,在所有情况下,x和y位都是交换的.当语句应用于更大的整数时,^运算符并行处理所有位,因此最终结果是交换每对位,即交换整个值.