2014-12-04 2 views
2

См. Название. 1==(int)0.5*2 оценивает значение false, но 1==((int)0.5*2) оценивает true. Однако (1==(int)0.5)*2 дает ошибку, поэтому первое выражение не анализируется как это. Как-то дополнительные скобки в 1==((int)0.5*2) меняют приоритет приведения и умножения.1 == (int) 0.5 * 2 => false, 1 == ((int) 0.5 * 2) => true, почему?

Что именно вызывает это? И это должно произойти или это ошибка синтаксического анализа?

ответ

1

Это как выражение должно выглядеть следующим образом:

1 == 0.5*2 as int //--> true 
1 == (int)(0.5*2) //--> true 

это один:

1==(int)0.5*2 

дает false как (int)0.5 == 0

и это одна: (1==(int)0.5)*2 не имеет смысла все, поскольку вы пытаетесь умножить false (см. предыдущий пример) на 2, что НЕ допускается

+0

Я понимаю, как выражения оцениваются, поэтому мой вопрос заключается в том, почему дополнительный набор круглых скобок в '1 == ((int) 0.5 * 2) вызывает разницу в оценке. – JanKanis

Смежные вопросы