题目:
int类型的两个数, a = 3,b = 5,不可以用任何变量,将 a 和 b 的值互换,并打印输出:a = 5,b = 3。
代码:
public class Test {
public static void main(String[] args) {
int a = 3;
int b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a = " + a + "," + "b = " + b);
}
}
output:
解题思路:
这里用到了异或运算(相同为0, 不同为1),首先a = 3的二进制是0011;b = 5的二进制是0101;
第一步 a = a^b = 0011 ^ 0101 = 0110;这时候a = 0110,b = 0101
这个时候实际上是用a来记录了a和b不同的位数是哪几位。
第二步 b = a^b = 0110 ^ 0101 = 0011;这时候a = 0110,b = 0011因为与1进行异或运算会变成相反的数,就是与1异或1变0,0变1,因为a的二进制记录了原来的a
b不相同的位数,且全为1,所以和b进行异或以后,b的值就变为了原来的a的值。妙啊!
第三步 a = a^b = 0110 ^ 0011 = 0101;这时候a = 0101 = 5;b = 0011 = 3此时的b的值已经变为了原来的a的值,同上,原来的a的值和记录了ab不同位数的a进行异或运
算,a的值就会变为b的值。妙啊。
原文链接:https://blog.csdn.net/yangbaggio/article/details/90640041