Java

您所在的位置:网站首页 java或运算符号 Java

Java

2023-12-16 18:56| 来源: 网络整理| 查看: 265

基本概念

异或运算,符号为XOR或者^,是二进制的运算,运算法则为相同为0,不同为1,我记得时候反正总会忘(和同或记反),所以这里直接把异或理解为"不进位的二进制相加".举个栗子:

1000111 和 1110001 异或

按照不进位相加的运算方法:最小位都是1 相加为2也就是10(二进制运算), 因为是不进位的运算 所以直接本位为0 就可以了,其他位如法炮制:0110110.

重要性质

异或运算符合交换律和结合律

交换律:a^b^c^d 和 a^d^c^b是一样的

结合律:a^b^c^d和a^(b^c)^d是一样的

0^N==N

N^N==0

应用场景 1.利用异或交换两个数

绝大多数这个操作都是没屁硌楞嗓子的无意义操作....它的好处就是不用申请额外空间完成操作,但是不用异或操作也可以实现不申请额外空间的交换(异或操作还有可能出错)---不创建临时变量交换两个变量传送门(可以看下这篇博客)

int a = 10; int b = 11; a = a^b; b = a^b; a = a^b; System.out.println(a); System.out.println(b);

这三个a^b你懵不懵?反正我第一次看见是挺懵的

设 a的初始值为x b的初始值为y

a = x^y

b = (x^y)^y 因为y^y为0 x^0为x 所以b中现在存储的数据为 x(交换完成)

a = x^y^x 同理 ==x

(寄!写着写着发现按值传递按址传递好不悬给忘了)

值得一提的是因为异或操作的性质,如果a和b是同一块内存的话 会导致最后交换结果为0

2.一个数组中有一个数出现了奇数次,其他数都出现了偶数次,找到并打印这个数

这题用性质做爽的一匹,直接把他们全都异或在一起就行了,根据结合律,出现偶数个的数全都异或在一起变成零,而奇数个数的数异或在一起会剩下一个,然后本身和0异或还是本身;

public static int select(int arr[]) { int sum = 0; for(int i = 0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3