¿Qué es la precedencia y la asociatividad del operador C?

¿Qué es la precedencia y la asociatividad del operador C?
Los operadores se usan comúnmente para realizar varias operaciones aritméticas y lógicas en C. El lenguaje de programación C sigue un orden específico conocido como Precedencia del operador y asociatividad para determinar el orden de operaciones durante la ejecución. Las reglas de Precedencia del operador y asociatividad Ayuda en la escritura del código sin errores y aumenta la legibilidad del código.

Este artículo proporciona un tutorial integral para ayudarlo a aprender sobre asociatividad y precedencia del operador en C.

Precedencia del operador en C

Precedencia del operador describe la secuencia en la que se evalúan varios operadores al evaluar las expresiones. Por ejemplo, si una expresión tiene operadores de adición y multiplicación, cuál debe evaluarse primero? La respuesta es simple, C sigue ciertas reglas para resolver tal ambigüedad, comúnmente conocida como Precedencia del operador. Cª, Precedencia del operador se clasifica en 17 niveles, que van desde operadores unarios hasta el operador condicional ternario. La mayoría de los operadores usados, como operadores aritméticos, operadores relacionales, operadores lógicos y operadores bit a bit, siguen el estándar C Precedencia del operador protocolo.

Precedencia Las reglas dictan qué operadores tienen mayor prioridad que otras al evaluar las expresiones. Varios tipos de operadores en el lenguaje de programación C tienen diversos grados de precedencia. Por ejemplo, los operadores unarios tienen una prioridad mayor que los operadores binarios. La siguiente es una lista de operadores ordenados en orden ascendente de precedencia:

Operador Significado del operador Asociatividad
()
[]
->
.
Llamada funcional

Referencia del elemento de matriz

Selección de miembros indirectos

Selección directa de miembros

De izquierda a derecha
!
~
+
-
++
-
Y
*
tamaño de
(tipo)
Negación lógica

Complemento de bitwise (1)

Unary plus

Unary menos

Incremento

Decremento

Desertor (dirección)

Referencia de puntero

Devuelve el tamaño de un objeto

Typecast (conversión)

De derecha a izquierda
*
/
De %
Multiplicar

Dividir

Resto

De izquierda a derecha
+
-
Binary plus (adición)

Binario menos (resta)

De izquierda a derecha
<<
>>
Shift izquierdo

Giro a la derecha

De izquierda a derecha
<
<=
>
> =
Menos que

Menor o igual

Mas grande que

Mayor que o igual

De izquierda a derecha
==
!=
Igual a

No igual a

De izquierda a derecha
Y Bit a bit y De izquierda a derecha
^ Bitwise exclusivo o De izquierda a derecha
| Bit a bit o De izquierda a derecha
&& Lógico y De izquierda a derecha
|| Lógico o De izquierda a derecha
?: Operador condicional De derecha a izquierda
=
*=
/=
%=
+=
-=
& =
^=
| =
<<=
>> =
Asignación simple

Asignar productos

Asignar cociente

Asignar el resto

Asignar suma

Asignar diferencia

Asignar bit a bit y

Asignar bitwise xor

Asignar bitwise o

Asignar el cambio de izquierda

Asignar el cambio correcto

De derecha a izquierda
, Separador de expresiones De izquierda a derecha

Estas reglas guían al compilador sobre cómo evaluar las expresiones con múltiples operadores en la misma expresión. El operador de multiplicación, por ejemplo, tiene mayor precedencia que el operador de adición en la ecuación a + b * c, de acuerdo con el precedencia normas. Por lo tanto, el compilador primero evaluará la expresión B * C antes de agregar A al resultado.

Veamos un ejemplo de Precedencia del operador a través del código.

#incluir
int main ()
int a = 43, b = 11, c = 16, d = 31;
int resultado = ++ a * b-- +c / --d;
printf ("a = %d \ n", a);
printf ("b = %d \ n", b);
printf ("c = %d \ n", c);
printf ("d = %d \ n", d);
printf ("resultado = %d \ n", resultado);
regresar 0;

Las cuatro variables A, B, C y D se declaran en el código anterior, y sus valores iniciales son 43, 11, 16 y 31 en consecuencia. Luego, aplica una variedad de operadores aritméticos y de asignación a estas variables en una expresión. La expresión aumenta el valor de A mediante el uso del operador de preincremento ++ A, multiplica el resultado por el operador posterior a la decisión b-, y luego agrega el resultado a la divididación c por el valor predecidido de D. (Usando el operador de pre -decremento -d). El resultado variable se usa para contener el resultado total de esta expresión.

Producción

Asociatividad en c

Asociatividad se refiere al orden en que se evalúan los operadores durante una expresión con la misma precedencia. De izquierda a derecha y derecha a izquierda asociatividad son las dos formas de asociatividad en c. Si dos operadores tienen lo mismo precedencia, Se evalúan de izquierda a derecha de acuerdo con el concepto de izquierda a derecha asociatividad. Sin embargo, si se observa la misma precedencia, los operadores se evalúan de derecha a izquierda de acuerdo con la derecha a la izquierda asociatividad.

Por ejemplo, el operador de incremento ++ tiene derecha a izquierda asociatividad, lo que significa el incremento operador se evalúa después de la variable. Mientras que el lógico y operador tiene una izquierda a derecha asociatividad, lo que significa que el operador se evalúa de izquierda a derecha.

#incluir
int main ()
int a = 6, b = 3, c = 2;
int resultado = a * b / c;
printf ("resultado = %d \ n", resultado);
regresar 0;

Las tres variables A, B y C se declaran en este código, y se inicializan a 6, 3 y 2 respectivamente. Luego, aplica operaciones de multiplicación y división a estas variables en una expresión. La multiplicación y la división se clasifican de izquierda a derecha en C en función de su asociatividad Como tienen el mismo nivel de precedencia. Esto indica que la operación de división es primero, seguida de la operación de multiplicación al evaluar la expresión, A * B / C.

Producción

Conclusión

Precedencia del operador y asociatividad son conceptos cruciales en la programación C que ayudan a determinar el orden de ejecución de expresiones. Operadores con el más alto precedencia Los niveles se evalúan primero y asociatividad Las reglas ayudan a determinar el orden cuando se utilizan múltiples operadores con la misma precedencia. Comprensión Precedencia del operador y asociatividad es esencial al diseñar programas complejos, y ayuda a producir un código más limpio y eficiente con menos errores.