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