Python:如何加入二进制文件?从二进制功率矢量演示到真正的二进制演示,如何?

时间:2013-09-04 13:59:39

标签: python math syntax binary

我试图表达一个列表,表示二进制数字作为实际二进制数,如(1,3,6)表示0b100101。首先,我尝试将它们加总为2 ^ 1 + 2 ^ 3 + 2 ^ 6然后转换为二进制

with open('DATA.txt') as f:
    for line in f:
            myLine=line.rstrip().split("\t")
            print [bin(2**int(l)) for l in myLine[1:5]]

我将其转换为列表,如下面的a所以

>>> a=['0b10000000000000000000000000', '0b100000000000', '0b100000000000000000000000000000']
>>> a[1]|a[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'str' and 'str'
>>> bin(a[1])+bin(a[2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an index

所以

  

我应该如何将功率矢量转换为二进制数,即如何从功率二进制数表示中获得真正的二进制数表示?

简单示例

  

输入

['0b10000000000000000000000000', '0b100000000000', '0b100000000000000000000000000000']
     

预期输出

0b100010000000000000100000000000

2 个答案:

答案 0 :(得分:2)

bin内置函数返回的值是一个简单的字符串。这不是“二进制数”。二进制数不存在,只有数字的二进制表示。 Python整数在内部表示为base-2,bin函数允许“看到”这个(实际上是模数和符号表示,而不是二进制补码)表示为字符串。

如果要对这些字符串执行|等按位操作,则必须将它们转换为整数然后再转换为字符串:

In [7]: bin(int('0b10000', 2)|int('0b100', 2))
Out[7]: '0b10100'

如果给定二进制字符串列表,您希望获得组合这些字符串的数字,则可以使用reduce函数:

In [8]: import operator as op

In [9]: from functools import reduce

In [10]: a = ['0b10000000000000000000000000', '0b100000000000', '0b100000000000000000000000000000']

In [13]: bin(reduce(op.or_, (int(num, 2) for num in a)))
Out[13]: '0b100010000000000000100000000000'

答案 1 :(得分:1)

Bakuriu非常清楚地解释了发生了什么,所以我会简短地说明这一点。问题的解决方案是

with open('DATA.txt') as f:
    for line in f:
        myLine=line.rstrip().split("\t")
        print sum(2**int(l) for l in myLine[1:5])

请注意,求和等于二进制,或者只要设置不同的位,我在这里假设是这种情况。