i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
The output generated by this program is shown here:
Original value of a: 64
i and b: 256 0
Sinceais promoted tointfor the purposes of evaluation, left-shifting the value 64
(0100 0000) twice results inicontaining the value 256 (1 0000 0000). However, the value
inbcontains 0 because after the shift, the low-order byte is now zero. Its only 1 bit has
been shifted out.
Since each left shift has the effect of doubling the original value, programmers frequently
use this fact as an efficient alternative to multiplying by 2. But you need to watch out. If you
shift a 1 bit into the high-order position (bit 31 or 63), the value will become negative. The
following program illustrates this point:
// Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);
}
}
}
The program generates the following output:
536870908
1073741816
2147483632
-32
The starting value was carefully chosen so that after being shifted left 4 bit positions, it
would produce –32. As you can see, when a 1 bit is shifted into bit 31, the number is interpreted
as negative.
The Right Shift
The right shift operator,>>, shifts all of the bits in a value to the right a specified number of
times. Its general form is shown here:
value >> num
66 Part I: The Java Language