如何在Python中连接位

时间:2013-10-31 11:44:16

标签: python

我有两个字节,例如01010101和11110000.我需要连接第二个字节“1111”和第一个整个字节的四个最高有效位,产生类似于0000010101011111,即填充四个零,第一个整个字节,最后是四个最重要的位第二个字节。

有什么想法吗?

1 个答案:

答案 0 :(得分:11)

试试这个:

first = 0b01010101
second = 0b11110000
res = (first<<4) | (second>>4)
print bin(res)

通过将第一个字节向左移位(first<<4),您将添加4个尾随零位。第二部分(second>>4)将移出到第二个字节的右4个LSB位以丢弃它们,因此只剩下4个MSB位,然后你可以按位或者两个部分结果(|在python中)将它们结合起来。

拆分结果

要回答@JordanMackie的问题,你可以将res拆分为两个变量,只需从second中删除原来的4个最低有效位。

first = 0b01010101
second = 0b11110000
res = (first<<4) | (second>>4)
print ("res    : %16s" %(bin(res)) )

first2 = (res>>4) & 255
second2 = (res&0b1111)<<4

print ("first2 : %16s" % (bin(first2)) )
print ("second2: %16s" % (bin(second2)) )

输出如下:

res    :    0b10101011111
first2 :        0b1010101
second2:       0b11110000

第一个命令提取原始的第一个字节。它将来自second变量的4个LSB位移到右侧(运算符>>),因此它们将被丢弃。下一个逻辑和操作&仅保留操作的8个最低位,并且丢弃任何额外的高位:

first2 = (res>>4) & 255

其中第二个命令只能恢复second变量的4个MSB位。它使用逻辑乘法(&amp;)从属于res的{​​{1}} ult中仅选择4个LSB。 (任何&amp; 1 =任何东西,任何东西&amp; 0 = 0)。高位被丢弃,因为它们与0位进行“与”运算。

接下来,这4位向左移位。零位出现在4个最低有效位位置:

second