0
点赞
收藏
分享

微信扫一扫

python基础练习100打卡(051~055)

夜空一星 2022-02-25 阅读 63
python

继续学习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

举报

相关推荐

0 条评论