integer to binary...
Claudio Grondi
claudio.grondi at freenet.de
Fri Jun 2 16:08:25 CEST 2006
mensanator at aol.com wrote:
> nicolasg at 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/python-list/2006-January/319295.html
(includes full source code of all compared approaches)
Claudio
More information about the Python-list
mailing list