Hola y bienvenido. Ahora que hemos hablado de
todos los operadores principales, los fundamentales, los raros, tenemos que
hablar de este pequeño concepto de precedencia de operadores.
Entonces esto entra en juego básicamente cuando se evalúa el orden de estos operadores.
Por tanto, la precedencia de los operadores determina la agrupación de los términos y la
expresión y decide cómo se evalúa una expresión.
Ahora realmente no necesitas entender nada de esto
si usas paréntesis a los que llegaremos en un segundo, pero tienes que entender
este concepto porque es parte del lenguaje, es parte de entender el lenguaje.
Entonces, la precedencia va a dictar el orden de evaluación cuando
dos operadores comparten un operando.
Y esto quedará claro con un ejemplo.
Entonces, por ejemplo, el operador de multiplicación tiene mayor precedencia que
el operador adicional.
Ciertos operadores van a tener un orden de evaluación diferente. Entonces, si tuviera que hacer una declaración
compuesta en la
que está realizando muchos cálculos diferentes, por ejemplo, 7 más 3 por 2.
Esto puede tener múltiples
resultados, la suma y estás haciendo la multiplicación.
Debes entender si necesito hacer la suma primero o debo hacer la multiplicación primero porque dependiendo
de lo que hagas primero cambia el resultado.
Entonces, por ejemplo, esta x es igual a 7 más 3
por 2, el resultado puede ser 13 o 20 dependiendo
del orden en que evalúe cada operando.
Por tanto, el orden de ejecución de las distintas operaciones puede marcar una gran diferencia.
Y es por eso que necesita comprender la precedencia.
C proporciona reglas específicas para elegir qué hacer primero.
En este caso, hago la multiplicación de más. Bueno, c te va a decir lo que va a pasar.
Idealmente, si los pone entre paréntesis, le estaría diciendo qué hacer,
estaría tomando esa decisión. Pero si no lo pone entre paréntesis,
el lenguaje de programación tomará la decisión por usted.
Entonces, en c, la multiplicación tendrá mayor precedencia que
el operador de suma. Entonces, lo que va a pasar es que el resultado será 13.
Ahora puedes decir 7 más 3, que es 10 y
luego multiplicar por 2, el resultado sería 20.
O puede hacer 7 más 3 por 2, que es 7 más 6 que es 13.
Así es como puedes tener diferentes valores.
Eso es ambiguo. ¿Hace el signo más primero o hace la multiplicación primero?
Afortunadamente, nuevamente, eso lo decide el idioma. Pero puedes ver cómo hay dos resultados diferentes.
7 más 3 por 2
o 7 más 3 por 2. Ves la pausa allí.
Ahora c va a hacer lo último. Primero hará la multiplicación porque
tiene mayor precedencia.
Entonces va a hacer 3 veces 2, que es 6 y luego se sumará a 7.
Entonces, el resultado x será 13 porque la estrella asterisco
tiene mayor precedencia que la suma.
Por lo tanto, existen reglas para cada operador, cuyo
operador tiene prioridad sobre el otro.
Hay un nivel de precedencia.
Y la multiplicación y la división tienen mayor precedencia que la suma y la resta.
Así que se realizan primero, por ejemplo.
Puede evitar toda esta precedencia y dejar que el idioma
decida por usted si proporciona paréntesis.
Los paréntesis siempre agruparán las expresiones
con la mayor prioridad. Entonces, si digo 7 más 3 y lo encerro entre
paréntesis, siempre se hará la suma primero.
Si digo 3
por 2 y lo encierro entre paréntesis,
siempre se hará la multiplicación y luego se sumará lo que esté fuera del paréntesis.
Así que realmente deberías usar paréntesis. Utilice siempre paréntesis.
De lo contrario, el idioma lo decidirá por ti. Tienes que memorizar todos los niveles de
precedencia, lo cual es difícil de hacer, como te mostraré en la siguiente tabla.
Hay muchos operadores diferentes y debe conocer la precedencia
de todos estos operadores diferentes.
Por lo que puede volverse muy, muy confuso.
Esto es similar a lo que sabe, o deja que el lenguaje haga una conversión implícita por usted
o lo hace con una conversión explícita con un operador de conversión, el mismo
tipo de idea aquí, solo use paréntesis.
Entonces, si miramos esta tabla, que veremos en un segundo, supongo, porque primero
quiero hablar sobre asociatividad.
La asociatividad está relacionada con la precedencia porque ¿qué sucede
si dos operadores tienen la misma precedencia? Entonces, ¿cómo averiguas el orden?
Bueno, entonces aplica la asociatividad. Entonces, siempre que los
operadores tengan el mismo nivel de precedencia, aplica reglas adicionales.
Entonces, la asociatividad es básicamente si comienzas o no
en el lado izquierdo y vas hacia la derecha o hacia la izquierda.
Entonces, si comparte un operando y ambos se ejecutan en el
mismo orden, los ejecutará en el orden de la declaración
según la regla de asociatividad. Entonces, para la mayoría de los
operadores, el orden es de izquierda a derecha. Déjame mostrarte un ejemplo.
Si dice que 1 es igual a 2 no es igual a 3,
los operadores de igual a igual y no igual a signo de
exclamación igual tienen la misma precedencia.
Entonces, en este caso, tenemos una ambigüedad. Tenemos un problema.
No sabemos qué evaluar primero. No sabemos si necesitamos hacer 1 igual a
2 o 2 no
es igual a 3 y es importante porque estás haciendo una expresión booleana.
Esta es una expresión booleana aquí, por lo que los chicos vuelven a verdadero o falso.
Entonces, lo que haría aquí es aplicar la asociatividad.
La asociatividad tanto de iguales como de no iguales es de izquierda a derecha.
Primero vas a hacer 1 igual a 2, eso será falso.
Y luego dirás falso, que no es
igual a 3,
que no lo es. Entonces 1 es igual a
2 y luego eso no es igual a 3.
Entonces el resultado será falso. Entonces, la expresión de la izquierda se ejecuta
primero y se mueve hacia la derecha.
Entonces, cómo quieres pensar en eso es básicamente igual a estos paréntesis.
Primero, evaluará que uno es igual a 2.
Y luego, si eso se evalúa como verdadero o falso, entonces dirás que es igual a 3.
Y esto es confuso porque no
tiene valores verdaderos o falsos.
Pero 1 es igual a igual recuerda que ese es el operador de comparación, no es el operador de asignación.
Y no estamos usando variables aquí, por lo que es aún más confuso.
Pero si pusiera estos números en
variables, simplemente estaría diciendo, si x es igual a y, entonces si
x fuera 1 e y fuera 2, eso evaluaría 2 falso.
Porque ambos no son iguales. Y luego, si 3 era otra
variable z que es igual a
3, dirás si x es igual a y es falso, z
es igual a 3. Entonces falso
no es igual a 3. Entonces sería falso.
Entonces, 1 es igual a 2 se ejecuta primero, el resultado nuevamente es 0 falso.
Entonces 0 no es igual a 3, se ejecuta dando como resultado el 1 verdadero.
Entonces dije falso inicialmente, pero obviamente 0 no es igual a 3, lo
que todo se evaluaría como falso.
Todo se evaluaría como verdadero, lo siento porque 0 no es igual a 3.
Entonces 0 no es igual a 3 Estaba diciendo que es falso porque no son iguales, pero
eso significa que en realidad se evalúa como verdadero.
Muy bien ahí. Ahora, aquí está nuestra tabla que dice
todas las reglas de precedencia y asociatividad y es muy difícil de memorizar esto.
Entonces, de nuevo, ¿qué haces? Usa paréntesis.
Pero aquí está la mesa. El nivel de precedencia más alto está en la
parte superior, por lo que los operadores de sufijo tienen el nivel de preferencia más alto.
Y si está usando cualquiera de esos en la misma expresión, entonces lee
de izquierda a derecha.
Entonces, los operadores de sufijo, cosas como los
paréntesis, son la prioridad más alta.
Entonces, cada vez que incluya algo entre paréntesis, eso entrará en vigencia.
Pero tienes los corchetes y luego tienes
los operadores de sufijo. No hemos hablado de
un par de cosas de puntero, que es este guión mayor que,
pero ahora sabemos acerca de más más y
menos menos, que son postfijos
que tienen la mayor precedencia más alta. Operadores unarios cosas como el más menos, el
signo de exclamación para no, la tilde para el bit, el más más el
menos menos y luego el operador de conversión se conoce como un operador unario porque solo tiene un operando.
Y luego el operador de asterisco es el operador de puntero. El ampersand es el bit a bit y
el tamaño de.
Aquellos tienen la siguiente precedencia más alta.
Pero aquí en realidad está leyendo de derecha a
izquierda para evaluar si tiene dos en la misma línea declaración de estado.
Y luego, de nuevo, solo vamos en pedidos. Tienes que conocer este orden y memorizarlo. Muy difícil de hacer, pero
quería mostrárselo, solo quería tener una pequeña
ilustración para mostrar algunas de las tablas. Hay muchos operadores.
Y entonces hay muchos niveles de presedencia, y existe la asociatividad en su mayor parte, como
dijimos anteriormente, de izquierda a derecha.
Solo tiene la asociatividad de derecha a izquierda para los operadores unarios.
Entonces, los operadores bit a bit siguen hacia la parte inferior,
todos de izquierda a derecha. Operadores ternarios condicionales de derecha a izquierda.
Los operadores de asignación siempre están en la parte inferior. Eso siempre se evalúa en último lugar.
Y luego, si son iguales, los otros que están ahí los evalúas de derecha a izquierda.
Y luego la coma también se conoce como operador. Eso es de izquierda a derecha.
Otro concepto a través de la precedencia y
la asociatividad que no vamos a abordar
realmente con estos otros ejemplos. Terminaremos usando los paréntesis todo el
tiempo, y eso es lo que quieres hacer.
Pero de nuevo, si quieres entender completamente el idioma, quieres entender estos conceptos, por eso te lo cuento.
En realidad, nadie puede afirmar que conoce el idioma si no conoce algunos de los detalles como este.
Pero use paréntesis tanto como pueda. Gracias.