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.