Precedenza regole sono davvero fastidioso da ricordare, così anche io preferisco usare le parentesi per disambiguare. Provo a seguire il consiglio di "scrivere prima il codice per le persone, il secondo per i computer". Ma, c'è un mnemonico interessante (che ho imparato dai libri di Bruce Eckel) da ricordare (alcune) le regole: "Ulcera Addicts davvero come CA sacco":
Ulcer - Unary (+, -, ++, --, !)
Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>)
Really - Relational (<, >, ==, <=, >=, !=)
Like - Logical (and bitwise) (&&, ||, &, |, ^)
C - Conditional (? :) <- this is the conditional ternary operator
A lot - Assignment (=, *=, +=, ...)
Non è sono spremuto perfetti, operatori bit per bit e dobbiamo sapere che gli operatori di moltiplicazione (*, /,%) hanno la precedenza su quelli aggiuntivi (+, -).
fonte
2010-07-19 15:27:33
+1 per soluzione a prova di errore in qualsiasi lingua – cjk
Una buona domanda di arrotondamento - sfortunatamente non conosco il risultato desiderato. Qualche idea sul perché l'implementatore userebbe la divisione in virgola mobile anziché la divisione intera, evitando il cast? – Ben
@ Ben; immagina che il conteggio sia 3. '1/3' (usando l'intero) è' 0'; '0 * 100' è' 0', che non è la risposta desiderata. '1/(float) 3' è' 0.33', etc, dando '33' dopo la moltiplicazione e il cast - presumo che sia un%? In realtà, avrei usato 'decimale'. –