在Python中将整数转换为二进制,然后进行左位移

7

我有一个从文本文件中读取的整数输入,我需要将其转换为二进制并向左移动12位。

例如,如果我的数字是6。那它在二进制下就是110。我的最终输出应该是通过向左移动12个位置得到的,也就是110000000000000。

我尝试过:

i = 6
h = int(bin(i)[2:])<<12

但是,这会导致错误的输出。问题在于bin(i)返回一个字符串,所以我必须将其转换为整数,然后使用位移操作符来移动整数而不是二进制数。


1
如果没有指示,实际上并不使用 ih,我建议删除其中一个变量。还要注意,"{:b}".format(i) 创建了 i 的二进制表示形式,而不带有之后需要去除的前导 0b - guidot
2个回答

6

在将整数转换为二进制之前,您可以进行位移操作,因为位移操作不关心整数的基数(位移操作是根据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)

也许不建议使用最后一种方法,但它说明了(左)位移如何工作。

-1
我找到了一种方法。
h = int((bin(i<<12)[2:]), 2)

1
来回转换看起来非常笨重。 - guidot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接