Search code examples
javaupcasting

In Java, why does type casting of a character to an integer NOT extend the sign bit


In Java a bitwise operation causes type casting to integer and also causes sign extension. For instance the following is expected:

byte b = -1;
System.out.println(b >> 1);//-1

In Java chars are encoded in UTF-16 and each unit is represented with 2 bytes.

char c = 0xFFFF; //I assume now the sign bit is 1.
System.out.println(c >> 1);//32767 ???? WHY

I was expecting -1 instead of 32767. Why is the sign not extended during the type cast before the bitwise operation is applied? Any ideas?


Solution

  • Because char is unsigned - 0xFFFF really has a value of 65535