integer to binary...

Discussion in 'Python' started by nicolasg@gmail.com, Jun 1, 2006.

  1. Guest

    does anyone know a module or something to convert numbers like integer
    to binary format ?

    for example I want to convert number 7 to 0111 so I can make some
    bitwise operations...

    Thanks
     
    , Jun 1, 2006
    #1
    1. Advertising

  2. schrieb:
    > does anyone know a module or something to convert numbers like integer
    > to binary format ?


    unfortunately there is no builtin function for this

    >>> int("111",2)

    7
    >>> str(7)

    '7'
    >>> str(7,2)

    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    TypeError: str() takes at most 1 argument (2 given)
    >>>


    int, str are not symmetrical
    I hope this will change in future

    <rebel on>

    you can use Ruby's 7.to_s(2) for this
    irb(main):001:0> 7.to_s(2)
    => "111"
    irb(main):002:0> 7.to_s(3)
    => "21"
    irb(main):003:0>

    </rebel on>

    > for example I want to convert number 7 to 0111 so I can make some
    > bitwise operations...


    you can use bitwise operations on int's anyway

    7 & 3 == 3
    (1 << 20) | (1 << 10) == 2**20+2**10

    and so on
     
    =?ISO-8859-1?Q?Sch=FCle_Daniel?=, Jun 1, 2006
    #2
    1. Advertising

  3. Alexis Roda Guest

    Alexis Roda, Jun 1, 2006
    #3
  4. On 2006-06-01, <> wrote:

    > does anyone know a module or something to convert numbers like integer
    > to binary format ?


    They _are_ in binary format.

    > for example I want to convert number 7 to 0111 so I can make some
    > bitwise operations...


    Just do it:

    >>> 7 & 3

    3
    >>> 7 | 8

    15


    --
    Grant Edwards grante Yow! QUIET!! I'm being
    at CREATIVE!! Is it GREAT
    visi.com yet? It's s'posed to SMOKEY
    THE BEAR...
     
    Grant Edwards, Jun 1, 2006
    #4
  5. Guest

    Grant Edwards wrote:
    > On 2006-06-01, <> wrote:
    >
    > > does anyone know a module or something to convert numbers like integer
    > > to binary format ?

    >
    > They _are_ in binary format.
    >
    > > for example I want to convert number 7 to 0111 so I can make some
    > > bitwise operations...

    >
    > Just do it:
    >
    > >>> 7 & 3

    > 3
    > >>> 7 | 8

    > 15
    >
    >
    > --

    I know I can do that but I need to operate in every bit separeted.
    > Grant Edwards grante Yow! QUIET!! I'm being
    > at CREATIVE!! Is it GREAT
    > visi.com yet? It's s'posed to SMOKEY
    > THE BEAR...
     
    , Jun 1, 2006
    #5
  6. wrote:

    > does anyone know a module or something to convert numbers like integer
    > to binary format ?
    >
    > for example I want to convert number 7 to 0111 so I can make some
    > bitwise operations...


    >>> def bits(i,n):

    return tuple((0,1)[i>>j & 1] for j in xrange(n-1,-1,-1))

    >>> bits(7,4)

    (0, 1, 1, 1)

    Anton
     
    Anton Vredegoor, Jun 1, 2006
    #6
  7. On 2006-06-01, <> wrote:

    >>> does anyone know a module or something to convert numbers like
    >>> integer to binary format ?

    >>
    >> They _are_ in binary format.
    >>
    >> > for example I want to convert number 7 to 0111 so I can make some
    >> > bitwise operations...

    >>
    >> Just do it:
    >>
    >> >>> 7 & 3

    >> 3
    >> >>> 7 | 8

    >> 15

    >
    > I know I can do that but I need to operate in every bit separeted.


    Sorry, I've no clue what that means.

    --
    Grant Edwards grante Yow! Now KEN is having
    at a MENTAL CRISIS beacuse
    visi.com his "R.V." PAYMENTS are
    OVER-DUE!!
     
    Grant Edwards, Jun 1, 2006
    #7
  8. Guest

    wrote:
    > Grant Edwards wrote:
    > > On 2006-06-01, <> wrote:
    > >
    > > > does anyone know a module or something to convert numbers like integer
    > > > to binary format ?

    > >
    > > They _are_ in binary format.
    > >
    > > > for example I want to convert number 7 to 0111 so I can make some
    > > > bitwise operations...

    > >
    > > Just do it:
    > >
    > > >>> 7 & 3

    > > 3
    > > >>> 7 | 8

    > > 15
    > >
    > >

    this is exactly what I need ->
    http://www.daniweb.com/code/snippet285.html

    thanks.
    > > --

    > I know I can do that but I need to operate in every bit separeted.
    > > Grant Edwards grante Yow! QUIET!! I'm being
    > > at CREATIVE!! Is it GREAT
    > > visi.com yet? It's s'posed to SMOKEY
    > > THE BEAR...
     
    , Jun 1, 2006
    #8
  9. Tim Chase Guest

    >>> for example I want to convert number 7 to 0111 so I can make some
    >>> bitwise operations...

    >> Just do it:
    >>
    >>>>> 7 & 3

    >> 3
    >>>>> 7 | 8

    >> 15

    > I know I can do that but I need to operate in every bit separeted.



    I suppose there might be other operations for which having them
    as strings could be handy. E.g. counting bits:

    bitCount = len([c for c in "01001010101" if c=="1"])

    or parity checking with those counted bits...sure, it can be done
    with the raw stuff, but the operations often tend to be more obscure.

    Other reasons for wanting an arbitrary integer in binary might be
    for plain-old-display, especially if it represents bitmap data.

    If you just want to operate on each bit, you can iterate over the
    number of bits and shift a single bit to its position:

    >>> target = 10
    >>> shift = 0
    >>> while 1 << shift <= target:

    .... print "Bit %i is %i" % (shift,
    .... (target & (1 << shift)) >> shift)
    .... shift += 1
    ....
    Bit 0 is 0
    Bit 1 is 1
    Bit 2 is 0
    Bit 3 is 1


    It's ugly, but it works...

    -tkc
     
    Tim Chase, Jun 1, 2006
    #9
  10. On 2006-06-01, <> wrote:

    >>>> does anyone know a module or something to convert numbers like integer
    >>>> to binary format ?
    >>>
    >>> They _are_ in binary format.
    >>>
    >>>> for example I want to convert number 7 to 0111 so I can make
    >>>> some bitwise operations...
    >>>
    >>> Just do it:
    >>>
    >>> >>> 7 & 3
    >>> 3
    >>> >>> 7 | 8
    >>> 15

    >>

    > this is exactly what I need -> http://www.daniweb.com/code/snippet285.html


    That's nice, but I don't register at web sites like that.

    >> I know I can do that but I need to operate in every bit
    >> separeted.


    I still don't get what you want a binary string for.

    I can see wanting a sequence (e.g. array) of boolean values,
    but how are you going to do bitwise operations on a binary
    string?

    --
    Grant Edwards grante Yow! .. I think I'd
    at better go back to my DESK
    visi.com and toy with a few common
    MISAPPREHENSIONS...
     
    Grant Edwards, Jun 1, 2006
    #10
  11. On 2006-06-01, Tim Chase <> wrote:
    >>>> for example I want to convert number 7 to 0111 so I can make some
    >>>> bitwise operations...
    >>> Just do it:
    >>>
    >>>>>> 7 & 3
    >>> 3
    >>>>>> 7 | 8
    >>> 15

    >> I know I can do that but I need to operate in every bit separeted.

    >
    >
    > I suppose there might be other operations for which having them
    > as strings could be handy. E.g. counting bits:
    >
    > bitCount = len([c for c in "01001010101" if c=="1"])
    >
    > or parity checking with those counted bits...sure, it can be done
    > with the raw stuff, but the operations often tend to be more obscure.


    I would think an array or list of bits would be a lot more
    useful for doing "bitwise operations":

    bitCount = sum([0,1,0,0,1,0,1,0,1,0,1])
    parity = reduce(operator.xor,[0,1,0,0,1,0,1,0,1,0,1])

    > Other reasons for wanting an arbitrary integer in binary might be
    > for plain-old-display, especially if it represents bitmap data.


    Yes. I thought C should have had a %b format since the
    beginning, but nobody listens. But that's not
    what the OP said he wanted it for.

    --
    Grant Edwards grante Yow! Now I'm concentrating
    at on a specific tank battle
    visi.com toward the end of World
    War II!
     
    Grant Edwards, Jun 1, 2006
    #11
  12. Guest

    wrote:
    > does anyone know a module or something to convert numbers like integer
    > to binary format ?
    >
    > for example I want to convert number 7 to 0111 so I can make some
    > bitwise operations...
    >
    > Thanks


    Use the gmpy module.

    >>> import gmpy
    >>> a = 14
    >>> b = 7
    >>> c = 8


    >>> help(gmpy.digits)

    Help on built-in function digits:

    digits(...)
    digits(x[,base]): returns Python string representing x in the
    given base (2 to 36, default 10 if omitted or 0); leading '-'
    present if x<0, but no leading '+' if x>=0. x must be an mpz,
    or else gets coerced into one.

    >>> print gmpy.digits(a,2)

    1110
    >>> print gmpy.digits(b,2)

    111
    >>> print gmpy.digits(c,2)

    1000


    >>> help(gmpy.setbit)

    Help on built-in function setbit:

    setbit(...)
    setbit(x,n,v=1): returns a copy of the value of x, with bit n set
    to value v; n must be an ordinary Python int, >=0; v, 0 or !=0;
    x must be an mpz, or else gets coerced to one.

    >>> d = gmpy.setbit(c,1,1)
    >>> print gmpy.digits(d,2)

    1010



    >>> help(gmpy.scan1)

    Help on built-in function scan1:

    scan1(...)
    scan1(x, n=0): returns the bit-index of the first 1-bit of x (that
    is at least n); n must be an ordinary Python int, >=0. If no more
    1-bits are in x at or above bit-index n (which can only happen for
    x>=0, notionally extended with infinite 0-bits), None is returned.
    x must be an mpz, or else gets coerced to one.

    >>> help(gmpy.scan0)

    Help on built-in function scan0:

    scan0(...)
    scan0(x, n=0): returns the bit-index of the first 0-bit of x (that
    is at least n); n must be an ordinary Python int, >=0. If no more
    0-bits are in x at or above bit-index n (which can only happen for
    x<0, notionally extended with infinite 1-bits), None is returned.
    x must be an mpz, or else gets coerced to one.

    >>> print gmpy.scan1(a)

    1
    >>> print gmpy.scan1(b)

    0
    >>> print gmpy.scan1(c)

    3
    >>> print gmpy.scan1(d)

    1
    >>> print gmpy.scan0(a)

    0
    >>> print gmpy.scan0(b)

    3
    >>> print gmpy.scan0(c)

    0
    >>> print gmpy.scan0(d)

    0

    >>> help(gmpy.popcount)

    Help on built-in function popcount:

    popcount(...)
    popcount(x): returns the number of 1-bits set in x; note that
    this is 'infinite' if x<0, and in that case, -1 is returned.
    x must be an mpz, or else gets coerced to one.

    >>> print gmpy.popcount(a)

    3
    >>> print gmpy.popcount(b)

    3
    >>> print gmpy.popcount(c)

    1
    >>> print gmpy.popcount(d)

    2


    >>> help(gmpy.hamdist)

    Help on built-in function hamdist:

    hamdist(...)
    hamdist(x,y): returns the Hamming distance (number of bit-positions
    where the bits differ) between x and y. x and y must be mpz, or
    else
    get coerced to mpz.

    >>> print gmpy.hamdist(a,b)

    2
    >>> print gmpy.hamdist(a,c)

    2
    >>> print gmpy.hamdist(a,d)

    1
    >>> print gmpy.hamdist(b,c)

    4
    >>> print gmpy.hamdist(b,d)

    3
    >>> print gmpy.hamdist(c,d)

    1
     
    , Jun 1, 2006
    #12
  13. wrote:
    > wrote:
    >
    >>does anyone know a module or something to convert numbers like integer
    >>to binary format ?
    >>
    >>for example I want to convert number 7 to 0111 so I can make some
    >>bitwise operations...
    >>
    >>Thanks

    >
    >
    > Use the gmpy module.
    >
    >
    >>>>import gmpy
    >>>>a = 14
    >>>>b = 7
    >>>>c = 8

    >
    >
    >>>>help(gmpy.digits)

    >
    > Help on built-in function digits:
    >
    > digits(...)
    > digits(x[,base]): returns Python string representing x in the
    > given base (2 to 36, default 10 if omitted or 0); leading '-'
    > present if x<0, but no leading '+' if x>=0. x must be an mpz,
    > or else gets coerced into one.
    >
    >
    >>>>print gmpy.digits(a,2)

    >
    > 1110
    >
    >>>>print gmpy.digits(b,2)

    >
    > 111
    >
    >>>>print gmpy.digits(c,2)

    >
    > 1000
    >
    >
    >
    >>>>help(gmpy.setbit)

    >
    > Help on built-in function setbit:
    >
    > setbit(...)
    > setbit(x,n,v=1): returns a copy of the value of x, with bit n set
    > to value v; n must be an ordinary Python int, >=0; v, 0 or !=0;
    > x must be an mpz, or else gets coerced to one.
    >
    >
    >>>>d = gmpy.setbit(c,1,1)
    >>>>print gmpy.digits(d,2)

    >
    > 1010
    >
    >
    >
    >
    >>>>help(gmpy.scan1)

    >
    > Help on built-in function scan1:
    >
    > scan1(...)
    > scan1(x, n=0): returns the bit-index of the first 1-bit of x (that
    > is at least n); n must be an ordinary Python int, >=0. If no more
    > 1-bits are in x at or above bit-index n (which can only happen for
    > x>=0, notionally extended with infinite 0-bits), None is returned.
    > x must be an mpz, or else gets coerced to one.
    >
    >
    >>>>help(gmpy.scan0)

    >
    > Help on built-in function scan0:
    >
    > scan0(...)
    > scan0(x, n=0): returns the bit-index of the first 0-bit of x (that
    > is at least n); n must be an ordinary Python int, >=0. If no more
    > 0-bits are in x at or above bit-index n (which can only happen for
    > x<0, notionally extended with infinite 1-bits), None is returned.
    > x must be an mpz, or else gets coerced to one.
    >
    >
    >>>>print gmpy.scan1(a)

    >
    > 1
    >
    >>>>print gmpy.scan1(b)

    >
    > 0
    >
    >>>>print gmpy.scan1(c)

    >
    > 3
    >
    >>>>print gmpy.scan1(d)

    >
    > 1
    >
    >>>>print gmpy.scan0(a)

    >
    > 0
    >
    >>>>print gmpy.scan0(b)

    >
    > 3
    >
    >>>>print gmpy.scan0(c)

    >
    > 0
    >
    >>>>print gmpy.scan0(d)

    >
    > 0
    >
    >
    >>>>help(gmpy.popcount)

    >
    > Help on built-in function popcount:
    >
    > popcount(...)
    > popcount(x): returns the number of 1-bits set in x; note that
    > this is 'infinite' if x<0, and in that case, -1 is returned.
    > x must be an mpz, or else gets coerced to one.
    >
    >
    >>>>print gmpy.popcount(a)

    >
    > 3
    >
    >>>>print gmpy.popcount(b)

    >
    > 3
    >
    >>>>print gmpy.popcount(c)

    >
    > 1
    >
    >>>>print gmpy.popcount(d)

    >
    > 2
    >
    >
    >
    >>>>help(gmpy.hamdist)

    >
    > Help on built-in function hamdist:
    >
    > hamdist(...)
    > hamdist(x,y): returns the Hamming distance (number of bit-positions
    > where the bits differ) between x and y. x and y must be mpz, or
    > else
    > get coerced to mpz.
    >
    >
    >>>>print gmpy.hamdist(a,b)

    >
    > 2
    >
    >>>>print gmpy.hamdist(a,c)

    >
    > 2
    >
    >>>>print gmpy.hamdist(a,d)

    >
    > 1
    >
    >>>>print gmpy.hamdist(b,c)

    >
    > 4
    >
    >>>>print gmpy.hamdist(b,d)

    >
    > 3
    >
    >>>>print gmpy.hamdist(c,d)

    >
    > 1
    >

    For those digging deeper into this subject who are looking for speed,
    reading the past discussion on this newsgroup I was part of myself
    looking for fastest way of such integer to binary conversion can maybe
    be of interest:
    http://mail.python.org/pipermail/python-list/2006-January/319295.html
    (includes full source code of all compared approaches)

    Claudio
     
    Claudio Grondi, Jun 2, 2006
    #13
  14. Tim Chase <> wrote:
    >bitCount = len([c for c in "01001010101" if c=="1"])


    bitCount = "01001010101".count("1")

    --
    \S -- -- http://www.chaos.org.uk/~sion/
    ___ | "Frankly I have no feelings towards penguins one way or the other"
    \X/ | -- Arthur C. Clarke
    her nu becomeþ se bera eadward ofdun hlæddre heafdes bæce bump bump bump
     
    Sion Arrowsmith, Jun 2, 2006
    #14
  15. John Salerno Guest

    wrote:

    > Use the gmpy module.


    Yes, it's good. :)
     
    John Salerno, Jun 2, 2006
    #15
  16. a écrit :
    > does anyone know a module or something to convert numbers like integer
    > to binary format ?
    >
    > for example I want to convert number 7 to 0111 so I can make some
    > bitwise operations...


    You don't need to convert anything. The bitwise ops are &, |, <<, >>

    0 | 2 | 4
    -> 6
    6 & 2
    -> 2
    2 << 4
    -> 32
    8 >> 1
    -> 4
     
    Bruno Desthuilliers, Jun 3, 2006
    #16
  17. Grant Edwards a écrit :
    > On 2006-06-01, <> wrote:
    >
    >
    >>does anyone know a module or something to convert numbers like integer
    >>to binary format ?

    >
    >
    > They _are_ in binary format.


    Not really.

    >>> (7).__class__

    <type 'int'>
    >>> dir((7))

    ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__',
    '__delattr__', '__div__', '__divmod__', '__doc__', '__float__',
    '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__',
    '__hex__', '__init__', '__int__', '__invert__', '__long__',
    '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__',
    '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__',
    '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__',
    '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__',
    '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
    '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']
    >>>
     
    Bruno Desthuilliers, Jun 3, 2006
    #17
  18. a écrit :
    > Grant Edwards wrote:
    >
    >>On 2006-06-01, <> wrote:
    >>
    >>
    >>>does anyone know a module or something to convert numbers like integer
    >>>to binary format ?

    >>
    >>They _are_ in binary format.
    >>
    >>
    >>>for example I want to convert number 7 to 0111 so I can make some
    >>>bitwise operations...

    >>
    >>Just do it:
    >>
    >>
    >>>>>7 & 3

    >>
    >>3
    >>
    >>>>>7 | 8

    >>
    >>15
    >>
    >>
    >>--

    >
    > I know I can do that but I need to operate in every bit separeted.


    Could you explain the difference ?
     
    Bruno Desthuilliers, Jun 3, 2006
    #18
  19. On 2006-06-02, Bruno Desthuilliers <> wrote:
    > Grant Edwards a écrit :
    >> On 2006-06-01, <> wrote:
    >>
    >>
    >>>does anyone know a module or something to convert numbers like integer
    >>>to binary format ?

    >>
    >>
    >> They _are_ in binary format.

    >
    > Not really.


    Yes, really. Otherwise the bitwise boolean operations you
    demonstrated wouldn't work as shown.

    >>>> (7).__class__

    ><type 'int'>
    >>>> dir((7))

    > ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__',
    > '__delattr__', '__div__', '__divmod__', '__doc__', '__float__',
    > '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__',
    > '__hex__', '__init__', '__int__', '__invert__', '__long__',
    > '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__',
    > '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__',
    > '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__',
    > '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__',
    > '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
    > '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']
    >>>>


    The fact that they impliment the xor operator is pretty much
    proof that integers are stored in binary format -- xor is only
    defined for binary numbers.

    --
    Grant Edwards grante Yow! ... Blame it on the
    at BOSSA NOVA!!!
    visi.com
     
    Grant Edwards, Jun 3, 2006
    #19
  20. Tim Chase Guest

    > The fact that they impliment the xor operator is pretty much
    > proof that integers are stored in binary format -- xor is only
    > defined for binary numbers.


    Um...let's not use bad logic/proofs for evidencing this...

    >>> hasattr(set(), "__xor__")

    True

    :)

    -tkc
     
    Tim Chase, Jun 3, 2006
    #20
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?Sm9l?=

    CType(x,Integer) vs. Integer.Parse(x)

    =?Utf-8?B?Sm9l?=, Feb 6, 2006, in forum: ASP .Net
    Replies:
    7
    Views:
    5,976
    =?Utf-8?B?RGF2aWQgQW50b24=?=
    Feb 7, 2006
  2. =?ISO-8859-1?Q?Thomas_Gagn=E9?=

    No Math.min(Integer, Integer)?

    =?ISO-8859-1?Q?Thomas_Gagn=E9?=, Jul 29, 2003, in forum: Java
    Replies:
    0
    Views:
    536
    =?ISO-8859-1?Q?Thomas_Gagn=E9?=
    Jul 29, 2003
  3. Sebastian Stelzer

    How do I add an Integer to another Integer?

    Sebastian Stelzer, Oct 14, 2004, in forum: Java
    Replies:
    2
    Views:
    520
    Yu SONG
    Oct 15, 2004
  4. Sebastian Stelzer

    How do I add an Integer to another Integer?

    Sebastian Stelzer, Oct 14, 2004, in forum: Java
    Replies:
    6
    Views:
    45,828
    JavaBean2010
    Apr 7, 2010
  5. Johannes Zellner
    Replies:
    22
    Views:
    3,720
Loading...

Share This Page