异或运算(^ )在java中的应用异或运算法则1. a ^ b=b ^ a
2.a^b^c=a^(b^c )=(a ^ b ) ^ c;
3. d=a ^ b ^ c可以出a=d ^ b ^ c。
4. a ^ b ^ a=b。
异或运算1,异或或数学运算符。 适用于逻辑运算。
2、例如,异或的假结果为真,异或的真结果也为真,异或的真结果为假,假异或的假结果为假。 这意味着两个值不同的结果是真的。
异或的运算方法是二进制运算。
1^1=0
0^0=0
1^0=1
0^1=1
两者相等于0,不相等于1。
总之,这样,n^0=n n^n=0,即任意数与0的异或,只要对两个相同的数进行异或运算,就可以得到0。
我前几天看到了这样的主题。 对于具有多个数字的数组,只有一个是唯一的,其他都是成对的。 如何快速找到这个唯一的值? 没听过异或运算的时候,真的很无知。 然后,我在看hashMap的源代码时看到了异或运算符。 搜索一下,就能解决以前看到的这个问题,突然变得明亮了。
int [ ] nu marry=new int [ ] { 1,2,3,2,3 }; int aim=numarry[0]; for(intI=1; i 5; I ) { aim=aim ^ numarry[i]; } System.out.println ()最后) aim ); 关于以上的这个结果是什么,只要知道异或运算的特征就可以。 例如1、2、3、2、3。 既然异或运算满足以上交换规则,对于1^2^3^2^3这样的异或运算,通过改变位置(2) ^ )3) ^1,用2个相同的数进行异或运算,可以得到0
另外,还可以看到以下类似的问题。
1-1000排列成包含1001个元素的数组,只有唯一的元素值重复,其他只出现一次。 数组元素只能访问一次。 设计算法,找到它。 是否可以在不使用辅助存储空间的情况下设计算法实现?
上面的这个也可以用异或运算来求解:
假设:1^2^3……^n…^1000=t
另一方面,1 ^2^3. ^ n ^ n . ^ 1000=t ^ n
我们已经知道T^T^n=0^n=n这个过程。
所以,我们有办法解决上面的问题。
首先从1到1000,对这1000个进行异或运算,然后对上面的1001个进行疑惑运算,最后,对这两个结果进行异或运算,得到唯一的n。