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.
#includeint 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.
#includeint 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.