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

Smi*_*ith 159 python binary integer

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

>>> bin(6)  
'0b110'
Run Code Online (Sandbox Code Playgroud)

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

>>> bin(6)[2:]  
'110'
Run Code Online (Sandbox Code Playgroud)

我能做些什么,如果我想表明6作为00000110代替110

eum*_*iro 322

>>> '{0:08b}'.format(6)
'00000110'
Run Code Online (Sandbox Code Playgroud)

只是为了解释格式化字符串的各个部分:

  • {} 将变量放入字符串中
  • 0 将变量置于参数位置0
  • :为此变量添加格式选项(否则它将表示十进制6)
  • 08 将数字格式化为左侧零填充的八位数字
  • b 将数字转换为二进制表示

如果您使用的是Python 3.6或更高版本,您还可以使用f-strings:

>>> f'{6:08b}'
'00000110'
Run Code Online (Sandbox Code Playgroud)

  • 这可以通过[`format()`*function*](http://docs.python.org/2/library/functions.html#format)简化:`format(6,'08b')`; 该函数接受一个值(`{..}`槽适用于什么)和格式化规范(无论你在格式化字符串中的`:`之后放置什么). (18认同)
  • 第一个"0"表示`format`的第0个参数.冒号是格式化后,第二个"0"表示零填充为8个空格,"b"表示二进制 (6认同)
  • `'{0:08b}'.format(-6)` - >`' - 0000110'`.如果你不想要一个标志怎么办?[`struct`](https://docs.python.org/2.7/library/struct.html)?`-6%256`? (4认同)

msh*_*yem 96

另一个想法:

>>> bin(6)[2:].zfill(8)
'00000110'
Run Code Online (Sandbox Code Playgroud)

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

>>> f'{6:08b}'
'00000110'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此解决方案[比接受的解决方案更快](https://ideone.com/5yQc6x).哪种解决方案更清晰(或者,我敢说,Pythonic)可能是个人品味的问题. (7认同)

sob*_*bel 20

有点笨拙的方法......

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

  • @Gregory:它将“ x”中的位向右移,并与“ 1”进行与,一次有效地提取一位(0或1)。 (2认同)

小智 14

只需使用格式功能

format(6, "08b")
Run Code Online (Sandbox Code Playgroud)

一般形式是

format(<the_integer>, "<0><width_of_string><format_specifier>")
Run Code Online (Sandbox Code Playgroud)

  • 是的,我喜欢这个,它很简单,也是最快的之一:-) `1000000 个循环,最好的 3 个:每个循环 556 ns` (2认同)

jed*_*rds 10

eumiro的答案更好,但我只是发布这个变种:

>>> "%08d" % int(bin(6)[2:])
00000110
Run Code Online (Sandbox Code Playgroud)

  • 嘿.这是非常错误的,我不得不赞成它.将数字解释为十进制是狡猾的.更糟糕的是:''%08x'%int(bin(6)[2:],16)` (3认同)

Tom*_*ale 7

numpy.binary_repr(num, width=None) 有一个神奇的宽度参数

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

>>> np.binary_repr(3, width=4)
'0011'
Run Code Online (Sandbox Code Playgroud)

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

>>> np.binary_repr(-3, width=5)
'11101'
Run Code Online (Sandbox Code Playgroud)


the*_*orn 6

..或者如果您不确定它应该总是8位数,您可以将其作为参数传递:

>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'
Run Code Online (Sandbox Code Playgroud)


小智 6

最好的方法是指定格式。

format(a, 'b')
Run Code Online (Sandbox Code Playgroud)

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

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

int('110', 2)
Run Code Online (Sandbox Code Playgroud)

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


小智 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))
Run Code Online (Sandbox Code Playgroud)