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
risposta
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
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
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.
OK. Ho avuto in mente gli operatori booleani durante la pubblicazione. Grazie per avermi ricordato gli operatori bit a bit. – Mika
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)
)
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
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
riesco mai a ricordare la precedenza di XOR, ma tutte le lingue che ho usato hanno la stessa precedenza per la altri tre. – Neil