快捷搜索: 王者荣耀 脱发

两个int类型数据交换的神级操作

都能想到的操作

    申请辅助空间进行交换
public void swap(int a,int b){
          
   
	int temp = a;
	a = b;
	b = temp;
}

神操作

    利用异或的运算法则 归零律:a ^ a = 0 恒等律:b ^ 0 = b 交换律:a ^ b = b ^ a
public void swap(int a,int b){
          
   
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
}
    先看一下运行过程
public static void swap(int a,int b){
          
   
    System.out.println("a::" + a + "  " + "b::" + b);
    a = a ^ b;
    System.out.println("a::" + a + "  " + "b::" + b);
    b = a ^ b;
    System.out.println("a::" + a + "  " + "b::" + b);
    a = a ^ b;
    System.out.println("a::" + a + "  " + "b::" + b);
}
public static void main(String[] args) {
          
   
    swap(12,15);
}
    二进制过程模拟 详细分析一下 将a赋给b,那么就需要 b = a ^ b ^ b,那么先a ^ b,再用结果去^b,就可以得到a。现在a等于a ^ b的值,b等于a的值,即a = 3,b=12,现在再用a ^ b就相当于用最开始的a ^ b ^ a即 12 ^ 15 ^ 12,所以就可以将b赋值给a。
经验分享 程序员 微信小程序 职场和发展