Bitwise operations are one of the groovier features of C, C++, Java, and probably a dozen other languages.

Everything in a computer is just a long, long list of zeroes and ones. Ordinarily, you can only alter the bits one byte (eight bits) at a time (or two bytes at a time, or four, or nowadays eight). Bitwise operations let you mess with the individual bits themselves. It's fun, and it goes like this: You beat two integers against each other, and...

**Bitwise OR: "|"** If a given bit is "on" in **either** operand, or in **both** operands, the corresponding bit in the result will be "on":

5 | 9 == 13
0101 == 5
| 1001 == 9
------
1101 == 13

**Bitwise AND: "&"** If and only if a given bit is "on" in **both** operands, the corresponding bit in the result will be "on":

5 & 9 == 1
0101 == 5
& 1001 == 9
------
0001 == 1

**Bitwise exclusive OR (XOR): "^"** If a given bit is "on" in **one** operand **and not** the other, the corresponding bit in the result will be "on":

5 ^ 9 == 12
0101 == 5
^ 1001 == 9
------
1100 == 12

**Bitwise complement: "~"** This is an unary operator, which is to say that it takes only one operand. If a given bit in that one lonesome operand is "on", the corresponding bit in the result will be "off", and vice-versa (see also Obo):

~9 == 6
~ 1001 == 9
------
0110 == 6

This is probably not as clear as it could be, but if you're trying to learn C from E2, umm, I got news for ya...

*We thank Jamer for spotting a gruesome error in the XOR example. *