python中的异或运算

Python017

python中的异或运算,第1张

leetcode上有这么一道题:【136. Single Number】

这个题是给出一个非空列表,里面的元素只有一个只出现了一次,其余都出现了两次,找出这个只出现了一次的元素。

这个题目很简单,写了一下直接提交:

翻了一下讨论,发现了一个很简单快速的方法:

查了一下异或运算,发现找到唯一值是异或运算在python中的主要用途之一。其原理是这样的:

输出:70

当a,b都转换为二进制:

输出:0b1010与0b1001100

异或运算是将两个数相同位置(长度不一时要对齐)的数值,不同为1时,结果为1,否则为0 。比如:(0101) ^ (0011) = 0110。

这里a ^ b = 0b1000110,即70。

当两个数相同时,异或运算结果为0.

&

按位与

|

按位或

^

按位异或

1.

按位与运算

按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1

,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下:

00001001

(9的二进制补码)&00000101

(5的二进制补码)

00000001

(1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a

的高八位清

0

保留低八位,

可作

a&255

运算

(

255

的二进制数为0000000011111111)。

main(){

int

a=9,b=5,c

c=a&b

printf("a=%d\nb=%d\nc=%d\n",a,b,c)

}

2.

按位或运算

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下:

00001001|00000101

00001101

(十进制为13)可见9|5=13

main(){

int

a=9,b=5,c

c=a|b

printf("a=%d\nb=%d\nc=%d\n",a,b,c)

}

3.

按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:

00001001^00000101

00001100

(十进制为12)

main(){

int

a=9

a=a^15

printf("a=%d\n",a)

}