Olá e bem-vindo. Agora que falamos sobre todos
os operadores principais, os fundamentais, os estranhos, temos que falar
sobre esse pequeno conceito de precedência de operador.
Então, isso entra em jogo basicamente quando você avalia a ordem desses operadores.
Portanto, a precedência do operador determina o agrupamento dos termos e da expressão
e decide como uma expressão é avaliada.
Agora você realmente não precisa entender nada disso
se usar parênteses, que veremos em um segundo, mas você tem que entender esse
conceito porque é parte da linguagem, é parte do entendimento da linguagem.
Portanto, a precedência vai ditar a ordem de avaliação quando
dois operadores compartilham um operando.
E isso ficará claro com um exemplo.
Portanto, por exemplo, o operador de multiplicação tem uma precedência mais alta do
que o operador adicional.
Certos operadores terão diferentes ordens de avaliações. Portanto, se você fizesse uma instrução
composta em que
estivesse realizando muitos cálculos diferentes, por exemplo, 7 mais 3 vezes 2.
Isso pode ter vários resultados,
a adição e você está fazendo a multiplicação.
Você precisa entender se eu preciso fazer a adição primeiro ou devo fazer a multiplicação primeiro porque, dependendo
do que você fizer primeiro, o resultado será alterado.
Então, por exemplo, este x é igual a 7 mais 3 vezes
2, o resultado pode ser 13 ou 20, dependendo da
ordem de quando você avalia cada operando.
Portanto, a ordem de execução das várias operações pode fazer uma grande diferença.
E é por isso que você precisa entender a precedência.
C fornece regras específicas para escolher o que fazer primeiro.
Nesse caso, faço a multiplicação de mais. Bem, c vai lhe dizer o que vai acontecer.
Idealmente, se você envolvê-los entre parênteses, você estará dizendo a ele o que fazer,
você estará tomando essa decisão. Mas se você não colocar isso entre parênteses,
a linguagem de programação vai tomar a decisão por você.
Portanto, em c, a multiplicação terá uma precedência maior do
que o operador de adição. Então, o que vai acontecer é que o resultado será 13.
Agora, você poderia dizer 7 mais 3, que é 10,
e multiplicar por 2, o resultado seria 20.
Ou você pode fazer 7 mais 3 vezes 2, que é 7 mais 6, que é 13.
Então é assim que você pode ter valores diferentes.
Isso é ambíguo. Você faz o mais primeiro ou faz a multiplicação primeiro.
Felizmente, novamente, isso é decidido pelo idioma. Mas você pode ver como há dois resultados diferentes.
7 mais 3 vezes 2
ou 7 mais 3 vezes 2. Você vê a pausa aí.
Agora c vai fazer o último. Ele vai fazer a multiplicação primeiro porque
tem uma precedência mais alta.
Então, vai fazer 3 vezes 2, que é 6 e depois vai somar 7.
Portanto, o resultado x será 13 porque o asterisco estrela tem
precedência mais alta do que a adição.
E, portanto, existem regras para cada operador, qual
operador tem precedência sobre o outro.
Existe um nível de precedência.
E multiplicação e divisão têm precedência mais alta do que adição e subtração.
Então, eles são executados primeiro, por exemplo.
Você pode evitar toda essa precedência e fazer com que o
idioma decida por você se fornecer parênteses.
Os parênteses sempre agruparão as expressões
na precedência mais alta. Então, se eu disser 7 mais 3 e colocar isso
entre parênteses, sempre fará a adição primeiro.
Se eu disser
3 vezes 2 e colocar isso entre
parênteses, sempre fará a multiplicação e, em seguida, somará o que estiver fora dos parênteses.
Portanto, você realmente deve usar apenas parênteses. Sempre use parênteses.
Caso contrário, o idioma decidirá por você. Você tem que memorizar todos os níveis
de precedência, o que é difícil de fazer, como mostrarei na próxima tabela.
Existem muitos operadores diferentes e você deve saber a
precedência de todos esses operadores diferentes.
Portanto, pode ficar muito confuso.
Isso é semelhante a você saber que ou você deixa a linguagem fazer uma conversão implícita para
você ou você faz uma conversão explícita com um operador de conversão, mesmo
tipo de ideia aqui, apenas use parênteses.
Então, se olharmos para esta tabela, que veremos em um segundo, eu acho porque
primeiro quero falar sobre associatividade.
A associatividade está relacionada à precedência, porque o que acontece
se dois operadores têm a mesma precedência. Então, como você descobre a ordem.
Bem, então você aplica associatividade. Portanto, sempre que os
operadores têm o mesmo nível de precedência, você aplica regras adicionais.
Portanto, associatividade é basicamente começar ou não do
lado esquerdo e ir para a direita ou direita para a esquerda.
Portanto, se você compartilhar um operando e ambos forem executados na
mesma ordem, você os executará na ordem da instrução com
base na regra de associatividade. Portanto, para a maioria dos operadores,
a ordem é da esquerda para a direita. Deixe-me mostrar um exemplo.
Se você disser que 1 é igual a 2 não é igual
a 3, os operadores igual a e não igual ponto de
exclamação igual têm a mesma precedência.
Portanto, neste caso, temos uma ambigüidade. Nós temos um problema.
Não sabemos o que avaliar primeiro. Não sabemos se precisamos fazer 1 igual a
2 ou 2 não
é igual a 3 e isso importa porque você está fazendo uma expressão booleana.
Esta é uma expressão booleana aqui, então é possível retornar a verdadeiro ou falso.
Então, o que você faria aqui é aplicar a associatividade.
A associatividade de ambos iguais e diferentes é da esquerda para a direita.
Você vai primeiro fazer 1 igual a 2, isso será falso.
E então você vai dizer falso, que
não é igual
a 3, que não é. Portanto, 1 é igual a
2 e isso não é igual a 3.
Portanto, o resultado será falso. Portanto, a expressão à esquerda é executada primeiro
e se move para a direita.
Então, como você quer pensar nisso, é basicamente igual a esses parênteses.
Primeiro, você vai avaliar que um é igual a 2.
E se isso for avaliado como verdadeiro ou falso, você dirá que é igual a 3.
E isso é confuso porque não
tem valores verdadeiros ou falsos.
Mas 1 é igual a igual a lembre-se de que esse é o operador de comparação, não o operador de atribuição.
E não estamos usando variáveis aqui, então é ainda mais confuso.
Mas se você colocasse esses números
em variáveis, estaria apenas dizendo, se x for igual a y, então se
x fosse 1 ey fosse 2, isso resultaria em 2 como falso.
Porque ambos não são iguais. E então se 3 fosse outra
variável z que é igual a
3, você dirá se x é igual a y é falso, z
é igual a 3. Portanto, falso
não é igual a 3. Portanto, seria falso.
Portanto, 1 é igual a 2 é executado primeiro, o resultado é 0 falso.
Então 0 não é igual a 3, é executado resultando em 1 verdadeiro.
Então eu disse falso inicialmente, mas obviamente 0 não é igual a 3, que
a coisa toda seria avaliada como falsa.
A coisa toda seria avaliada como verdadeira, desculpe porque 0 não é igual a 3.
Portanto, 0 não é igual a 3. Eu estava dizendo que é falso porque eles não são iguais,
mas isso significa que na verdade é avaliado como verdadeiro.
Tão bem legal lá. Agora, aqui está nossa tabela que diz
todas as regras de precedência e associatividade e é muito difícil memorizar isso.
Então, novamente, o que você faz, use parênteses.
Mas aqui está a mesa. O nível de precedência mais alto está
no topo, então os operadores postfix têm o nível de preferência mais alto.
E se você estiver usando qualquer um desses na mesma expressão, então você lê
da esquerda para a direita.
Portanto, os operadores pós-fixados, coisas como parênteses,
são a precedência mais alta.
Portanto, toda vez que você incluir algo entre parênteses, isso terá efeito.
Mas você tem os colchetes e depois
os operadores pós-fixados. Não falamos sobre
algumas coisas de ponteiro, que é este traço maior que, mas
sabemos agora sobre mais mais e menos
menos, que são pós-fixados e
têm a precedência mais alta. Operadores unários coisas como o mais menos, o ponto
de exclamação para não, o til para o bit a bit, o mais mais
o menos menos e o operador de conversão é referido como um operador unário porque tem apenas um operando.
E então o operador asterisco é o operador ponteiro. O e comercial é o bit a bit
e o sizeof.
Esses têm a próxima precedência mais alta.
Mas aqui você está realmente lendo da direita para
a esquerda para avaliação, se houver dois na mesma instrução de estado de linha.
E então novamente nós apenas entramos em pedidos. Você tem que conhecer esta ordem e memorizá-la. Tão bem difícil de fazer, mas
eu queria mostrar para vocês, só queria ter
uma pequena ilustração para mostrar algumas das tabelas. Existem muitos operadores.
E então há muitos níveis de presença, e há a associatividade na maior parte, como dissemos
antes, da esquerda para a direita.
Você só tem a associatividade direita esquerda para os operadores unários.
Assim, os operadores bit a bit seguem em direção ao fundo, todos
da esquerda para a direita. Operadores ternários condicionais da direita para a esquerda.
Os operadores de atribuição estão sempre na parte inferior. Isso sempre é avaliado por último.
E então se eles são iguais, outros aí você avalia da direita para a esquerda.
E a vírgula também é chamada de operador. Isso é da esquerda para a direita.
Outro conceito embora precedência e associatividade
que não vamos realmente abordar
com esses outros exemplos. Vamos acabar usando parênteses o tempo
todo, e é isso que você quer fazer.
Mas, novamente, se você deseja compreender totalmente a linguagem, você deseja compreender esses conceitos, é por isso que eu digo a você.
Ninguém pode afirmar que conhece a linguagem se não souber alguns dos detalhes como este.
Mas use parênteses o máximo que puder. Obrigada.