2011-11-17 18 views
5

Ho cercato nel web ma non ho trovato alcuna soluzione a questo problema.Priorità agli operatori logici con NAND, NOR, XNOR

Qual è la priorità logica per gli operatori NAND, NOR e XNOR?

intendo, considerando come esempio l'espressione

A AND B NAND C 

quale operatore deve essere valutata prima?
Ovviamente NAND può essere tradotto come NOT-AND (come NOR è NOT-OR e XNOR è NOT-XOR), ma

(A AND B) NAND C != A AND (B NAND C) = A AND NOT(B AND C) 

Secondo mie ricerche non c'è una priorità definita per tale espressione, così che la soluzione più semplice è quella valutare gli operatori in base all'ordine in cui appaiono nell'espressione, ma potrei sbagliarmi.

Qualche suggerimento?

risposta

3

Questo in realtà dipende dalla vostra precedence rules. Se non c'è un ordine (nessuna regola di precedenza o tutto della stessa importanza), dovrebbe essere risolto da sinistra a destra. Here è un esempio con C++.

1

Se l'espressione è scritta come nel modo in cui è menzionata nella domanda (senza parentesi intermedie), dovrebbe essere risolta nell'ordine in cui sono scritte. Questo è l'unico modo corretto per farlo. es. Se la sua riga scritta è A NOR B XOR C, Significa semplicemente (A NOR B) XOR C

0

la precedenza degli operatori deve essere definita da un linguaggio, e quello che hai qui non sembra essere un linguaggio formale, in questi casi spesso si presume che venga valutato come tu leggi da sinistra a destra.

Anche se, si potrebbe utilizzare la stessa precedenza operatore verilog, o guardare wikipedia che ha un piccolo tavolo la precedenza comunemente usato per gli operatori logici

0

Suppongo che questo potrebbe essere un linguaggio specifico, TUTTI gli operatori devono avere un ordine di precedenza definito o implicito da una specifica impiantazione.

Here è ciò che un altro sito ha da dire al riguardo.

0

Gli operatori booleani hanno analoghi nell'aritmetica convenzionale, quindi un modo per decidere quali dovrebbero essere le regole di precedenza è seguire le regole dell'aritmetica convenzionale, ad es. AND è analogo alla moltiplicazione, mentre OR è analogo all'addizione, quindi AND dovrebbe avere una precedenza maggiore rispetto a OR. Se si guarda la tabella delle precedenze degli operatori per una lingua come C o C++, si vedrà che questo è il caso in questi e in altri linguaggi correlati.