Bitwise expression

Hendrik van Rooyen mail at microcorp.co.za
Tue Jan 9 02:13:37 EST 2007


"Gigs_" <gigs at hi.t-com.hr> wrote:


> Can someone explain me bitwise expression?
> few examples for every expression will be nice
>
> x << y Left shift
> x >> y Right shift
> x & y Bitwise AND
> x | y Bitwise OR
> x ^ y Bitwise XOR (exclusive OR)
> ~x Bitwise negation

The short, and possibly weird, but true, answer is:

If you have to ask this question, you should avoid
using these things. - Think of them as "Advanced Magic"

But this is unhelpful, so a slightly longer answer is:

Computer memory is like a long string of flip-flops that can
take on one of two states - "on" or "True" represented normally by
a digit 1, and "off" or "False" - a digit 0.   Hence the term binary.

Binary means "two valued", just like a Bicycle has two wheels.

These flip-flops are the smallest element of memory, and one
of them is called a "bit".  The plural is "bits".  "plural" means
"more than one of".

Eight bits are called a Byte.
Half a Byte is a Nibble - four bits (sometimes spelt Nybble by
people who are trying to be cute).
There is a concept called a "Word" of memory which is ill defined.
Sometimes it is one or two Bytes, sometimes three nibbles, sometimes
four, eight or sixteen bytes - depends on the hardware's bus width.

No, I am not going to explain what a bus is.

You can think of a python number as a word of eight bytes long,
and a python string as a number of bytes of arbitrary length.

I am also not going to explain big and little endian representation.
Yahoo for it.

Now the logic operators, as applied to nibbles:

1110  <<  0111               - shifted left, filled with zero from right
                                        (multiply by two - seven to fourteen)
0010  >>  0100               - shifted right, filled with zero from left
                                        (divide by two - four to two)
0100  =    0101 & 1110   - true if both bits true, false otherwise
                                        (used for masking, clearing bits)
1101  =    0101  |  1100   - false if both bits false, true otherwise
                                        (True if either bit true - used to set
bits)
1001  =    0101  ^ 1100   - true if only one of the bits true, else false
                                        (anything xored with itself is all zero)
                                        (used to toggle bits, identity testing)
1001  ~    0110               - inversion "not"  - not true is false, not false
is true

Also yahoo for "Boolean algebra" and "De Morgan" and "IEEE floating point
representation"

hth - Hendrik





More information about the Python-list mailing list