Java: операторы и типизация

1
long value = 0x88888888 ;
int i = (int) (value & 0xff);

Как выполняется вышеуказанная оценка выражения? Это

int i = (int)value & (int)0xff ;

или выполняется сначала побитовая операция и операция? Я запутался: - |

  • 2
    Все, что находится внутри () , оценивается до того, как что-то снаружи будет применено. Стандартное правило заключается в том, что более короткий операнд расширяется, чтобы соответствовать более длинному.
  • 1
    Но имеет ли это значение? В любом случае i = 0x88
Показать ещё 5 комментариев
Теги:
operators
bit-manipulation
bitwise-operators

3 ответа

3
Лучший ответ

Сначала побитовая операция оценивается как операция по длинным (ее скобка гарантирует). Затем результат преобразуется в int.

  • 1
    Спасибо! Запутался!
  • 0
    И спасибо за самый быстрый ответ! :)
Показать ещё 1 комментарий
5

Давайте посмотрим на байт-код:

 public static void main(java.lang.String[]);
    Code:
    0: ldc2_w        #35                 // long -2004318072l
    3: lstore_1
    4: lload_1
    5: ldc2_w        #37                 // long 255l
    8: land
    9: l2i
   10: istore_3
   11: return
}

так как вы можете видеть, что шестнадцатеричный 0xff сначала преобразован в long, а затем использует bitwise and значение, маскируя его с помощью 0xff после того, как он преобразуется в int

  • lload_1 загружает длинное значение из локальной переменной 1

  • ldc2_w нажимает константу #index из постоянного пула (двойного или длинного) в стек

  • land побитовая и двух длин
  • l2i преобразует long в int
0

Сначала (value & 0xff); будут решены. т.е. value(bitwise and)0xff. то результирующий будет преобразован в значение int, используя тип casting int я = (int) (value & 0xff);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню