# question about binary and serial info

mensanator at aol.com mensanator at aol.com
Thu Aug 18 08:01:18 CEST 2005

```nephish at xit.net wrote:
> yeah, i think i got that down, i need help with getting the hex to
> binary, then splitting the byte up to compare each bit against the bit
> in another byte.

The & operator does all 8 comparisons simultaneously. So if
the serial port byte is A, the reference byte is B then

AB = A & B

has only 1 bits where both A and B had 1's in their respective
positions. Now, you can test AB for a particular bit position
(say bit 3) by

testbit3 = AB & 2**3

If testbit3 > 0 then the bit was a 1.

> unless i am not understanding this stuff with the bitwise right. there
> wasn't a lot in the python library reference about it.

The GMPY module has some interesting bit functions.

Popcount can tell you how many of the AB bits are 1 without
specifying which ones:

>>> for i in range(16):
print gmpy.popcount(i),

0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4

Hamming distance tells you how many bits differ between
two numbers (again, without telling you which ones)

>>> for i in range(16):
print gmpy.hamdist(i,7),

3 2 2 1 2 1 1 0 4 3 3 2 3 2 2 1

If one operand is 0, then Hamming distance is the same
as popcount.

And then there's scan1 which will tell you the bit
bit position of the first 1 bit.

>>> A = 48
>>> B = 255
>>> AB = A & B
>>> print gmpy.scan1(AB)
4

So the first 1 bit is bit 4, which means bits 0, 1, 2 and 3
are all 0.

> thanks

```