1

所以我有 t=111

bin(1111)
Out[105]: '0b10001010111'

g = bin(111)

g
Out[16]: '0b1101111'

我的问题是,是否可以去掉引号。我关心对它执行算术运算。

像 g = g -0b1 等在迭代中。

更新

我只是想让例如 g = bin(111)[2:] 在 qoutations 中成为 1101111 而不是 '1101111' 。

无论如何,做了一个非常简单的解决方法,而不是接收二进制数并对其进行操作。

    length = len(string) #what is the len of this string
    t = startrange #Equivalent to binary string, i.e. for 111 it is 7
    for i in range(int(startrange)):
        t -= 1
        l=tuple((bin(t)[2:].zfill(length)))

PS:但是在迭代中 bin() 转换每次都会发生。并不是说这是一个严重的性能问题。

4

5 回答 5

3

bin在要将数字转换为字符串时使用。

任何整数都已经是计算机内部的位,无需“转换”它以执行任何算术运算。

使用整数值进行任何计算并将结果转换为仅用于输出的格式。

于 2013-05-23T15:24:29.087 回答
2

你所要求的和/或你正在做的事情没有多大意义。该bin函数返回一个字符串,所以它总是会“有”引号。如果您想对数字进行算术运算,您只需将其用作数字(在调用之前您已经可以访问bin)。计算完成后,您可以使用bin二进制格式来格式化结果。

除非您尝试手动进行机器通常会为您执行的二进制计算。然后你可以做这样的事情:

number = 111
bits = [int(b) for b in bin(number)[2:]] # get a list of "bits"
print(bits) # Prints [1, 1, 0, 1, 1, 1, 1]

然后你可以手动做你的位操作,我猜。

正如 Jon Clements 提到的那样进行编辑,您可以使用函数(格式化为二进制格式规范)而不是您使用的map函数更清晰地执行此操作:format'b'bin

number = 111
bits = map(int, format(number, 'b')) # get a list of "bits"
print(bits) # Prints [1, 1, 0, 1, 1, 1, 1]
于 2013-05-23T15:25:24.890 回答
0

只需打印它:

>>> print bin(1111)
0b10001010111

您实际上没有引号,只是您的 python“shell”将它们附加到输出以“帮助”您

于 2013-05-23T15:23:44.477 回答
0

如果您必须转到二进制字符串,然后用它进行计算,只需:

binary_string = bin(111)

num_to_calc_with = int(binary_string, base=2)
于 2013-05-23T15:26:00.227 回答
-2

正如人们所说,您根本不需要这样做,但是如果您想要的话,以下内容将为您提供二进制数作为整数:

int(bin(111)[2::])
于 2013-05-23T15:26:49.780 回答