Побитовые операции на коротких - PullRequest
8 голосов
/ 10 августа 2011

Я использую технологию под названием DDS и в IDL она не поддерживает int.Итак, я решил использовать short.Мне не нужно так много битов.Тем не менее, когда я делаю это:

short bit = 0;
System.out.println(bit);
bit = bit | 0x00000001;
System.out.println(bit);
bit = bit & ~0x00000001;
bit = bit | 0x00000002;
System.out.println(bit);

Он говорит: «Несоответствие типов: невозможно преобразовать из int в short».Когда я изменяю short на long, он работает нормально.

Можно ли выполнять битовые операции, подобные этой, на short в Java?

Ответы [ 2 ]

10 голосов
/ 10 августа 2011

При выполнении любых арифметических действий для byte, short или char числа увеличиваются до более широкого типа int. Чтобы решить вашу проблему, явно приведите результат обратно к short:

bit = (short)(bit | 0x00000001);

Ссылки:

2 голосов
/ 10 августа 2011

Насколько я понимаю, Java не поддерживает короткие литеральные значения. Но это сработало для меня:

short bit = 0;
short one = 1;
short two = 2;
short other = (short)~one;
System.out.println(bit);
bit |= one;
System.out.println(bit);
bit &= other;
bit |= two;
System.out.println(bit);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...