Потому что это интерпретируется как 3 + (2 % 5)
. Когда вы делите 2
на 5
, остаток равен 2
, и добавление этого к 3
дает вам 5
.
Причина интерпретируется таким образом в разделе 6.5.5
стандарта ISO C99 :
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression / cast-expression
multiplicative-expression % cast-expression
Другими словами, %
обрабатывается так же, как *
и /
, и поэтому имеет более высокий приоритет оператора, чем +
и -
.