JAVA异或运算

文章介绍了异或运算的基本性质,如x^x=0,以及任何数与0进行异或运算等于本身。通过举例展示了异或运用于多个数字的情况,并解释了如何利用异或在不使用第三个变量的情况下交换两个变量的值,以此作为内存优化的一种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、异或运算:

异或运算(^):是一种位运算(二进制),位相同为0,位不同为1。

既然这样,那当一个数对自身进行异或运算时,那么所有的数位都为0了,结果不就等于0了?测试一下:

        int a=2;
        System.out.println(a^a); //0

果然为0,那么可以得出结论:x^x=0

然后进行原理测试:

        int n=8;                //1000
        int m=0;                //0000
        System.out.println(n^m);//8=1000

由举例可以看出,对数值的二进制进行比较后,发现只有第一位不同,故值为8,转换为二进制为1000.针对以上举例可以推出,任何数与0进行异或运算,得到的都是自己本身。

接下来对大于两个数以上的进行异或运算。直接举例:

        int n1=4;  //0100
        int n2=5;  //0101
        int n3=6;  //0110
        int n4=7;  //0111
        System.out.println(n1^(n2^n3)^n4);  //0000
        System.out.println(n1^(n3^n2)^n4);  //0000
        System.out.println(n1^(n4^n3)^n2);  //0000

可以看出,位置并不是决定结果的要数。(有点像以前学的交换律)

二、异或的简单运用

当我们定义变量的时候,变量在使用的时候回占用内存,那么我们是不是可以通过减少内存的个数来对程序进行内存简单优化呢?这个时候异或运算就有一个自己的解决方案:

例如现在有一题:在不适用第三个变量的情况下,怎么将两个变量的值进行互换?答案如下:

        int n=520;
        int m=1314;
        n=n^m;
        m=n^m;
        n=n^m;
        System.out.println("n:"+n); //1314
        System.out.println("m:"+m); //520

佛曰:“何故?”

我答:“第一步异或将n^m的值赋值给了n,这个时候在进行第二步异或,将n=n^m,换算进去:得到m=n^m^m,这个时候,因为异或运算对位置并没有影响,故先计算“m^m=0”,随后,化简后得到m=n^0=n,这个时候就将n的值赋值给了m。

然后看第三步异或运算:n=n^m;此时右边的n=n^m,m=n,故可以得到:n=n^m^n,按照上一步的步骤,可以得到n=m,即完成了题目要求的值的互换。”

佛曰:“好!”

本次的介绍就到这里咯,欢迎大家一起探讨更加深入的用法。如有错误,欢迎大家指正,共勉!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值