Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

upcasting

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?

like image 236
CEGRD Avatar asked Nov 17 '11 10:11

CEGRD


2 Answers

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

like image 142
Michael Borgwardt Avatar answered Sep 23 '22 03:09

Michael Borgwardt


It works like that because of widening primitive conversion that is performed on shift arguments. Namely there's no information loss, including the sign of the type being converted.

like image 42
soulcheck Avatar answered Sep 24 '22 03:09

soulcheck