2011-11-17 18 views
5

He buscado en la web pero no he encontrado ninguna solución a este problema.Prioridad de operadores lógicos con NAND, NOR, XNOR

¿Cuál es la prioridad lógica para los operadores NAND, NOR y XNOR?

quiero decir, considerando como ejemplo la expresión

A AND B NAND C 

qué operador se debe evaluar en primer lugar?
Obviamente NAND se puede traducir como NOT-AND (como NOR es NOT-OR y XNOR es NOT-XOR), pero

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

Según mis investigaciones no hay una prioridad definida para tal expresión, por lo que creo que la solución más simple es evalúe a los operadores de acuerdo con el orden en que aparecen en la expresión, pero puedo estar equivocado.

¿Alguna sugerencia?

Respuesta

3

realidad, esto depende en su precedence rules. Si no hay orden (no hay reglas de precedencia o todo lo que tenga la misma importancia), se debe resolver de izquierda a derecha. Here es un ejemplo con C++.

1

Si la expresión se escribe como la forma en que se menciona en la pregunta (sin corchetes intermedios), se debe resolver en el orden en que se escriben. Esa es la única forma correcta de hacer esto. por ej. Si su línea escrita es A NOR B XOR C, simplemente significa (A NOR B) XOR C

0

la precedencia del operador debe estar definida por un idioma, y ​​lo que tiene aquí no parece ser un lenguaje formal, en tales casos se asume que es evaluado como usted leer de izquierda a derecha.

sin embargo, usted podría utilizar la misma prioridad de los operadores como verilog, o mirar a wikipedia que tiene una pequeña mesa de precedencia de uso común para los operadores lógicos

0

Supongo que esto podría ser específico del idioma, TODOS los operadores deben tener un orden de precedencia definido o implícito por una implementación específica.

Here es lo que otro sitio tiene que decir al respecto.

0

Los operadores booleanos tienen análogos en aritmética convencional, por lo que una forma de decidir cuáles deberían ser las reglas de precedencia es seguir las reglas para la aritmética convencional, p. AND es análogo a la multiplicación, mientras que OR es análogo a la suma, por lo tanto AND debe tener una precedencia mayor que OR. Si observa la tabla de precedencia del operador para un lenguaje como C o C++, verá que este es realmente el caso en estos y otros lenguajes relacionados.

Cuestiones relacionadas