O que é precedência e associatividade do operador C

O Que E Precedencia E Associatividade Do Operador C



Operadores são comumente usados ​​para executar várias operações aritméticas e lógicas em C. A linguagem de programação C segue uma ordem específica conhecida como operador precedente e associatividade para determinar a ordem das operações durante a execução. As regras de operador precedente e associatividade ajudar a escrever código livre de erros e aumentar a legibilidade do código.

Este artigo fornece um tutorial abrangente para ajudá-lo a aprender sobre associatividade e precedência de operador em C.

Precedência do Operador em C

Operador precedente descreve a sequência na qual vários operadores são avaliados durante a avaliação de expressões. Por exemplo, se uma expressão tiver operadores de adição e multiplicação, qual deles deve ser avaliado primeiro? A resposta é simples, C segue certas regras para resolver tal ambiguidade, comumente conhecidas como operador precedente . Em C, operador precedente é classificado em 17 níveis, variando de operadores unários ao operador condicional ternário. Os operadores mais usados, como operadores aritméticos, operadores relacionais, operadores lógicos e operadores bit a bit, seguem o padrão C operador precedente protocolo.







Precedência as regras determinam quais operadores têm prioridade mais alta do que outros ao avaliar expressões. Vários tipos de operadores na linguagem de programação C têm graus variados de precedência . Por exemplo, os operadores unários têm uma prioridade maior que os operadores binários. A seguir está uma lista de operadores classificados em ordem crescente de precedência :



Operador Significado de operador Associatividade
()
[]
->
.
chamada funcional

Referência do elemento da matriz



Seleção indireta de membros





Seleção direta de membros

Da esquerda para direita
!
~
+

++

&
*
tamanho de
(tipo)
negação lógica

Complemento bit a bit (1's)

unário mais

menos unário

Incremento

Decrementar

Desreferência (Endereço)

Referência do ponteiro

Retorna o tamanho de um objeto

Typecast (conversão)

Direita para esquerda
*
/
%
Multiplicar

Dividir

Restante

Da esquerda para direita
+
Binário mais (Adição)

Binário menos (subtração)

Da esquerda para direita
<<
>>
Desvio à esquerda

Deslocamento para a direita

Da esquerda para direita
<
<=
>
>=
Menor que

Menor ou igual

Maior que

Maior ou igual

Da esquerda para direita
==
!=
Igual a

Não igual a

Da esquerda para direita
& E bit a bit Da esquerda para direita
^ OU exclusivo bit a bit Da esquerda para direita
| OU bit a bit Da esquerda para direita
&& E Lógico Da esquerda para direita
|| OU Lógico Da esquerda para direita
?: Operador Condicional Direita para esquerda
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
Atribuição simples

Atribuir produto

Atribuir quociente

Atribuir restante

Atribuir soma

Atribuir diferença

Atribuir AND bit a bit

Atribuir XOR bit a bit

Atribuir OR bit a bit

Atribuir turno à esquerda

Atribuir turno à direita

Direita para esquerda
, Separador de expressões Da esquerda para direita

Essas regras orientam o compilador sobre como avaliar expressões com vários operadores na mesma expressão. O operador de multiplicação, por exemplo, tem precedência maior que o operador de adição na equação A + B * C, de acordo com o precedência regras. Portanto, o compilador avaliará primeiro a expressão B * C antes de adicionar A ao resultado.

Vejamos um exemplo de operador precedente através de código.

#include

int principal ( ) {

int a = 43 , b = onze , 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 ) ;

retornar 0 ;

}

As quatro variáveis ​​a, b, c e d são declaradas no código acima e seus valores iniciais são 43, 11, 16 e 31 de acordo. Em seguida, aplica uma variedade de operadores aritméticos e de atribuição a essas variáveis ​​em uma expressão. A expressão aumenta o valor de a usando o operador de pré-incremento ++a, multiplica o resultado pelo operador de pós-decremento b– e, em seguida, adiciona o resultado à divisão de c pelo valor pré-decrementado de d. (usando o operador de pré-decremento –d). A variável result é então usada para armazenar o resultado total dessa expressão.

Saída

Associatividade em C

Associatividade refere-se à ordem na qual os operadores são avaliados durante uma expressão com a mesma precedência. Da esquerda para a direita e da direita para a esquerda associatividade são as duas formas de associatividade em C. Se dois operadores têm o mesmo precedência , eles são avaliados da esquerda para a direita de acordo com o conceito de esquerda para a direita associatividade . No entanto, se a mesma precedência for observada, os operadores são avaliados da direita para a esquerda de acordo com o método da direita para a esquerda. associatividade .

Por exemplo, o operador de incremento ++ tem movimentos da direita para a esquerda associatividade , o que significa o incremento operador é avaliado após a variável. Considerando que o lógico AND operador tem um da esquerda para a direita associatividade , o que significa que o operador é avaliado da esquerda para a direita.

#include

int principal() {

int a = 6 , b = 3 , c = 2 ;

int resultado = a * b / c;

printf( 'resultado = %d \n ' , resultado);

retornar 0 ;

}

As três variáveis ​​a, b e c são declaradas neste código e são inicializadas com 6, 3 e 2, respectivamente. Em seguida, aplica operações de multiplicação e divisão a essas variáveis ​​em uma expressão. A multiplicação e a divisão são classificadas da esquerda para a direita em C com base em suas associatividade pois têm o mesmo nível de precedência. Isso indica que a operação de divisão vem primeiro, seguida pela operação de multiplicação ao avaliar a expressão, a * b / c.

Saída

Conclusão

Operador precedente e associatividade são conceitos cruciais na programação C que ajudam a determinar a ordem de execução das expressões. Operadores com maior precedência nível são avaliados primeiro e associatividade as regras ajudam a determinar a ordem quando vários operadores com a mesma precedência são usados. Entendimento operador precedente e associatividade é essencial ao projetar programas complexos e ajuda a produzir código mais limpo e eficiente com menos erros.