0

我试图表达一个将二进制数表示为实二进制数的列表,如 (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
4

2 回答 2

2

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

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

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'
于 2013-09-04T14:07:06.790 回答
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])

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

于 2013-09-04T15:48:08.887 回答