The Left Shift

By: aathishankaran Viewed: 153135 times  Printer Friendly Format    


The left shift

             The left shift operator, <<, shifts all of the bits in a value to the left a specified number of times. It has this general form:

             Value << num

             Here, num specifies the number of positions to left-shift the value in value. That is, the << moves all of the bits in the specified value to the left by the number of bit positions specified by num. For each shift left, the high-order bit is shifted out (and lost), and a zero is brought in on the right. This means that when a left shift is applied to an in operand, bits are lost once they are shifted past bit position 31. if the operand is a long, then bits are lost after bit position 63.

             Java’s automatic type promotions produce unexpected results when you are shifting byte and short values.

 //Left shifting a byte value.

class ByteShift {

     public static void main (String args[]) {

          byte a = 64, b;

          int d;

 

          d = a << 2;

          b = (byte) (a<<2);

 

          System.out.println(“Original value of a: ” + a);

          System.out.println(“ d and b: “ + d + “ “ +b);

     }

}

 

The output generated by this program is shown here:

 

     Original value of a: 64

     d and b : 256 0

 

            Since a is promoted to int for the purposes of evaluation, left-shifting the value 64 (0100 0000) twice results in d containing the value 256 (1 0000 0000). However, the value in b contains 0 because after the shift, the low-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 count;

                        int num = 0Xffffffe;

 

          for (count =0; count<4 ; count++) {

               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.

 



Most Viewed Articles (in Java )

Latest Articles (in Java)

Comment on this tutorial