首先,你的代码对于0的计算有误;其次,使用算数运算不像位运算效率高;另外,使用字符串可以方便一些。以下希望能给你带来启发:
x = int(input()) # You can also use list Rs = "" # Or `if x < 0: x += 256` x = (x + 256) % 256 # Shift 8 times: when x equals 0, Rs automatically gets 0 prefix for i in range(8): Rs = str(x & 1) + Rs x >>= 1 print(Rs)
上面这份代码如果想进一步提高效率,可以使用列表,用Rs.insert(0, elem)而不是[elem] + Rs。
至于如何在前面自动补零,如果非要用len:
for i in range(8 - len(Rs)): Rs.insert(0, 0)
如果Rs是字符串,可以直接利用format:
# python --version all print("{:0>8}".format(Rs)) # python --version >= 3.6 print(f"{Rs:0>8}")
所以,这个程序其实只需要一句话:
print ( f "{(x + 256) % 256:0>8b}" )
欢迎关注,有其他问题随时私信讨论~