三次异或交换数值

var a int = 100
var b int = 200
a = a ^ b
b = b ^ a
a = a ^ b
fmt.Println(a, b)

记 m= a ^ b, 则m ^ b = a, m ^ a= b。

2次交换后,b的值变为a的值,是 因为b ^ (a ^ b) 得 a。
3次交换后,a的值变为b的值, 是因为(a ^ b) ^ a得b。(在上一步,b的值已经变换成a的值了)

^是按位异或异或取反是同或
异或 a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
同或 a⊙b= (a ∧ b) ∨ (¬a ∧¬b)

当变量个数为偶数时,同或运算和异或运算之间具有互补关系
当变量个数为奇数时,同或运算和异或运算之间具有相等关系

例如
¬(a⊕b)=a⊙b、 a⊕b⊕c = a⊙b⊙c

>>> a=5
>>> b=9
>>> a^b^a
9
>>> a^b^b
5
>>> a^b^a^b^a
5
>>> a^b^a^b
0
>>> a^a^b
9
>>> a^a
0
>>> a^a^a
5
>>> a^a^b
9

参考资料
同或_百度百科 (baidu.com)
异或_百度百科 (baidu.com)
三变量的同或与异或是否有取反或之间的特征? - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值