1 00:00:07,780 --> 00:00:10,540 [Powered by Google Translate] Precedência é como responder à pergunta, o que a operação que devemos fazer primeiro? 2 00:00:10,540 --> 00:00:14,250 Se a resolução de equações matemáticas ou linhas de análise de código de computador, 3 00:00:14,250 --> 00:00:17,230 há regras estritas de precedência à qual aderimos 4 00:00:17,230 --> 00:00:20,270 para que todos os computadores e as pessoas podem obter o mesmo resultado. 5 00:00:20,270 --> 00:00:24,710 >> Primeiro, a regra mais importante para recordar, especialmente em testes de erro, 6 00:00:24,710 --> 00:00:27,680 é que sempre trabalhar a partir dos parênteses mais internos para fora. 7 00:00:27,680 --> 00:00:31,120 Usando parênteses extra pode ser uma tática de depuração útil, 8 00:00:31,120 --> 00:00:34,640 mas não é uma boa prática para maca do seu código com parênteses desnecessários. 9 00:00:34,640 --> 00:00:38,220 Aproveite o tempo para aprender as regras básicas de operação de precedência. 10 00:00:38,220 --> 00:00:42,450 >> A segunda regra geral é que quando os operadores têm priorty igual, 11 00:00:42,450 --> 00:00:44,820 você simplesmente resolver da esquerda para a direita. 12 00:00:44,820 --> 00:00:47,690 Ao lidar com a matemática simples, começamos com parênteses, 13 00:00:47,690 --> 00:00:52,110 em seguida, fazer a multiplicação e divisão, e por último fazer adição e subtração. 14 00:00:52,110 --> 00:00:54,400 Multiplicação e divisão têm a mesma prioridade, 15 00:00:54,400 --> 00:00:56,870 porque são essencialmente realizar a mesma operação. 16 00:00:56,870 --> 00:01:00,880 Afinal divisão é simplesmente multiplicando pelo inverso de um valor. 17 00:01:00,880 --> 00:01:04,300 Da mesma forma, a subtração é simplesmente adicionando um valor negativo. 18 00:01:04,300 --> 00:01:06,150 >> Vamos fazer um exemplo. 19 00:01:14,470 --> 00:01:18,300 Seguindo a ordem de precedência, vamos começar com os parênteses. Nove menos 1. 20 00:01:18,300 --> 00:01:23,410 Isso nos dará 8. Então, podemos passar para a divisão e multiplicação. 21 00:01:23,410 --> 00:01:27,450 Vamos resolver da esquerda para a direita. Então, 10 dividido por dois é 5. 22 00:01:27,450 --> 00:01:31,290 Temos 5 vezes 8 aqui, e que nos dará 40. 23 00:01:33,230 --> 00:01:35,410 Em seguida, passamos para a próxima ordem de precedência. 24 00:01:35,410 --> 00:01:38,730 Então, ficamos com 3 e 40 menos 1. 25 00:01:42,400 --> 00:01:43,700 Novamente apenas resolvendo esquerda para a direita, 26 00:01:43,700 --> 00:01:47,650 porque não há igual prioridade entre a adição e subtração. 27 00:01:47,650 --> 00:01:51,510 Podemos dizer 3 e 40 é de 43, menos 1 é 42. Essa é a nossa resposta. 28 00:01:53,920 --> 00:01:56,730 >> Existem dois tipos de operadores de decremento e incremento; 29 00:01:56,730 --> 00:02:01,000 A forma de prefixo, sufixo e a forma. 30 00:02:01,000 --> 00:02:06,130 A forma de sufixo, i + +, é comumente usado em loops, 31 00:02:06,130 --> 00:02:10,500 o que significa que o valor da corrente é usada na expressão, e em seguida, é incrementado. 32 00:02:10,500 --> 00:02:14,240 Assim, o valor só será diferente da próxima vez que a variável é utilizada. 33 00:02:14,240 --> 00:02:17,910 Por outro lado, o incremento ou decremento prefixo significa que o valor actual 34 00:02:17,910 --> 00:02:22,760 é incrementado ou decrementado em primeiro lugar, e, em seguida, ele é usado na expressão. 35 00:02:22,760 --> 00:02:25,310 >> Vamos dar um exemplo com o inteiro x. 36 00:02:25,310 --> 00:02:27,220 Vamos defini-lo igual a 5. 37 00:02:27,220 --> 00:02:36,500 Se usarmos o operador sufixo nele e dizer x + +, x nesta linha ainda é 5. 38 00:02:36,500 --> 00:02:39,230 Se fôssemos para imprimi-lo obteríamos o valor 5. 39 00:02:39,230 --> 00:02:42,540 Mas indo fato de x1 para a frente é igual a 6. 40 00:02:42,540 --> 00:02:48,770 Então, aqui nesta linha x é igual a 6, e se imprimiu obteríamos o valor 6. 41 00:02:48,770 --> 00:02:57,380 Agora, se foi utilizado o operador de prefixo, + + x, x é incrementado em primeiro lugar, e, em seguida, o valor é usado. 42 00:02:57,380 --> 00:03:00,110 Portanto, é igual a 7 nesta linha. 43 00:03:00,110 --> 00:03:04,750 O incremento do curso de 6 a 7, e se nós imprimi-lo teríamos o valor 7. 44 00:03:04,750 --> 00:03:09,160 >> A nuance último precedência que veremos lida com notação de ponteiro. 45 00:03:09,160 --> 00:03:15,050 O operador dereference, estrela, tem prioridade sobre operadores matemáticos básicos, 46 00:03:15,050 --> 00:03:18,550 mas não sobre o incement sufixo e operadores de decremento. 47 00:03:18,550 --> 00:03:20,690 Isso nos leva ao nosso exemplo final. 48 00:03:20,690 --> 00:03:24,500 Vamos dar o inteiro x e defini-lo igual a 7. 49 00:03:24,500 --> 00:03:30,540 Também vamos fazer uma y ponteiro e defini-lo igual ao endereço de x. 50 00:03:30,540 --> 00:03:34,920 Para que, quando y dereference devemos obter o valor 7. 51 00:03:34,920 --> 00:03:39,380 Agora, nesta linha de código, temos uma situação um tanto ambígua. 52 00:03:39,380 --> 00:03:44,310 Estamos dereferencing y primeiro, e depois aumentando o valor 7? 53 00:03:44,310 --> 00:03:48,300 Ou estamos incrementando o ponteiro e depois dereferencing isso? 54 00:03:48,300 --> 00:03:52,800 Na verdade, porque o operador de incremento sufixo tem precedência sobre 55 00:03:52,800 --> 00:03:55,370 o operador dereference, estamos tentando incrementar o ponteiro y, 56 00:03:55,370 --> 00:03:59,170 que mover o ponteiro pelo tamanho de bytes int. 57 00:03:59,170 --> 00:04:03,040 Essencialmente nos dar um endereço em algum momento totalmente diferente na memória, 58 00:04:03,040 --> 00:04:05,010 e depois vamos dereferencing-lo. 59 00:04:05,010 --> 00:04:07,350 Portanto, esta é a linha muito sentido. 60 00:04:07,350 --> 00:04:10,250 Se realmente queria incrementar o valor de 7, 61 00:04:10,250 --> 00:04:14,260 teríamos que colocar o operador dereference com y entre parênteses. 62 00:04:14,260 --> 00:04:17,290 Então poderíamos incrementá-lo. 63 00:04:17,290 --> 00:04:21,089 Assim, enquanto não estaríamos incrementando o valor de x, com o segundo a última linha de código, 64 00:04:21,089 --> 00:04:23,380 na última linha de código que faria y dereference infact 65 00:04:23,380 --> 00:04:26,380 para obter o valor x e incrementar isso. 66 00:04:26,380 --> 00:04:29,540 Nós ficaria com o valor de x é igual a 8. 67 00:04:31,580 --> 00:04:33,580 >> Aqui está uma rápida recapitulação das regras precedência que nós falamos. 68 00:04:33,580 --> 00:04:37,210 Nós vamos começar com os parênteses mais internos e trabalhar fora. 69 00:04:37,210 --> 00:04:41,210 Em seguida, passamos para operadores de sufixo, como i + + ou i -. 70 00:04:41,210 --> 00:04:45,920 Então dereference e endereço de operadores como estrela x ou x comercial, 71 00:04:45,920 --> 00:04:50,260 e os operadores de prefixo como + + i ou - i. 72 00:04:50,260 --> 00:04:54,920 Finalmente, fazer as operações matemáticas simples, como divisão, multiplicação, módulo. 73 00:04:54,920 --> 00:04:58,400 Em seguida, adição, subtração. 74 00:04:58,400 --> 00:05:02,170 Isso é precedência. Sou Jordan Jozwiak, e este é CS50. 75 00:05:04,160 --> 00:05:10,480 Nós vamos dereference e usar o endereço e - como você frase que? 76 00:05:12,380 --> 00:05:13,190 Eu sou feito. Okay.