继续学习python🆗
051
题目
分析
作用对象为二进制数,就是将两个二进制数每一位进行比较,若相应二进制位都为1,则对应结果为1;否则为0。
代码
a = 0x77 # 0x77->01110111
b = a & 3 # 3->00000011
print(b) # 00000011->3
b &= 7 # 7->00000111
print(b) # 00000011->3
052
题目
分析
作用对象为二进制,就是将两个二进制数每一位进行比较,若相应二进制位都为0,则对应结果为0;否则为1。
代码
a = 0o77 # 0o77->111111
b = a | 3 # 3->000011
print(b) # 111111->63
b |= 7 # 7->000111
print(b) # 111111->63
053
题目
分析
作用对象为二进制,就是将两个二进制数每一位进行比较,相应二进制位数相同则为0,相异则为1。
代码
a = 0o77 # 0o77->111111
b = a ^ 3 # 3->000011
print(b) # 111100->60
b ^= 7 # 7->000111
print(b) # 111011->59
054
题目
分析
题目意思应该是取a二进制下的从右端开始4~7位,菜鸟的解析:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用(0<<4)
(3)将上面二者进行&运算。
不过有点奇奇怪怪的,a右移四位取的结果是右端开始的5~8位,有些出入呀?
代码
a = 9
print(f"a:{a:08b}")
b = a >> 3
print(f"b:{b:08b}")
c = ~(~0 << 4) # 00001111
d = b & c
print(f"d: {d:04b}")
055
题目
分析
学过又忘系列,再次学习。
假设两个十进制数a、b分别表示取反之前和之后的数,那么对a取反大致流程:
a)将a转为二进制,并得出a的补码
b)将a的补码所有位按位取反+1,这里的结果就为b的补码
c)根据b的补码得出其原码,最后转为十进制
比如对9取反:二进制00001001->对应补码00001001->所有位取反并加一11110111,为结果数的补码->符号位为1表示负数,按负数的补码转原码方法进行,原码为10001010,转为十进制-10。
代码
a = 7
b = ~a
print(f"a取反后为:{b}") # -8
c = -7
d = ~c
print(f"c取反后为:{d}") # 6