JAVA不借助第三者实现两个变量值的互换
利用异或运算符实现两个数的互换
public class Tets {//借助1异或运算符实现两个数的互换
public static void main(String[] ARGS)
{
Scanner in=new Scanner(System.in);//创建一个Scanner对象
int n1=in.nextInt();
int n2=in.nextInt();
System.out.println("互换前第一个数为:"+n1+",第二个数为:"+n2);
{
n1=n1^n2;
n2=n2^n1;
n1=n1^n2;
}
System.out.println("交换后第一个数:"+n1+",第二个数:"+n2);
}
}
解析异或运算:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
即a=a^b;
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。例如:(同为0,异为1)
0^0=0;
0^1=1;
1^1=0;
异或运算可以使某些特定位翻转,例如在上例中输入9 7
用二进制表示:9=1001b,7=0111;
9^7=1110;
n1=9,n2=7时:
n1=9^7=1110;
n2=7^n1=0111^1110=1001=9;
n1=n1^n2=1110^1001=0111=7;互换完成