■ Here are the widening or promotion rules for operands:
(1) If either operand is a double, the other is made a double, otherwise
(2) If either operand is a float, the other is made a float, otherwise
(3) If either operand is a long, the other is made a long, otherwise
(4) Both are just made int.
■ Because of automatic widening promotion to 32-bit int and even long:
(1) You must always explicitly cast any results shorter than int.
short sh = (short) (shortvariable1 & shortvariable2);
(2) You must use complete enclosing parens to avoid compiler loss-of-precision errors.
char c3 = (char) (c1 & c2); This works.
char c3 = (char) c1 & c2; This will not compile.