В Java почему приведение типа символа к целому числу НЕ расширяет бит знака - PullRequest
8 голосов
/ 17 ноября 2011

В Java побитовая операция приводит к приведению типа к целому, а также к расширению знака.Например, ожидается следующее:

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

В Java символы кодируются в UTF-16, и каждый блок представлен 2 байтами.

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

Я ожидал -1 вместо 32767. Почему знак не расширяется во время приведения типа до применения побитовой операции?Есть идеи?

Ответы [ 2 ]

12 голосов
/ 17 ноября 2011

Поскольку char без знака - 0xFFFF действительно имеет значение 65535

3 голосов
/ 17 ноября 2011

Это работает так из-за расширяющегося примитивного преобразования , которое выполняется на аргументах сдвига. А именно, нет потери информации, включая знак конвертируемого типа.

...