ChatGPT解决这个技术问题 Extra ChatGPT

Converting integer to binary in python

In order to convert an integer to a binary, I have used this code :

>>> bin(6)  
'0b110'

and when to erase the '0b', I use this :

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

What can I do if I want to show 6 as 00000110 instead of 110?

Possible duplicate of Python int to binary?

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

Just to explain the parts of the formatting string:

{} places a variable into a string

0 takes the variable at argument position 0

: adds formatting options for this variable (otherwise it would represent decimal 6)

08 formats the number to eight digits zero-padded on the left

b converts the number to its binary representation

If you're using a version of Python 3.6 or above, you can also use f-strings:

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

The first 0 means the 0th argument to format. After the colon is the formatting, the second 0 means zero fill to 8 spaces and b for binary
@Aif: Also, have a look at the standard documentation docs.python.org/library/…
This can be simplified with the format() function: format(6, '08b'); the function takes a value (what the {..} slot applies to) and a formatting specification (whatever you would put after the : in the formatting string).
'{0:08b}'.format(-6) -> '-0000110'. what if you don't want a sign? struct? -6%256?
@AK47 Yes, since Pythoon 2.6 you can write int constants in binary form with 0b or 0B prefix: 0b00000110
m
mshsayem

Just another idea:

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

Shorter way via string interpolation (Python 3.6+):

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

Note that this solution is faster than the accepted one. Which solution is more clear (or, dare I say it, Pythonic) is probably a matter of personal taste.
I'm still learning the essence of pythonicity, but this is clearly much more versatile. I was initially excited to see the accepted solution with its elegant explanation, but alarmed that the object being called on to do the methods was written as a single string with all specifications built in, eliminating the involvement of variables in such things as the desired length of the bitstring. This solves that completely, and is so intuitive (at least for Python 2) that there's no need to explain each character!
Does not work for negative integer bin(-6)[2:].zfill(8) reads as '0000b110'
m
marbel82

A bit twiddling method...

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

Nice method. But I couldn't understand what this part of your code is doing: str((x >> i) & 1)
@Gregory: it shifts the bits in x to the right and ANDs it with 1, effectively extracting one bit (0 or 1) at a time.
Very nice! As an observation, reversed could be removed by using range(7,-1,-1); albeit more ‘pure’, but perhaps less readable/intuitive.
t
theOne

Just use the format function

format(6, "08b")

The general form is

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

Yes, I like this one, it's simple and one of the fastest :-) 1000000 loops, best of 3: 556 ns per loop
j
jedwards

eumiro's answer is better, however I'm just posting this for variety:

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

T
Tom Hale

numpy.binary_repr(num, width=None) has a magic width argument

Relevant examples from the documentation linked above:

>>> np.binary_repr(3, width=4) '0011' The two’s complement is returned when the input number is negative and width is specified: >>> np.binary_repr(-3, width=5) '11101'


t
thebjorn

.. or if you're not sure it should always be 8 digits, you can pass it as a parameter:

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

S
Shadrack Kimutai

Going Old School always works

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 gives float, so number=number//2 seams better, also I would replace number=number//2 with number//=2 and b=b+"0" with b+="0"
also, you don't have the 0 padding as the OP required
P
Pranjalya

The best way is to specify the format.

format(a, 'b')

returns the binary value of a in string format.

To convert a binary string back to integer, use int() function.

int('110', 2)

returns integer value of binary string.


Better would be format(a, '08b') to obtain the format the user wanted.
a
ama

Assuming you want to parse the number of digits used to represent from a variable which is not always constant, a good way will be to use numpy.binary.

could be useful when you apply binary to power sets

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

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

or

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

While this code may answer the question, providing additional context regarding how and/or why it solves the problem would improve the answer's long-term value.
L
Leha

You can use just:

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

In my opinion this is the easiest way!


R
Raad Altaie

even an easier way

my_num = 6
print(f'{my_num:b}')

D
Dmity Bryuhanov
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)

J
Jonny Baron

The python package Binary Fractions has a full implementation of binaries as well as binary fractions. You can do your operation as follows:

from binary_fractions import Binary
b = Binary(6) # creates a binary fraction string
b.lfill(8) # fills to length 8

This package has many other methods for manipulating binary strings with full precision.


M
Mabel137

Simple code with recursion:

 def bin(n,number=('')):
   if n==0:
     return(number)
   else:
     number=str(n%2)+number
     n=n//2
     return bin(n,number)

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.