Saltar al contenido

La precedencia cambia entre lenguajes: not a == b en Python

not a == b es not (a == b) en Python, porque la comparación liga con más fuerza que not. En C, a & b == c es a & (b == c). Los mismos caracteres se agrupan de forma distinta de un lenguaje a otro, y el analizador de aquí rechaza la grafía de Python en lugar de elegir una lectura.

El diagnóstico registrado abajo es para not A == B: el analizador se detiene en ==, que no es un operador en este lenguaje, y ofrece <->. Si hubiera aceptado la línea, habría tenido que decidir si not se aplica a A o a toda la comparación, y las dos lecturas son funciones distintas. La respuesta de Python es toda la comparación; la de un libro de lógica es A sola, porque NOT liga con más fuerza; ninguna de las dos es incorrecta en su propio lenguaje.

El orden del motor es NOT, luego AND, luego XOR, luego OR, luego ->, luego <->, y dentro de este lenguaje nunca varía. La variación está en las fronteras: Python coloca not por debajo de las comparaciones; C y Java colocan == por encima de &, así que una prueba bit a bit necesita paréntesis; SQL ordena NOT, AND, OR como aquí pero sitúa IS NULL y BETWEEN entre las comparaciones; las funciones de hoja de cálculo no tienen precedencia alguna, porque el anidamiento es la agrupación.

Traduce poniendo entre paréntesis cada grupo mixto antes de cruzar una frontera entre lenguajes, y contrasta la traducción con la tabla de verdad del motor y no con la salida del otro lenguaje. Las páginas de lenguajes enumeran el orden de cada uno, y la forma totalmente entre paréntesis de cada página muestra lo que el motor leyó.

Lo que dice el analizador

EscribisteCódigoPor qué se rechazaCorrección ofrecida
not A == Bunsupported-operator`==` is not an expression operator. Use `<->` when both sides must have the same value, or the Compare workbench to compare two formulas.Replace with <->

El error habitual

Traducir not a == b de Python como NOT A <-> B, que aquí es (NOT A) <-> B, lo contrario de lo que calcula Python. La traducción fiel es NOT (A <-> B), que es A XOR B.

Preguntas

¿El motor acepta not en minúsculas?

Sí: las palabras de operador no distinguen mayúsculas, así que not a and b se analiza, como (NOT a) AND b. La precedencia es la del motor, no la de Python.

¿Qué lenguaje tiene el mismo orden que el motor?

Para NOT, AND y OR: C, Java, JavaScript, SQL y Python los ordenan todos así. Las diferencias están en cómo encajan entre ellos las comparaciones, los operadores bit a bit y XOR.

Relacionado

Herramientas

Véase también

Errores comunes

Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.