Оператор модуля Java - почему результат неожиданный? - PullRequest
0 голосов
/ 05 февраля 2011

Я понимаю, что в модуле 17/12 = 5.

Почему 4+17 % 2-1 значение 4, а (4+17) % 2-1 значение 0?

Ответы [ 2 ]

6 голосов
/ 05 февраля 2011

Приоритет оператора. % оценивается первым, поэтому

4 + 17 % 2 - 1

эквивалентно

4 + (17 % 2) - 1

17%2 == 1, что дает 4+1-1, что равно 4

Когда вы ставите скобки там, вы меняете порядок оценки:

(4+17) % 2 - 1

эквивалентно

21 % 2 - 1

, который опять же из-за того, что % имеет более высокий приоритет, чем -, дает

1 - 1

что составляет 0

0 голосов
/ 05 февраля 2011

4+17 % 2-1 интерпретируется как 4+(17 % 2)-1 = 4 + 1 -1 = 4 (приоритет оператора% выше + и -)

(4+17) % 2-1 = 21 % 2 -1 =(21 % 2)-1 = 1-1 = 0

...