从异或到python位运算

1. 异或的概念

异或,英文为exclusive OR,缩写成xor

异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

2. 运算法则

1. a ⊕ a = 0

2. a ⊕ b = b ⊕ a

3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;

4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.

5. a ⊕ b ⊕ a = b.

6.若x是二进制数0101,y是二进制数1011;

则x⊕y=1110

只有在两个比较的位不同时其结果是1,否则结果为0

即“两个输入相同时为0,不同则为1”!

aba⊕b
101
110
000
011

3. 位运算

运算符号描述
&把数字转为二进制后,同位的数为1结果为1,否则为0
\ 把数字转为二进制后,同位的数一个为1,结果为1,否则为0
^把数字转为二进制后,同位的数不同,则结果为1,否则为0
~数字取反且符号位进行补码,简单的可以理解为,~x=-(x+1)
<<和>>把数字转为二进制后,进行左移或者y右移,高位丢弃,低位补0

4. 代码实例

# -*- coding: utf-8 -*-
"""
Created on Fri Jul 26 20:28:20 2019

@author:  jlblog.tech
"""

x=6
y=8

print ('x的二进制'+bin(x))
#0*2^0+1*2^1+1*2^2=6  
#所以6的二进制为110
print ('y的二进制'+bin(y))
#0*2^0+0*2^1+0*2^2+1*2^3=8  
#8的二进制为1000
print (x&y)
#1000&0100 --->0000 =>十进制0
print (x|y)
#1000|0100--->1110=>十进制14
print (x^y)
#1000^0100--->1110 =>十进制14
print (~x)
#-(6+1)=-7
print (~y)
#-(9+1)=-9

print(x<<2)
#110-->11000  =>十进制24

5. 运行结果