#按为与运算 & ,按位或运算 | ,按位异或运算 ^ ,
#按位左移运算 << ,按位右移运算 >> ,按位取反运算 ~
#将所有的数字转换成二进制再进行运算
#--------------------------------------------------------------------------
#按为与运算 &
a = 23 #0b 10111
b = 15 #0b 01111 ###########同为1则为1,否则为0
#0b 00111 =十进制的7
print(0b111)
print(a & b) #7
#--------------------------------------------------------------------------
#按位或运算 |
a = 23 #0b 10111
b = 15 #0b 01111 ###########只要有一个是1,结果就是1,否则为0
#0b 11111 =十进制的31
print(0b11111) #31
print(a | b) #31
#--------------------------------------------------------------------------
#按位异或运算 ^
a = 23 #0b 10111
b = 15 #0b 01111 ###########相同为0,否则为1
#0b 11000 =十进制的24
print(0b11000) #24
print(a ^ b) #24
#--------------------------------------------------------------------------
#按位左移运算 << 16 8 4 2 1
x = 5 #0b 101 1 0 1 ,在后面增加两位
print(x << 2) #左移2位变成:1 0 1 0 0 ,那么此时 x = ob10100 =20
print(0b10100) #20
#同理 32 16 8 4 2 1
x = 5 #0b 101 1 0 1,在后面增加三位
print(x << 3)#左移3位变成:1 0 1 0 0 0,那么此时 x = ob101000 =40
print(0b101000) #40
#概念:x = 5,print(x << 2)。就是 52的2次方 (变量x 乘 位移数y的二次方)
#同理:x = 5,print(x << 3)。就是 53的2次方 (变量x 乘 位移数y的二次方)
#--------------------------------------------------------------------------
#按位右移运算 << 16 8 4 2 1
x = 15 #0b 0b1111 1 1 1 1,在后面减少两位
print(x >> 2) #右移2位变成: 1 1 ,那么此时 x = ob11 =3
print(float (15/4)) #浮点数向后取整
print(0b11) #3
#概念:x = 15,print(x >> 2)。就是 15/2的2次方 (变量x 除 位移数y的二次方)
#--------------------------------------------------------------------------
#按位取反运算 << 16 8 4 2 1
x = 11 #0b 0b1011 1 0 1 1
print(~x) #0变1,1变0: 0 1 0 0 变成-0100再-1
#概念: ~x = -x-1