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

Posted

技术标签:

【中文标题】将整数转换为二进制,然后在 python 中进行左位移【英文标题】:Convert integer to binary and then do a left bit shift in python 【发布时间】:2019-03-07 10:18:36 【问题描述】:

我有一个来自文本文件的整数输入,我需要将其转换为二进制并左移 12 位。

所以,如果我的号码是 6。 二进制是 110。 我的最终输出应该是 110000000000000,位移了 12 位。

我试过了:

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

但是,这给出了错误的输出。问题是bin(i) 返回一个字符串,所以我必须将其转换为 int 但然后使用移位运算符移动整数而不是二进制。

【问题讨论】:

如果没有说明,ih 之后实际使用,我建议删除这些变量之一。另请注意,":b".format(i) 创建了 i 的二进制表示,没有您之后删除的前导 0b 【参考方案1】:

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

可能不建议使用最后一种方法,但它说明了(左)位移的工作原理。

【讨论】:

【参考方案2】:

我找到了一种方法。

h = int((bin(i

【讨论】:

来回转换看起来很麻烦。

以上是关于将整数转换为二进制,然后在 python 中进行左位移的主要内容,如果未能解决你的问题,请参考以下文章

怎样用python编程将二进制转成10进制

在 Python 中将整数转换为 2 字节的十六进制值

python - 为啥在python中使用int()将二进制转换为整数会在将2作为基本参数时给出错误

Python新建文件,从键盘输入一个正整数并将其赋值给a,然后输入将a分别转换为二?

将十六进制字符串转换为整数

Swift将十六进制字符串或字符转换为整数