前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python异或运算符示例

Python异或运算符示例

作者头像
红目香薰
发布2022-11-30 18:28:52
5950
发布2022-11-30 18:28:52
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode

目录

异或

异或的性质

示例1:值交换

示例2:找出现一次的元素

示例2代码: 


异或

英文为exclusive OR,缩写成xor,符号是^

a

b

a^b

0假

0假

0假

0假

1真

1真

1真

0假

1真

1真

1真

0假

异或的性质

1、a ^ a=0 任何数字和自己异或结果是0 2、a ^ 0=a 任何数字和0异或还是他自己 3、a ^ b = b ^ a 异或运算具有交换律 4、a ^ (b ^ c) = (a ^ c) ^ b 异或运算具有结合律

我们依赖这四条性质就能做很多操作,例如下面的两个示例:

示例1:值交换

x=5 y=7将两个变量的值通过异或运算符进行交换

x = 5 y = 7 # x = 101(二进制) ^ 111(二进制) = 010(二进制) 异或代表相同取反,不同取正 1:1-0:1-1:1 = 010 二进制的010等于10进制的2 x = x ^ y # y = 010(二进制) ^ 111(二进制) = 101(二进制) 也就是:0:1-1:1-0:1 = 101 二进制101等于10进制的5 y = x ^ y # x = 010(二进制) ^ 101(二进制) = 111(二进制) 也就是:0:1-1:0-0:1 = 111 二进制的111等于10进制的7 x = x ^ y # 最终输出x = 111(二进制) = 7(十进制) print(x) # y = 101(二进制) = 5(十进制) print(y)

代码演示:

代码语言:javascript
复制
x = 5
y = 7
# x = 101(二进制) ^ 111(二进制) = 010(二进制) 异或代表相同取反,不同取正 1:1-0:1-1:1 = 010 二进制的010等于10进制的2
x = x ^ y
# y = 010(二进制) ^ 111(二进制) = 101(二进制) 也就是:0:1-1:1-0:1 = 101 二进制101等于10进制的5
y = x ^ y
# x = 010(二进制) ^ 101(二进制) = 111(二进制) 也就是:0:1-1:0-0:1 = 111 二进制的111等于10进制的7
x = x ^ y
# 最终输出x = 111(二进制) = 7(十进制)
print(x)
# y = 101(二进制) = 5(十进制)
print(y)

输出结果:

示例2:找出现一次的元素

给定一个非空整数数组,除了某个元素只出现一次以外,其每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?

输入示例1:

[2,2,1]

输出示例1:

1

输入示例2:

[4,1,2,1,2]

输出示例2:

4

理解分析:

我们在异或运算的过程中根据异或门的逻辑来看,因为数都是成对的,那么成对的数在异或过程中都会被消耗掉,只有单独存在的一个数不会被配对消耗掉,故而可以留存到最后。

注:

这里主要用到的是异或的n ^ n = 0的性质,来逐一消耗成对的数。

示例2代码: 

代码语言:javascript
复制
arr = [4, 1, 2, 1, 2]
index = 0
for i in arr:
    index ^= i
print(index)

结果: 

自定义测试:

代码语言:javascript
复制
arr = [4, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 2, 3, 4, 666, 1, 2, 3, 2]
index = 0
for i in arr:
    index ^= i
print(index)

结果正确: 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异或
  • 异或的性质
  • 示例1:值交换
  • 示例2:找出现一次的元素
    • 示例2代码: 
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档