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?
Because char
is unsigned - 0xFFFF
really has a value of 65535
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With