Арифметические операторы в Java (вопрос для начинающих) - PullRequest
2 голосов
/ 17 марта 2011

Я знаю, что операторы массива имеют приоритет. Тогда бинарные артеметические операторы *, /,%. Тогда + и - которые у них низкий приоритет.

Но я запутался, какой из них решит java первым в этом примере. И если у нас 2 оператора имеют одинаковый приоритет, какой оператор будет использоваться первым в Java?

Спасибо.

int x = y = -2 + 5 * 7 - 7 / 2 % 5;

Если бы кто-то мог решить это для меня и объяснить мне по частям. Потому что это всегда смущает меня на экзаменах.

Ответы [ 5 ]

8 голосов
/ 17 марта 2011

Если операторы имеют одинаковый приоритет, то они оцениваются слева направо.

Из учебника :

Когда операторы одинакового приоритета появляются в одном и том же выражении, правило должно определять, которое вычисляется первым.Все бинарные операторы, кроме операторов присваивания, оцениваются слева направо;Операторы присваивания вычисляются справа налево.

В выражении 7 / 2 % 5, / и % имеют одинаковый приоритет, поэтому переходя слева направо 7 / 2 = 3 и 3 % 5 = 3.

Наивысший приоритет отдается * /%.Вот пример вашего примера:

  -2 + 5 * 7 - 7 / 2 % 5
= -2 + (5 * 7) - (7 / 2 % 5)
= -2 + 35 - (3 % 5)
= -2 + 35 - 3
= 30
3 голосов
/ 17 марта 2011

y будет присвоено значение -2 + 5 * 7 - 7 / 2 % 5.Тогда x будет присвоено значение y.

Арифметическое выражение будет оцениваться как:

-2 + (5 * 7) - ((7 / 2) % 5)

Вот объяснение приоритета оператора Java.

2 голосов
/ 17 марта 2011

Это похоже на то, что вам нужно прочитать: Учебник по Java-операторам .

Прочитайте учебник, а затем напишите себе пример программы и поэкспериментируйте с ней, пока не будете довольны оператором.старшинство.Это лучший способ учиться.

1 голос
/ 17 марта 2011
int x = y = -2 + 5 * 7 - 7 / 2 % 5;

совпадает с

int x = y = (-2 + ((5 * 7) - ((7 / 2) % 5)));

/, * и% (мультипликативный) имеют одинаковый приоритет, и их ассоциация слева направо.
+ и - (аддитивный) имеют одинаковый приоритетприоритет и их связь слева направо.
мультипликативные операции имеют более высокий приоритет по сравнению с аддитивными операциями.

0 голосов
/ 17 марта 2011

Не совсем связано, но вы можете найти это интересным. Это связано с точками последовательности, которые являются точками в программе и, по сути, являются точками, в которых компилятор обеспечивает синхронизацию всего. Он возник на SO из-за вопроса, что делает

x = x++; // Operator prcedence and/or sequence point problem;

делать? Или хуже

x[i]=i++ + 1;// sequence point problem

Почему это входит в бесконечный цикл?

http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...