Az operátorok precedenciája azt határozza meg, hogy milyen "szorosan" köt össze két kifejezést. Például az 1 + 5 * 3 kifejezésben, a kifejezés értéke 16, és nem 18, mert a szorzás operátorának, a ("*")-nak nagyobb precedenciája van, mint az összeadásénak ("+").
[Az asszociativitás talán megér egy kis magyarázatot. Ez azt határozza meg, hogy az adott szinten levő operátorok egymás utáni zárójel nélküli használatát hogyan értelmezi a fordító. Talán egy példával kicsit érthetőbbé tehető: pl. 1-2+3 értelmezhető (1-2)+3-nak, eredménye 2, vagy 1-(2+3)-nak, eredménye -4. Az előbbi kiértékelés, (mely balról jobbra asszociatív) a helyes ebben az esetben. A második kiértékelés pedig jobbról balra asszociatív (ilyen például a hatványozás, ami nincs a nyelvben implementálva. Viszont van egy pow nevű függvény. Szóval 2**3**2 (ahol ** lenne a hatványozás) helyesen 2 a kilencediken = 512 lenne.) Vannak nem köthető operátorok is, ilyenek az összehasonlító operátorok. Tehát nem írható, hogy 2<$x<4.]
Az alábbi táblázat az operátorokat precedenciájuk szerint növekvő sorrendben tartalmazza.
Táblázat 10-6. Operátorok precedenciája
asszociativitás | operátorok |
---|---|
balról jobbra | , |
balról jobbra | or |
balról jobbra | xor |
balról jobbra | and |
jobbról balra | |
balról jobbra | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
balról jobbra | ? : |
balról jobbra | || |
balról jobbra | && |
balról jobbra | | |
balról jobbra | ^ |
balról jobbra | & |
nem köthető | == != === |
nem köthető | < <= > >= |
balról jobbra | << >> |
balról jobbra | + - . |
balról jobbra | * / % |
jobbról balra | ! ~ ++ -- (int) (double) (string) (array) (object) @ |
jobbról balra | [] |
nem köthető | new |