异或运算解析

一、定义

异或,英文为exclusive OR,缩写成xor。
异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

!!!注意!!!-------是用二进制算的

二、运算法则

  1. 归零律:a ⊕ a = 0, 任何数与本身异或,结果均为0。
  2. 恒等律:a ⊕ 0 = a,任何数与0异或,结果均为本身。
  3. 交换律:a ⊕ b = b ⊕ a
  4. 结合律:a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c
  5. 自反:a ⊕ b ⊕ a = b
  6. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c
  7. 若x是二进制数0101,y是二进制数1011;则x⊕y=1110。
    只有在两个比较的位不同时其结果是1,否则结果为0
    即“两个输入相同时为0,不同则为1”!

三、应用

1.只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

def single_number(nums: list) -> int: 
	a = 0
    for n in nums:
    	a = a ^ n
    return a

时间复杂度O(n)
空间复杂度O(1)

解析:
遍历数组中的每一个元素,将所有元素进行异或运算,最终得到的结果就是只出现过一次的元素。这是因为,对于出现了两次的元素,它们在异或运算后会抵消掉;而只出现了一次的元素,由于没有配对的元素,所以它们的值会被保留下来。参考运算法则归零律,恒等律。

2. a和b不通过第三个变量来交换值

除了python中常用的 a,b=b,a之外,可以用异或:

a = 2
b = 5
a = a ^ b
b = a ^ b
a = a ^ b

解析:
(1)a =a^b; 这里 2的二进制是 0010, 5的二进制是 0101,结果是 0111,这个数是7。这里把7赋值给a。
(2)b=a^b;这里 a=7,b还是5。在做异或运算 0111 和0101 运算的结果是0010,转换成十进制就是2。
(3)a=a^b;这里 a=7,b=2. 在做异或 0111 和 0010 运算结果是0101,,转换成十进制就是5。

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值