Shift and Instanceof Operators


Shift Operators (<<, >> and >>>)

The Java language provides three operator for performing bitwise shifting on 32 and 64 bit integer values. These are all binary operators with the first operand being the value to be shifted, and the second operand saying how far to shift.

  • The '<<' or left shift operator shifts the value given by the first operand leftwards by the number of bit positions given by the second operand. The empty positions at the right end are filled with zeros
  • The '>>' or arithmetic shift operator shifts the value given by the first operand rightwards by the number of bit positions given by the second operand. The empty positions at the left end are filled by copying the left-most bit. This process is known as sign extension.
  • The '>>>' or logical right shift operator shifts the value given by the first operand rightwards by the number of bit positions given by the second operand. The empty positions at the left end are filled with zeros.

Notes:

  • These operators require an int or long value as the first operand, and produce a value with the same type as the first operand. (You will need to use an explicit type cast when assigning the result of a shift to a byte, short or char variable.)
  • If you use a shift operator with a first operand that is a byte, char or short, it is promoted to an int and the operation produces an int.)
  • The second operand is reduced modulo the number of bits of the operation to give the amount of the shift. For more about the mod mathematical concept, see Modulus examples
  • The bits that are shifted off the left or right end by the operation are discarded. (Java does not provide a primitive "rotate" operator.)
  • The arithmetic shift operator is equivalent dividing a (two's complement) number by a power of 2.
  • The left shift operator is equivalent multiplying a (two's complement) number by a power of 2.

The following table will help you see the effects of the three shift operators. (The numbers have been expressed in binary notation to aid vizualization.)

Operand1 Operand2 << >> >>>
0b0000000000001011 0 0b0000000000001011 0b0000000000001011 0b0000000000001011
0b0000000000001011 1 0b0000000000010110 0b0000000000000101 0b0000000000000101
0b0000000000001011 2 0b0000000000101100 0b0000000000000010 0b0000000000000010
0b0000000000001011 28 0b1011000000000000 0b0000000000000000 0b0000000000000000
0b0000000000001011 31 0b1000000000000000 0b0000000000000000 0b0000000000000000
.... .... .... .... ....
0b1000000000001011 0 0b1000000000001011 0b1000000000001011 0b1000000000001011
0b1000000000001011 1 0b0000000000010110 0b1100000000000101 0b0100000000000101
0b1000000000001011 2 0b0000000000101100 0b1110000000000010 0b0010000000000010
0b1000000000001011 31 0b1000000000000000 0b1111111111111111 0b0000000000000001

There examples of the user of shift operators in Bit manipulation


Instanceof Operator

This operator checks whether the object is of a particular class/interface type. instanceof operator is written as:

( Object reference variable ) instanceof (class/interface type)

Example:

public class Test {
    public static void main(String args[]){
        String name = "Buyya";
        // following will return true since name is type of String
        boolean result = name instanceof String; 
        System.out.println( result );
    }
}

This would produce the following result:

true

This operator will still return true if the object being compared is the assignment compatible with the type on the right.

Example:

class Vehicle {}
 
public class Car extends Vehicle {
    public static void main(String args[]){
        Vehicle a = new Car();
        boolean result = a instanceof Car;
        System.out.println( result );
    }
}

This would produce the following result:

true

Basic Programs