470,831 Members | 1,891 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,831 developers. It's quick & easy.

integer to binary...

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 '06 #1
21 3614
ni******@gmail.com 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
Jun 1 '06 #2
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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...
Jun 1 '06 #3
En/na ni******@gmail.com ha escrit:
does anyone know a module or something to convert numbers like integer
to binary format ?
http://www.google.es/search?q=python+integer+to+binary

http://aspn.activestate.com/ASPN/Coo.../Recipe/219300
for example I want to convert number 7 to 0111 so I can make some
bitwise operations...


python already provides some bitwise operators:

http://docs.python.org/ref/summary.html

HTH
Jun 1 '06 #4

Grant Edwards wrote:
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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 '06 #5
ni******@gmail.com 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
Jun 1 '06 #6

ni******@gmail.com wrote:
Grant Edwards wrote:
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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 '06 #7
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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!!
Jun 1 '06 #8
>>> 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

Jun 1 '06 #9
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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...
Jun 1 '06 #10
On 2006-06-01, Tim Chase <py*********@tim.thechases.com> 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!
Jun 1 '06 #11

ni******@gmail.com 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 '06 #12
me********@aol.com wrote:
ni******@gmail.com 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/pyt...ry/319295.html
(includes full source code of all compared approaches)

Claudio
Jun 2 '06 #13
me********@aol.com wrote:
Use the gmpy module.


Yes, it's good. :)
Jun 2 '06 #14
Tim Chase <py*********@tim.thechases.com> wrote:
bitCount = len([c for c in "01001010101" if c=="1"])


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

--
\S -- si***@chiark.greenend.org.uk -- 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
Jun 2 '06 #15
ni******@gmail.com 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
Jun 2 '06 #16
Grant Edwards a écrit :
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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__']

Jun 2 '06 #17
ni******@gmail.com a écrit :
Grant Edwards wrote:
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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 ?
Jun 2 '06 #18
On 2006-06-02, Bruno Desthuilliers <bd*****************@free.quelquepart.fr> wrote:
Grant Edwards a écrit :
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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
Jun 3 '06 #19
> 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

Jun 3 '06 #20
On 2006-06-03, Tim Chase <py*********@tim.thechases.com> wrote:
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


Sets aren't numbers. Perhaps I should have phrased it better:
xor is only defined for numbers if they are represented in
binary. If numbers were represented in something other than
binary, then an xor operation on those numbers wouldn't make
sense.

--
Grant Edwards grante Yow! .. I want to perform
at cranial activities with
visi.com Tuesday Weld!!
Jun 3 '06 #21
Grant Edwards a écrit :
On 2006-06-02, Bruno Desthuilliers <bd*****************@free.quelquepart.fr> wrote:
Grant Edwards a écrit :
On 2006-06-01, ni******@gmail.com <ni******@gmail.com> 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.


No, not really.
Otherwise the bitwise boolean operations you
demonstrated wouldn't work as shown.
Ho yes ?
>(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


.... objects, instance of the int class. Not really what I'd call "binary
format" !-)

Now if you go that way, it's of course true that everything on a
computer ends up in a binary format.... It's true.
stored in binary format -- xor is only
defined for binary numbers.

class Prisonner(object):
def __xor__(self, other):
return "I'm not a (binary) number, I'm a free man"

The fact that an object implements the xor operator is pretty much proof
that the guy that wrote the class decided to implement the xor operator !-)

Grant, I of course agree that, *for practical means*, one can consider
that Python's integer are "already in binary format" - for a definition
of "binary format" being "you can do bitwise ops on them". But the truth
is that Python integers are objects (in the OO meaning) holding integer
values - not integer values themselves.
Jun 4 '06 #22

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by David Lawson | last post: by
reply views Thread by Mark Dufour | last post: by
6 posts views Thread by Andrew | last post: by
17 posts views Thread by Mantorok Redgormor | last post: by
5 posts views Thread by sathyashrayan | last post: by
3 posts views Thread by shyha | last post: by
reply views Thread by mihailmihai484 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.