发现一个交换两个数值的好方法

2022-10-24 14:16:29 浏览数 (1)

以前交换两个数值总是这样做的:

代码语言:javascript复制
temp = b
b = a
a = temp

这可是万年不变老方法了,可是emm多了一个变量出来总是不爽的。毕竟占了内存嘛。强迫症犯了,那该怎么办?刚学到位运算符,发现可以很巧妙地解决这个问题

代码语言:javascript复制
a ^= b
b ^= a
a ^= b

这个怎么理解哇?这里用到了按位异或运算符。也就是如果对应的二进制位值相同,那么结果为0,否则为1

嗯有点感觉了,再看看这三行代码

我们知道任何数与自身异或均为0,0与任何数异或均为他自身

这里就是应用了这个原理

第一行代码 a = a^b

第二行展开来就是b = b^a = b(原)^a(原)^b(原)=a(原)

b(原)^b(原)是0,那么二进制结果就是a(原)了嘛

同样道理,第三行展开来就变成了 a = a(原)^b(原)^a(原)=b(原)

这样就实现了两个数值的交换了,而不用占用更多的内存空间,逼格就上来了

0 人点赞