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
- 1. Thymeleaf - operatori booleani
- 2. operatori booleani vs operatori bit a bit
- 3. Operatori booleani in un'istruzione switch?
- 4. Differenze negli operatori booleani: & vs && e | vs ||
- 5. comportamento di bool con operatori non booleani
- 6. C# operatori booleani - normale vs cortocircuito
- 7. 0 vs '0' con gli operatori booleani
- 8. overloading degli operatori ->
- 9. confronto l'overloading degli operatori
- 10. precedenza degli operatori
- 11. tensorflow l'overloading degli operatori
- 12. semantica degli operatori booleani e di confronto nel contesto di tre valori-logica
- 13. Esistono funzioni incorporate per gli operatori booleani elementari su elenchi booleani?
- 14. C# String overloading degli operatori
- 15. R, R6 overloading degli operatori
- 16. Priorità degli operatori:> e ==
- 17. precedenza degli operatori in C#
- 18. Complessità degli operatori di confronto
- 19. Haskell - Ridefinizione (occultamento) degli operatori aritmetici
- 20. liste di inizializzazione e RHS degli operatori
- 21. affettare e l'overloading degli operatori in C++
- 22. Comprendere la portata degli operatori in C++
- 23. C++ typedef e l'overloading degli operatori
- 24. Debugging e profilazione degli operatori Web
- 25. JQuery/Javascript e l'uso degli operatori &&
- 26. overloading degli operatori [] per un vettore sparse
- 27. Precedenza degli operatori logici in C
- 28. Patrimonio dei nomi degli operatori monad
- 29. Precedenza degli operatori di colata sovraccaricati
- 30. overloading degli operatori << - C++
riesco mai a ricordare la precedenza di XOR, ma tutte le lingue che ho usato hanno la stessa precedenza per la altri tre. – Neil