Здесь
if ( p == 2 || p % 2 )
выглядит как
if( operand1 || operand2)
, где operand1
равно p == 2
, а operand2
равно P % 2
. Теперь логическая таблица истинности OR ||
равна
operand1 operand2 operand1 || operand2
0 0 0
0 1 1
1 0 1
1 1 1
Из приведенной выше таблицы ясно, что если первый операнд operand1
результат равен true , то результат всегда будет истинным & второй операнд operand2
не оценивается .
operand1
is ==>
p == 2
(предположим, p
is 2
)
2 == 2
дает значение true, поэтому operand2
не оценивается и if
блоки выглядят как
if(true) { }
Предположим, что p
равно 3
, тогда operand1
то есть 2 == 3
ложно, т.е. operand2
оценивается, т.е. 3%2
то есть 1
, что означает if
блоки выглядят как
if(true)
{
}
Предположим, что p
равно 4
, тогда operand1
то есть 2 == 4
ложно, т.е. operand2
оценивается, т.е. 4%2
то есть 0
, что означает if
блоки выглядят как
if(false)
{
}
Надеюсь, что приведенное выше объяснение имеет смысл для вас.
По поводу ассоциативности и приоритета, пожалуйста, загляните на справочную страницу оператора