public class TestTalk {
public static void swapAb(int a, int b) {
//以下位置交换算法怎么理解
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
public static void main(String[] args) {
int i = 10, j = 5;
TestTalk.swapAb(i, j);
public class TestTalk {
public static void swapAb(int a, int b) {
//以下位置交换算法怎么理解 //解答:^ 异或 特点:同为假,异为真 规律:一个数同时异或这个数两次结果还是这个数。用于加密
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
public static void main(String[] args) {
int i = 10, j = 5;
int a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(i); //测试时,i和j的输出值并没有看到交换位置!这是为什么! 解答:因为swapAb方法返回值,或者直接把主函数的输出语句直接放swap()方法里面,这是两个原因 两个解决办法
System.out.println(j);
}
作者: 黑马罗坚 时间: 2012-6-8 12:13
public class TestTalk {
public static void swapAb(int a, int b) {
//以下位置交换算法怎么理解
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
public static void main(String[] args) {
int i = 10, j = 5;
TestTalk.swapAb(i, j); //这里有问题哦 传递的是副本哦 这里的i 和j没有改变
System.out.println(i); //测试时,i和j的输出值并没有看到交换位置!这是为什么!
System.out.println(j);
}
} 作者: 黑马罗坚 时间: 2012-6-8 12:16
用异或注意下自己跟自己交换变量的值为0 作者: 李文富 时间: 2012-6-8 12:18
package temp;
public class TestTalk {
public static void swapAb(int a, int b) {
//以下位置交换算法怎么理解
a = a ^ b;
/*
0000 1010
0000 0101
----------
0000 1111*/
b = a ^ b;
/* 0000 1111
0000 0101
-------------
0000 1010
*/ a = a ^ b;
/* 0000 1111
0000 1010
---------------
0000 0101
*/
}
public static void main(String[] args) {
int i = 10, j = 5;
// 10 (0000 1010) 5(0000 0101) 二进制
TestTalk.swapAb(i, j);
你记着一句:一个数同时异或另一个数两次,那么结果还是这个数
a = a ^ b;
b = a ^ b; //到这里时,a已经被赋值是(a^b) 那么这个表达式的完整写法就是 b = a^b^b 结果b = a
a = a ^ b; // 同上,这个完整的写法就是 a = a^a^b 那么结果就是a = b;
这样就形成互换了.