我有一个文本文件的整数输入,我需要把它转换成二进制,然后左移12位。
所以,如果我的号码是6。
二进制是110。
我的最终输出应该是110000000000000,位移了12位。
我试过:
i = 6
h = int(bin(i)[2:])<<12
但是,这给了错误的输出。问题是
bin(i)
返回一个字符串,所以我必须将其转换为int,但是使用shift运算符将整数而不是二进制数移位。 最佳答案
您可以在转换为二进制之前进行位移位,因为位移位不关心整数的基数(根据定义,位移位是在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)
位移位将使数值增加一倍,因此通过将位错乘以功率二,我们实现了同样的事情:
> print(6 << 12)
24576
> print(6 * 2**12)
24576
如果你只想把数值翻一倍,最好使用位移。
您还可以将其转换为二进制,然后添加13个尾随零点,这是实现相同功能的一种快捷方式:
i = 6 # Notice: No operation here this time
answer = "{:b}".format(i) + ('0' * 12)
也许不建议使用最后一种方法,但它说明了(左)位移位的工作原理。