2012-09-19 17 views
8

Vorrei sapere se la precedenza degli operatori nei linguaggi di programmazione dipende dall'implementazione o se esiste una regola fissa seguita da tutte le lingue. E se possibile, potresti ordinare prima i seguenti operatori con la precedenza più alta: AND, OR, NOT, XOR.Precisione degli operatori booleani

+0

riesco mai a ricordare la precedenza di XOR, ma tutte le lingue che ho usato hanno la stessa precedenza per la altri tre. – Neil

risposta

8

Ho cercato su Google e ho trovato this che dice che alcune lingue come APL e SmallTalk non hanno regole di precedenza degli operatori e valutano rigorosamente le espressioni da sinistra a destra/da sinistra a destra.

Tuttavia, l'ordine di precedenza relativo seguito NON è> XOR> E> o nella maggior parte delle lingue specialmente quelli derivati ​​da C

+1

Secondo [questo] (http://en.cppreference.com/w/c/language/operator_precedence), la precedenza di C è in realtà NOT> AND> XOR> OR, con AND che precede XOR. Anche JavaScript e Java seguono questo ordine. – mbomb007

2

booleano o bit a bit? Non esiste una regola fissa, la maggior parte delle lingue ha regole simili ma differiscono nei dettagli. Cerca nella definizione della lingua.

+0

OK. Ho avuto in mente gli operatori booleani durante la pubblicazione. Grazie per avermi ricordato gli operatori bit a bit. – Mika

0

Esistono tre operatori booleani di base: NOT, AND, OR. XOR è solo una versione semplice di A AND NOT B OR NOT A AND B o (A OR NOT B) AND (NOT A OR B). Quindi, solo questi tre hanno la precedenza comune: NOT> AND> OR. XOR ha una posizione diversa nelle lingue, ma sicuramente non ha una precedenza più alta di AND e non inferiore a OR. La maggior parte delle lingue (ad esempio C/C++/Javascript ecc.) Lo hanno tra AND e OR, ma in altre (ad esempio Perl) XOR ha la stessa precedenza di OR.

(o può essere espresso utilizzando solo AND e NOT, ma è ancora un operatore di base: A OR B = NOT(NOT A AND NOT B))

+0

C'è una buona ragione per avere precedenza diversa? Penso che (in un mondo ideale) gli operatori booleani dovrebbero avere lo stesso livello di precedenza e operazioni logiche da eseguire sempre da sinistra a destra. C'è una buona ragione per essere in un altro modo? 'true xor false o true' deve essere valutato come vero (' (vero xor falso) o vero'), non come falso ('vero xor (falso o vero)') – Junior

+0

Sì. La ragione è molto simile agli operatori aritmetici. Questa è una "algebra diversa" (algebra booleana). AND è una specie di moltiplicazione e OR è come aggiunta. Ci sono aree, dove è più importante dell'algebra standard (ad esempio costruzione di circuiti digitali). – FERcsI