将整数转换为二进制

5
我有一个整数,我想把它转换成二进制并将比特串存储在从右边开始的一维数组中。例如,如果输入是6,则应返回类似于[1,1,0]的数组。如何在Python中实现?
7个回答

6

解决方案

可能最简单的方法不是使用bin()和字符串切片,而是使用.format()的特性:

'{:b}'.format(some_int)

它的行为表现:

>>> print '{:b}'.format(6)
110
>>> print '{:b}'.format(123)
1111011

在使用bin()函数时,你仅仅只会得到一个带着"0b"前缀的字符串,因此你需要将其移除。

从二进制表示中获取int列表

编辑:好的,所以你不只是要一个字符串,而是要一个整数列表。你可以这样做:

your_list = map(int, your_string)

编辑问题的综合解决方案

整个流程如下:

your_list = map(int, '{:b}'.format(your_int))

在我看来,比起使用bin(),这种方法更加简洁明了。

+1; 现在有了{:b},是时候摆脱对bin(x)[2:]的滥用了。 - nneonneo

4
>>> map(int, bin(6)[2:])
[1, 1, 0]

如果您不想要一个整数列表(而是一个字符串列表),则可以省略map组件,改为以下方式:
>>> list(bin(6)[2:])
['1', '1', '0']

Relevant documentation:


2
我想知道为什么要使用 bin() 和切片,而不是现有的其他选项(即在字符串的 .format() 中使用二进制格式化)。你能解释一下这个选择吗? - Tadeck
1
@Tadeck 当然,两种方法都可以使用,但在这种情况下,“bin”似乎更合适。 - arshajii

3
您可以使用以下命令:
map(int, list(bin(YOUR_NUMBER)[2:]))

它的作用如下:
  • bin(YOUR_NUMBER)YOUR_NUMBER 转换为二进制表示。
  • bin(YOUR_NUMBER)[2:] 获取有效数字,因为该字符串是以 '0b110' 的形式返回的,所以必须删除 0b
  • list(...) 将字符串转换为列表。
  • map(int, ...) 将字符串列表转换为整数列表。

1

如果您使用的是 Python >= 2.6,您可以使用 bin 函数:

list(bin(6))[2:]

编辑:糟糕,忘记将项目转换为int了:

map(int, list(bin(6))[2:])

1
在现代的Python中,你可以(>python2.5):
>>> bin(23455)
'0b101101110011111'

去掉第一个“0b”:

>>> [ bit for bit in bin(23455)[2:] ]
['1', '0', '1', '1', '0', '1', '1', '1', '0', '0', '1', '1', '1', '1', '1']

所有东西都在一起:

def get_bits(number):
    return [ int(bit) for bit in bin(number)[2:] ]

在2.5版本中,您将会遇到一个NameError: name 'bin' is not defined的错误。

1

其他答案使用bin()来实现。虽然它可以工作,但我认为使用字符串操作来进行数学计算有点... 嗯... 不太好。

def tobits(x):
    r = []
    while x:
        r.append(x & 1)
        x >>= 1
    return r

tobits(0)将返回一个空列表。这可能很好,也可能不好,这取决于您对其的处理方式。因此,如果需要,请将其视为特殊情况。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接