异或

  在平常的编程中,很少用到算法(反正我是这样,只顾着实现业务需求了),所以,我的代码总的来说是毫无价值的。怎么才能让自己代码变得有点意思呢,今天给大家介绍个运算符"^",异或运算符。有的时候用点运算符的小技巧,可以让自己的代码“蓬荜生辉”喔!:-D

  首先,我先介绍一下,什么是异或运算符。简单点来说,异或就是相同为0,不同为1,它是32位二进制数使用的运算符,我们在实际使用中,计算的时候都是要转换成二进制的。下面,我用一个图来介绍什么是异或,大家一看就明白了。

                       

  相信大家现在可以明白异或了吧!

  下面我用一个简单的实例,通过比较,更清楚深入的了解异或。

  题目:请把两个整数进行交换。

  在我们初次学习Java的时候,进行两个数之间的交换,首先会想到使用临时变量,于是,方案一就是采用第三方变量实现交换。

1         int a = 10;
2         int b = 20;
3         
4         int temp = a;
5         a = b;
6         b = temp; 

  采用第三方变量实现是最简单也是最容易理解的,但是能不能不使用第三方变量呢?方案二就是通过数学上基本运算,实现了交换。

1         int a = 10;
2         int b = 20;
3                 
4         a = a + b; //a=30
5         b = a - b; //b=10
6         a = a - b; //a=20

  这个方法是不是很巧妙呢?但是!它是有缺点的,那就是如果a+b的值超出了int的范围,就会有数据溢出,所以,有没有更好的方法呢?当然有,异或运算符!下面方案三就是介绍异或运算符的巧妙使用。

1         int a = 10;
2         int b = 20;
3         
4         a = a ^ b;
5         b = a ^ b; //b = a ^ b ^ b = a
6         a = a ^ b; //a = a ^ b ^ a = b

  第三个方法是不是很赞呢!当然,展示给大家的只是很简单的例子,在实际应用中,还是需要仔细加慎重的去选择的。谢谢。

原文地址:https://www.cnblogs.com/qwmzjn/p/secondzjn.html