2017-02-02 18 views
0

Когда я XOR байта позволяет сказать -1 (в байте) с 2 (int), я получаю -3 в результате, тогда как я хочу, чтобы операция дала мне положительный int. Это связано с представлением комплемента 2 и продвижением по типу. Я хочу знать, есть ли способ использовать беззнаковый байт в java.Есть ли какое-либо условие беззнакового байта в Java?

int x = 2; 
byte y = -1; 
System.out.println(x^y); 

Выход

-3 

Я нашел две отличные подобные вопросы here и here. Но я хочу, чтобы какой-либо метод или побитовая операция возвращал int, который впоследствии может быть преобразован в байты без представления представления 2.

+0

Расширение знака 'y' само по себе не имеет значения, низкие 8 бит результата все еще то, что вы хотите, поэтому, если вы собираетесь конвертировать обратно в байты, в любом случае это будет правильно. – harold

ответ

0

Все типы, за исключением charboolean), подписаны.

Чтобы получить без знака -эквивалентного значения, вы можете использовать более широкий тип и использовать маску:

public static int unsigned(byte value) { 
    return value & 0xff; 
} 

public static int unsigned(short value) { 
    return value & 0xffff; 
} 

public static long unsigned(int value) { 
    return value & 0xffffffffl; 
} 

Так как Java 8, стандарт API предоставляет методы, которые (например, Byte.toUnsignedInt(…)).

0

Единственный неподписанный тип в Java - это char, который представляет собой 16-разрядное целое число без знака.

Вы можете использовать это.

Откажитесь от более значительных байтов, используя & 0xff, если вам нужно.