Sorry I couldn't think of a better example for the & operator. Basically, it is used to extract individual bits from a numeric type.
As for the shift operators, in other programming languages one use for them is fast multiplication and division by powers of 2. I am not sure if that particular optimization is necessary in Java, because I am not that familiar with Java.
[This message has been edited by David Eason (edited November 06, 2001).]