在python中将整数转换为二进制


186

为了将整数转换为二进制,我使用了以下代码:

>>> bin(6)  
'0b110'

什么时候擦除“ 0b”,我用这个:

>>> bin(6)[2:]  
'110'

我能做些什么,如果我想展现600000110,而不是110


2

Answers:


370
>>> '{0:08b}'.format(6)
'00000110'

仅说明格式化字符串的部分:

  • {} 将变量放入字符串
  • 0 将变量放在参数位置0
  • :为该变量添加格式设置选项(否则它将代表小数6
  • 08 将数字格式化为左侧零填充的八位数字
  • b 将数字转换为其二进制表示形式

如果您使用的是Python 3.6或更高版本,则还可以使用f字符串:

>>> f'{6:08b}'
'00000110'

7
第一个0表示的自0th变量format。结肠是格式化之后,第二0装置填零到8个空格和b二进制
jamylak

@Aif:另外,看看标准的文档docs.python.org/library/...
PEPR

20
这可以通过简化format() 功能format(6, '08b'); 该函数采用一个值(该{..}插槽适用于什么)和一个格式说明(无论您:在格式字符串中放置的内容)。
马丁·彼得斯

4
'{0:08b}'.format(-6)-> '-0000110'。如果您不想要标志怎么办?struct-6%256
n611x007 2014年

1
@ AK47是的,自Pythoon 2.6起,您可以以0b或0B前缀的二进制形式编写int常量: 0b00000110
Denis Barmenkov,

102

只是另一个想法:

>>> bin(6)[2:].zfill(8)
'00000110'

通过字符串插值Python 3.6+)的更短方法:

>>> f'{6:08b}'
'00000110'

7
请注意,此解决方案比公认的解决方案要。哪种解决方案更清晰(或者,我敢说是Pythonic)可能是个人喜好问题。
航空

我仍在学习pythonicity的本质,但这显然更加通用。最初,我很高兴看到其可接受的解决方案及其优美的解释,但警告说,被调用以执行该方法的对象被编写为包含所有规范的单个字符串,从而消除了所需长度等变量的参与位串的。这样可以完全解决问题,并且非常直观(至少对于Python 2如此),因此无需解释每个字符!
Post169

不适用于负整数,bin(-6)[2:].zfill(8)'0000b110'
jlandercy '19

20

有点纠结的方法...

>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'

1
不错的方法。但是我不明白您的代码的这一部分在做什么:str((x >> i)&1)
Gregory

2
@Gregory:它将位x向右移并与进行与运算1,一次有效地提取一位(0或1)。
usr2564301

16

只需使用格式功能

format(6, "08b")

一般形式是

format(<the_integer>, "<0><width_of_string><format_specifier>")

1
是的,我喜欢这个,它很简单,也是最快的之一:-) 1000000 loops, best of 3: 556 ns per loop
SebMa

10

eumiro的答案更好,但是我只是发布此内容以供参考:

>>> "%08d" % int(bin(6)[2:])
00000110

3
嘿。这是非常错误的,我不得不投票赞成。巧妙地将数字解释为十进制。更糟糕的是:'%08x' % int(bin(6)[2:], 16)
疯狂物理学家

6

..或如果不确定该数字始终为8位数字,则可以将其作为参数传递:

>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'

5

上老学校总是可行的

def intoBinary(number):
binarynumber=""
if (number!=0):
    while (number>=1):
        if (number %2==0):
            binarynumber=binarynumber+"0"
            number=number/2
        else:
            binarynumber=binarynumber+"1"
            number=(number-1)/2

else:
    binarynumber="0"

return "".join(reversed(binarynumber))

number=number/2给人浮动,所以number=number//2缝好,我也将取代number=number//2number//=2b=b+"0"b+="0"
Brambor

另外,您没有0填充作为所需的OP
Brambor

5

numpy.binary_repr(num, width=None) 有一个魔术宽度论点

上面链接的文档中的相关示例:

>>> np.binary_repr(3, width=4)
'0011'

当输入数字为负并且指定了宽度时,将返回二进制补码:

>>> np.binary_repr(-3, width=5)
'11101'

1
('0' * 7 + bin(6)[2:])[-8:]

要么

right_side = bin(6)[2:]
'0' * ( 8 - len( right_side )) + right_side

3
尽管此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高​​答案的长期价值。
Nic3500 '18

1

假设您要解析用于表示不总是恒定的变量的位数,一种好方法是使用numpy.binary。

当您将二进制应用于功率集时可能会有用

import numpy as np
np.binary_repr(6, width=8)


0

最好的方法是指定格式。

format(a, 'b')

以字符串格式返回a的二进制值。

要将二进制字符串转换回整数,请使用int()函数。

int('110', 2)

返回二进制字符串的整数值。


最好使用format(a,'08b')获得用户想要的格式。
ZSG

0
def int_to_bin(num, fill):
    bin_result = ''

    def int_to_binary(number):
        nonlocal bin_result
        if number > 1:
            int_to_binary(number // 2)
        bin_result = bin_result + str(number % 2)

    int_to_binary(num)
    return bin_result.zfill(fill)

0

您可以使用:

"{0:b}".format(n)

我认为这是最简单的方法!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.