我有一个从文本文件中读取的整数输入,我需要将其转换为二进制并向左移动12位。
例如,如果我的数字是6。那它在二进制下就是110。我的最终输出应该是通过向左移动12个位置得到的,也就是110000000000000。
我尝试过:
i = 6
h = int(bin(i)[2:])<<12
但是,这会导致错误的输出。问题在于bin(i)
返回一个字符串,所以我必须将其转换为整数,然后使用位移操作符来移动整数而不是二进制数。
在将整数转换为二进制之前,您可以进行位移操作,因为位移操作不关心整数的基数(位移操作是根据2进制定义的)。
i = 6 << 12
answer = bin(i)[2:]
编辑:来自@guidot的备选二进制转换方法i = 6 << 12
answer = "{:b}".format(i)
仅仅为了好玩,这里介绍一些将数字进行位移的其他方法:
i = 6 * (2**12) # This will convert into 6 * 2^12
answer = "{:b}".format(i)
位移操作会使数字的值翻倍,所以通过将位移乘以2的幂,我们就可以实现相同的效果:
> print(6 << 12)
24576
> print(6 * 2**12)
24576
如果您知道只需要将值加倍,通常最好使用位移。
您还可以将其转换为二进制,然后添加13个尾随零,这是一种实现相同功能的奇特方法:
i = 6 # Notice: No operation here this time
answer = "{:b}".format(i) + ('0' * 12)
"{:b}".format(i)
创建了i
的二进制表示形式,而不带有之后需要去除的前导 0b。 - guidot