a,b两个值交换,不借助第三个变量如何进行交换?
通过异或(^)交换a,b个值
我们要知道异或的规则,就是
0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
0 ^ 5 = 5
0 ^ x = x
x ^ x = 0
知道这个了之后,我们再去看下面的异或交换a,b两个值,看看它是怎样一个逻辑思路
a = a ^ b #a^b
b = a ^ b #(a^b)^b==a
a = a ^ b #(a^b)^a==b
'''首先我们将a赋值为a^b,紧接着我们将b赋值,如同注释当中的一样,
就变成了a^0 = a,此时b的值已经是a了,等第三次为a赋值的时候,
a还是之前a^b的值,然后再去(a^b)^a,因为这里的b已经有了新
的值是a了。这样一样我们就完成了交换ab两个值的目的'''
具体分析
当a = 4 , b = 5时的内部实现
将a和b转为2进制
a = 100 b = 101
第一步:a=a^b
|a | 100 |
|b | 101 |
|^ | 001|
第二步: b=a^b
|a | 001 |
|b | 101 |
|^ | 100 |
第三步: a=a^b
|a | 001 |
|b | 100 |
|^ | 101 |
我们可以看出来,在第二步的时候,b已经拿到了a的二进制100了,所以此时b的值为4,在第三步a拿到了b的二进制101,就此a和b的值完成交换。
python独有的一种交换方式
a,b = b,a
'''python中变量并不是直接存储值,而只是引用了一个内存地址,
我们此时这样交换变量其实是交换了地址,改变了地址的引用'''
常见交换方式,加减乘除都可
a = a + b
b = a - b
a = a - b