2012-09-19 49 views
8

Me gustaría saber si la precedencia del operador en los lenguajes de programación depende de la implementación o si hay una regla fija que todos los idiomas sigan. Y si es posible, podría ordenar primero los siguientes operadores con mayor prioridad: AND, OR, NOT, XOR.Operadores booleanos precedencia

+0

nunca puedo recordar la precedencia de XOR, pero todos los idiomas que he usado tiene la misma prioridad para la otros tres. – Neil

Respuesta

8

Busqué en Google y descubrí this que dice que algunos lenguajes como APL y SmallTalk no tienen reglas de precedencia del operador y evalúan estrictamente las expresiones de izquierda a derecha/izquierda a derecha.

Sin embargo, el orden relativo de precedencia seguido es NO> XOR> Y> o en la mayoría de los idiomas especialmente los derivados de C

+1

De acuerdo con [este] (http://en.cppreference.com/w/c/language/operator_precedence), la precedencia de C no es> Y> XOR> O, con AND antes de XOR. JavaScript y Java también siguen este orden. – mbomb007

2

Boolean o bit a bit? No hay una regla fija, la mayoría de los idiomas tienen reglas similares pero difieren en los detalles. Búscalo en la definición de idioma.

+0

De acuerdo. Tenía operadores booleanos en mente al publicar. Gracias por recordarme de los operadores bit a bit. – Mika

0

Hay tres operadores booleanos básicos: NOT, AND, OR. XOR es simplemente una versión simple de A AND NOT B OR NOT A AND B o (A OR NOT B) AND (NOT A OR B). Entonces, solo estos tres tienen precedencia común: NOT> AND> OR. XOR tiene una posición diferente en los idiomas, pero seguramente no tiene una precedencia mayor que AND y no menor que OR. La mayoría de los idiomas (por ejemplo, C/C++/Javascript, etc.) lo tienen entre AND y OR, pero en otros (por ejemplo, Perl) XOR tiene la misma precedencia que OR.

(O puede expresarse utilizando sólo AND y NOT, pero sigue siendo un operador básica: A OR B = NOT(NOT A AND NOT B))

+0

¿Hay alguna buena razón para tener una precedencia diferente? Creo que (en un mundo ideal) los operadores booleanos deberían tener el mismo nivel de precedencia y operaciones lógicas que siempre se realizarían de izquierda a derecha. ¿Hay una buena razón para estar de otra manera? 'true xor false o true' se debe evaluar como verdadero (' (true xor false) o true'), no como false ('true xor (false o true)') – Junior

+0

Sí. La razón es muy similar a los operadores aritméticos. Este es un "álgebra diferente" (álgebra booleana). Y es un tipo de multiplicación, y O es como una suma. Hay áreas donde es más importante que el álgebra estándar (por ejemplo, construcción de circuitos digitales). – FERcsI

Cuestiones relacionadas