Здесь много хороших ответов, но в случае, если это поможет:
Думайте о y-- и --y как о выражениях с побочными эффектами или о выражении, за которым следует выражение. у - так (подумайте об этих примерах как о псевдосборке):
decrement y
return y
и --y делает это:
store y into t
decrement y
load t
return t
В вашем примере цикла вы в любом случае отбрасываете возвращаемое значение и полагаетесь только на побочный эффект (проверка цикла происходит ПОСЛЕ выполнения инструкции декремента; она не получает / не проверяет значение, возвращаемое декрементом) .