Почему я могу комбинировать побитовый оператор с математическим оператором, таким как &+, в Java?

Сегодня я писал код и забыл, что пишу на Java вместо Swift, и случайно набрал &+. Удивительно, но я не получил никаких ошибок, а код скомпилировался и работал нормально.

Я немного поиграл и обнаружил, что &+, &-, |+, |-, ^+ и ^- все компилируются и работают без ошибок. Похоже, что все они действуют как первый побитовый оператор при работе с числами:

1 &+ 2 == 1 & 2
3 |+ 4 == 3 | 4
7 ^+ 9 == 7 ^ 9

С другой стороны, похоже, что любая другая комбинация побитового оператора и математического оператора, например +&, &/ и ^*, приводит к ошибкам времени компиляции.

Почему &+, &-, |+, |-, ^+ и ^- компилируются и работают без ошибок? Есть ли у них какая-то цель, которую я не вижу, или это просто какая-то странность компиляции?

Вы просто неправильно форматируете. 1 &+ 2 на самом деле 1 & +2. Вы можете поставить перед любым числом префикс + или -.

shmosel 30.05.2019 21:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

+ означает Unary Plus Operator +, что дает положительное число.

- означает, что Unary Minus Operator - дает отрицательное число.

  • 1 &+ 2 это 1 & +2
  • 3 |- 4 это 3 | -4
  • 7 ^+ 9 это 7 ^ +9

Обратите внимание, что операторы * и / нельзя использовать одинаково (1 &/ 2).

Чтобы правильно назвать его, знак + — это Унарный плюс оператор, а - — это Унарный минус оператор.

Andreas 30.05.2019 21:44

Просто также хочу отметить, ради интереса: не существует такой вещи, как отрицательный целочисленный литерал. Это унарный оператор минус и неотрицательный целочисленный литерал. Вы можете видеть это, потому что вы не можете написать -2147483648, хотя это якобы равно Integer.MIN_VALUE, потому что оно интерпретируется как -, а затем 2147483648, что слишком велико для литерала int.

Andy Turner 30.05.2019 21:58

Другие вопросы по теме