python-day04_08 位运算符: & | ^ << >> ~

# ### (7)位运算符:    & |  ^ << >> ~

var1 = 19
var2 = 15

# & 按位与
res = var1 & var2
"""
000 ... 10011        #1为真 0为假
000 ... 01111
000 ... 00011 => 3   #1 1 为 1;1 0 为 1
"""
print(res)

# | 按位或
res = var1 | var2
"""
000 ... 10011
000 ... 01111
000 ... 11111 => 31   # 1 1 为 1;1 0 为 1
"""
print(res)

# ^ 按位异或
"""两个值不相同=>True 反之返回False"""
res = var1 ^ var2
"""
000 ... 10011
000 ... 01111
000 ... 11100 => 28
"""
print(res)

# << 左移 (相当于乘法)
"""5乘以2的n次幂"""
res = 5 << 1 # 10
res = 5 << 2 # 20
res = 5 << 3 # 40
print(res)

"""
000 ... 101  => 5
000 .. 1010  => 10
000 ..10100  => 20
000 .101000  => 40
"""

# >> 右移 (相当于除法)
"""5地板除2的n次幂"""
res = 5 >> 1 # 2
res = 5 >> 2 # 1
res = 5 >> 3 # 0
"""
000 ... 101
000 ... 010 => 2
000 ... 001 => 1
000 ... 000 => 0
"""
print(res)

# ~ 按位非 (针对于补码进行操作,按位取反,包含每一位)
""" -(n+1) """
# res = ~22 #~-23
res = ~19
print(res)
"""
原码:000 ... 10011  #19
反码:000 ... 10011
补码:000 ... 10011

补码:   000 ... 10011
按位非: 111 ... 01100

给你补码->原码
补码:111 ... 01100
反码:100 ... 10011
原码:100 ... 10100 => -20
"""

res = ~-19
print(res)
"""
原码:100 ... 10011
反码:111 ... 01100
补码:111 ... 01101

补码:   111 ... 01101
按位非: 000 ... 10010

给你补码->原码 (因为是整数 ,原反补相同)
000 ... 10010 => 19
"""

 

posted @ 2023-06-15 18:37  cuimeng  阅读(20)  评论(0)    收藏  举报