位运算数值交换

位运算数值交换

一般数值交换都是使用一个第三方变量中间者转换,如:

int n = 1;
int m = 2;
int i = n;
n = m;
m = i;
System.out.println("n->"+n);
System.out.println("m->"+m);
运行结果
在这里插入图片描述

这是普遍的数值交换方式

现在我们使用位运算进行数值交换

int n = 1;
int m = 2;
n = n^m;
m = n^m;
n = n^m;
System.out.println("n->"+n);
System.out.println("m->"+m);
运行结果
在这里插入图片描述

运行结果一样,进行了数值交换,下面解释一下原理

**^:**异或,相同为0,相异为1

1的二进制为01

2的二进制为10

01^10=11

n=n^m,异或运算后n的二进制为11

注意,n的二进制现在已经为11了,而m的二进制还是10,这时给m赋值为n^m

m = nm,1110,结果为01,而这个结果刚好为1的二进制,这时候m的十进制为1,注意m=1,n还是之前的异或结果11

在给n赋值,n=nm,1101,结果为10,刚好是2的二进制,这时就会发现,数值已经交换完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值