位运算数值交换

位运算数值交换

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

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的二进制,这时就会发现,数值已经交换完毕。

发布了49 篇原创文章 · 获赞 5 · 访问量 8770

猜你喜欢

转载自blog.csdn.net/Asdzxc968/article/details/104301231