[Powered by Google Translate] [Electronic SONS estático] ROB: Ok, então o que nós apenas trouxe a CS50 é Spaces. ALI: Espere, espere de volta. Bem-vindo à seção! ROB: Bem-vindo à seção! ALI: Yay! ROB: Supersection! ALI: Eu sou Ali e este é Rob. Ok, agora vamos explicar Spaces. ROB: Então, o que só trouxe você é CS50 Spaces. Você vai usar muito isso em suas seções neste semestre. Basicamente, nós já tivemos de baixar o aparelho. E você pode pensar CS50 espaços como uma interface web conversando com um aparelho que temos em algum servidor em algum lugar. Assim, você pode executar o seu código neste interface, e vamos ver como fazer as coisas. Você também pode olhar o código de outras pessoas na seção, e - ALI: E como algumas pessoas descobriram, você pode conversar pessoas do lado. E todos nós vamos vê-lo, também, de modo que é emocionante. Venha, venha sentar-se. Sente-se. ROB: Então, as seções são - ALI: Não, não, vocês podem vir. ROB: Seções vão ser muito mais interativo neste semestre. ALI: Ah, ele é como - Oh. Ok, legal. Então, se vocês estão apenas chegando, você pode ir a este link, se eu conseguir ali, bem ali. Nós realmente não podemos escrevê-lo, porque não há espaço na placa, mas este link aqui, ir para que em seus computadores, e você entrará CS50 Espaços, o que é uma coisa muito legal. Okay. Você tem um problema? ROB: Então você pode encontrar os problemas - precisamos ser capazes de escrever isso em algum lugar. Então, se você vai para cs50.net/psets e este é o supersection hacker - e você vai para a Edição Hacker de pset um, olhar para a especificação em algum lugar abaixo na página - ALI: Então, basicamente, enquanto Rob está olhando, o que vamos fazer em hoje seção é, há uma seção de problemas - ROB: - na página oito. ALI: - chamado de seção de problemas - ROB: Seção de perguntas. ALI: Desculpe, uma seção de perguntas. E esses são o que nós vamos passar por cima - esses são o que nós vamos passar por cima de hoje na seção. E nós estamos indo para codificá-lo em espaços CS50, e espero que funcione. E nós podemos apenas falar por eles. E vocês podem fazer perguntas sempre que você sente - ROB: Então, isso está começando a ser uma coisa comum com a maioria Série de Exercícios. Acho que, com esta, ele diz que você não tem que entregar essas questões dentro Mas a idéia é que essas questões são colocadas na pset, e você pode vir a seção de ter essas perguntas respondidas. Ou, se você não vir a seção, você pode respondê-las por conta própria ou obter ajudar em horário de expediente ou algo assim. Mas estas são questões que deveriam prepará-lo para o conjunto de problemas. E na edição de hacker, um monte de perguntas pode ser apenas sobre expandir o seu conhecimento CS atual. ALI: Sim, muito bem. Ok, então, é todo mundo na CS50 espaços? Oi, vêm dentro COLUNA 1: Podemos ver a URL mais uma vez? Rob: Sim, isso será mais fácil uma vez que você está realmente em suas seções, e o TF só pode enviar o URL de antemão. ALI: Yay, sente-se. Há lugares aqui. A frente não é tão ruim assim. O quê? Então, CS50 Spaces, estamos chegando lá. Alguém tem alguma dúvida antes de entrar - o que? ROB: Não há nem mesmo qualquer giz. [Inaudível] ALI: Desculpe. Você pode usar suas unhas? Nós estamos em um quarto muito baixa tecnologia para uma classe muito alta tecnologia. Ok, é uma espécie cada um de bom? Alguém tem ainda dúvidas sobre isso? Como eu disse antes, nós estamos indo ir através da seção de perguntas em as especificações pset. Portanto, não há apenas um par de problemas que vamos codificar em CS50 Spaces. Estão todos bem? Okay. Bom? ROB: Você tem um laptop? ALI: Você pode sair com Lucas. Ele está sentado ao seu lado. Tempo de ligação. ROB: Então, comece com o primeiro problema? ALI: Yeah. Podemos começar. Você quer que eu - Eu posso ir. Então, vamos para as especificações pset. Ah, por que é - ROB: Controle. ALI: Ok, então vamos em resposta essas coisas também? ROB: Ah, sim. Então - ALI: Oh, fez curtas estrelados por todos relógio de Rob? Ok, legal. ROB: Sim, eu não acho que necessariamente esperado que você tenha assisti-lo antes de chegar a este ponto, mas podemos discutir os problemas de antecedência, uma vez que eles estão na seção de perguntas coisas. Então, se você ainda não assistiu, não se preocupe. Aqueles que têm pode tentar responder. Então, a primeira pergunta, o que é um pré-processador, como o # include relacionar? Então, alguém tem resposta para isso? Ali: Vocês podem conversar. Claro, vá em frente. SPEAKER 2: # include é um código pré-escrito, e em vez de copiá-lo e colá-lo em seu programa, por apenas dizendo que incluem, o pré-processador sabe que ele está lá e que deve adicioná-lo em mais tarde ou antes de mais nada acontece. ALI: Sim, incrível. Cool. ROB: Então, quando você está realmente compilar um programa, o pré-processador é este primeiro passo. Compilação acontece em quatro grandes passos. Assim, o pré-processador é o primeiro grande, e é esse cara que vai através de e olha para todos estes símbolos de hash. E qualquer linha que começa com um hash, o pré-processador olha para ele e vê se ele pode processá-lo. Então # include diz ao pré-processador para procurar alguma cs50.h arquivar e simplesmente copiar e colar o seu conteúdo para este arquivo. Então você pode realmente # include o que quiser, mas é principalmente vai ser . Arquivos h. Nós não chegamos a # define ainda, então isso não importa. ALI: Sim, nós somos bons nisso. Alguém tem alguma dúvida sobre isso? Somos bons? Próxima pergunta. SPEAKER 3: No curta, havia algo sobre c também.? Isso é relevante ou é irrelevante? ROB: Sobre c com o processador pré-.? SPEAKER 3: Sim, ou eu fiz alguma coisa? ROB: Então o curto pode ter sido mostrar o pré-processamento este arquivo e . gerá-lo para outro arquivo c, de modo que você pode pré-processar este arquivo - quando você acabou de correr como, fazer Olá ou hello.c bumbum, você está fazendo tudo a compilação de um grande passo. Mas você pode fazê-lo explicitamente em suas etapas separadas. Então, primeiro você pode pré-processá-lo. Depois, você pode compilar, então você pode montar, e então você pode ligar. Nós vamos chegar aos outros. Mas o pré-processamento, você tipo de processo de pré-lo, e, em seguida, ele vai para outro. arquivo c. Porque pré-processamento realmente não muda nada. É só um monte de copiar e colar. Você pode copiar e colar manualmente você mesmo. ALI:. E para ser claro, o arquivo é um arquivo c C, por isso é escrito em código C. Por isso, vai a partir de código C para o código C. Você está apenas adicionando mais código com a libra. ROB: Quando você pré-processados, ele ainda é um arquivo C válido. SPEAKER 3: Okay. ALI: Boa pergunta. Eu gosto disso. Ok, próxima pergunta. Qual é o compilador? Alguém? Sim. SPEAKER 4: altera o código pré-processado em conjunto. ALI: Perfeito. ROB: sim. ALI: Cool. ROB: Então é isso que o compilador está fazendo especificamente quando estamos usando Clang. Em um sentido muito geral, um compilador é como tomar um código em linguagem e transformá-lo em outra língua. Assim, em C - ou, bem, Clang está tomando código que está em C e transformando-a em conjunto. E você não tem que ser capaz de entender a montagem de todo. Mas essa é a linguagem que está transformando-o em. ALI: Okay. E então, o que é uma montadora? Alguém? SPEAKER 5: [inaudível] para binário? ALI: Desculpe, mas o que? SPEAKER 5: [inaudível] para binário? ROB: Yep. ALI: Sim. ROB: Então a montadora - código de montagem é muito, muito perto do que o seu computador possa entender, mas lembre-se que ele não entende muito bem o texto que é o código de montagem. Você precisa convertê-lo em linha reta 1s e 0s. É como um processo de tradução direta. Nós poderíamos apenas dar-lhe uma tabela que mapeia o que cada instruções de montagem significa. Mas a montadora está apenas fazendo esta tradução para você. É transformar o código de montagem em 1s e 0s. ALI: E então, para o último, o que é um linker? E como é que lcs50-relacionam? Alguém? ROB: Este é o mais difícil e menos explicado no vídeo um compilador. ALI: Alguém se lembra de ver-lcs50 em um comando? SPEAKER 6: Quando você foi para o fazer. ALI: É no fazer. Sim, legal, tudo bem. Existe algum palpite ou vagas - Sim, vá. COLUNA 7: Eu não tenho certeza, porque a sua curta foi realmente [inaudível], mas era algo sobre fazer arquivos separados com cada biblioteca e, em seguida, colocar los todos juntos em uma biblioteca? ROB: sim. Então, quando você tem hello.c, que é um programa muito simples. Você está realmente fazendo apenas uma coisa nele. Mas quando você chegar em outros programas - e eu acho que mesmo quando você GetString em seus programas, você precisa para começar incluindo outros arquivos. Assim, a biblioteca CS50 é um tal arquivo em que temos as implementações de GetString e GetInt e todas essas coisas. Então, o que o ligador faz é que vai por aí procurando por todos esses arquivos, vendo onde as funções são definidas, certificando-se de que, quando eu chamo GetString em algum lugar, ele sabe que GetString significa que é o GetString mais na biblioteca CS50. Assim, o vinculador só tem todos esses arquivos, esmaga-los juntos, e agora você tem um arquivo executável. Portanto, tenha em mente, se você estiver usando a biblioteca CS50, você precisa tanto do # Include no topo, e depois também em seu comando make, como você disse, você tem que ter o-lcs50. Então você não pode apenas ter um. Então, isso é apenas algo a ter em mente para referência futura. SPEAKER 8: Então, vamos dizer que não havia outra biblioteca, como cs51.h, estaríamos também tem que adicionar-lcs51? ROB: A única razão que esta-lcs50 funciona perfeitamente é porque temos que o conjunto em um lugar específico em seus aparelhos para que ele saiba o que -Lcs50 meios. Nós poderíamos apenas dar-lhe um arquivo cs50.c, e então você pode compilá-lo, dizendo Clang hello.c cs50.c, e depois faria seu executável, colocando esses dois arquivos juntos. Ele sabe que, lcs50 significa cs50.c mais em algum diretório que especificado em seus aparelhos. Então, se você queria um cs51.c ser especificável por apenas dizendo-lcs51, então nós também precisamos colocá-lo no diretório para que ele saiba onde olhar para ele. ALI: Qual foi a sua pergunta? COLUNA 7: Por que você tem que ligar o CS50 se - não era ele copiar / colar na primeira etapa, quando você pré-processados ​​é? ALI: Você quer tomar? ROB: Claro. Portanto, o arquivo cs50.h é separado do arquivo C cs50.c. Você começou a funcionar protótipos na classe? Okay. Então, basicamente, o arquivo cs50.h está indo só para copiar e colar - ALI: Vocês sabem o que são assinaturas? Ok, então muito bem, se você olhar - ROB: Vamos fingir cs50.h não está lá. Agora este arquivo - você está fazendo GetString string s =. Mas quando chegamos a este ponto no código, não tem idéia do que GetString é. Ele sabe que é uma função, uma vez que você está chamando. Mas ele não sabe que ele é, na verdade, deve retornar uma string. Então, como eu disse, string s = GetInt, isso não faz qualquer sentido, uma vez você está assinando um inteiro para uma string. Mas ele não sabe que GetString faz sentido, porque não sei que GetString retorna um string. Então, o que cs50.h diz é algo como isto. ALI: Então, o que Rob está digitando é, é uma promessa de uma forma que ele vai tem essa função chamada GetString. ROB: Isto é tudo cs50.h que está copiando e colando aqui, bem como GetInt e todas essas coisas. E isso só diz que GetString se retornar uma string. Você não sabe como é implementada, mas quando chegarmos a esta linha, agora ele sabe que corretamente retorna um string. SPEAKER 9: Então, se não se incomodou com a coisa # include e, em vez escreveu apenas o protótipo para os que estamos realmente vai usar? ROB: Yeah. Então, vamos executar este. SPEAKER 9: É? Então, por padrão, ele faria o-l para CS50 apenas porque -. ROB: - expressão. ALI: Sim, porque, como você disse, é no arquivo make. ROB: cs50.h também acontece a ser char * typedef para cadeia. Você pode ignorar completamente o que isso significa para agora. Mas isso também é algo incluído no cs50.h. Então, agora as coisas funcionavam perfeitamente bem. Ele funciona exatamente igual ao que era quando só tinha o # include. E assim incluindo cs50.h acontece com o excesso de incluir coisas que você precisa - como, você não usar o GetInt neste programa, mas isso não importa. Ele vai simplesmente ignorá-lo. ALI: E então, quando você faz o-lcs50 aqui e aqui, o que está acontecendo em é que é ter o código real implementável. Então é aí que ele realmente é, fazendo o - escrever o código para GetString. Portanto, não é apenas uma promessa mais. É realmente passando e levando a corda e todas essas coisas. Faz sentido? Perguntas? Tudo bem. Feijão frescos. ROB: Agora podemos passar para código real. ALI: Okay. Então, aqui está o primeiro problema. Então, ele diz que escrever um programa que solicita ao usuário uma minúscula letra e depois converte para maiúsculas sem usar bit a bit as operações, de acordo com a saída de amostra abaixo. Assim você pode ver, você executa o programa com o. A.out /, e então você está vai colocar em letras minúsculas a, e em seguida, o programa deve dar de capital A. Então, por que não vocês todos dar-lhe um tiro no CS50 espaços? Então, vocês podem ir aqui. E você pode apagar todo o código aqui. E então você pode ir em frente e começar a programar a coisa. ROB: Você provavelmente vai querer usar GetChar, que é incluídos na biblioteca de CS50. ALI: Eu acho que poderia ser melhor se você salvar a parte de cima. Então você pode querer apenas mudar as coisas no meio. Vá em frente e trabalhar. Sinta-se livre para trabalhar com o outro. Rob: E você pode fazer perguntas se você tem - COLUNA 10: O que é uma operação bit a bit? ROB: Então, ignorar que para este problema. ALI: Se você não sabe, isso é bom. ROB: Nós estamos indo para usá-lo no próximo problema. Mas se você não sabe o que é um operador bit a bit é, isso é bom. COLUNA 10: É que, como ligá-lo ao código ASCII? ALI: Não. ROB: Não. Você pode fazer isso para este problema. COLUNA 10: Como você faz isso? Então, se eu tivesse um lugar para escrever - ALI: Ou algo para escrever. ROB: Eu poderia apenas uma espécie de tipo para isso. ALI: Tipo no topo. ROB: Oh, eu estou sentado em um microfone. Assim, vimos na palestra que o valor ASCII para maiúsculo é 65. E capital B será 66, e assim por diante. Assim, você pode literalmente usar 'A' para significar o número 65. Como, este é o valor de 65. Eu posso fazer algo como int x = 100 - 'A'. E agora x terá o valor 100-65. ALI: Você pode executar isso e mostrar isso. Oh, talvez não. Não importa. ROB: Eu tive que imprimir. COLUNA 10: Como é que você ligá-lo de volta ao personagem? ALI: Então, se você não - você apenas forçá-lo a ser um char, iguais. ROB: Então há um - a distinção entre um char e um inteiro é apenas em termos de tamanho. Então um inteiro passa a ser capaz de representar as coisas , tipo, quatro bilhões. Um char só é capaz de representar as coisas até 255. Mas, não há diferença entre eles não seja este. Então você pode dizer char c = 65. Isso é equivalente a dizer char c é igual a "A". ALI: Oh, não. Na verdade, não guardar coisas. ROB: Não, você não pode fazer isso. ALI: Isso é apenas - [Gemidos] ROB: Ok, então o que Ali escrevi foi um programa que primeiro imprime 100 - 'A' como um número inteiro, que era de 35, como nós esperamos, porque 100 menos a ASCII valor de A é 65. Então ela impressos com% c, o que significa interpretá-lo como um char. Então, 100 - é de 35. Interpretar isso como um personagem passa a ser o símbolo de hash. Se você olhar para asciitable.com ou o que seja, você vai ver que 35 é o símbolo de hash. ALI: Ok, quaisquer outros esclarecimentos sobre o problema? Ok, vocês podem ir em frente e fazê-lo em seguida. Sinta-se livre para fazer perguntas ou falar uns com os outros. Ou se você já está pronto, você pode relaxar. LUCAS: Eles são da mesma classe, todas as letras minúsculas em ordem e também a maiúscula também estão em ordem, porque isso é algo útil para o problema. ALI: Bom ponto, Lucas. Então, se vocês todos isso? COLUNA 11: Sim. Isso é como fazê-lo, certo? ALI: Certo. ROB: Yeah. COLUNA 11: [inaudível] ALI: Tudo bem. ROB: O que é a questão pedindo? Apenas para converter - ALI: Converter a minúscula ao maiúsculas. É isso aí. ROB: Okay. ALI: Será que devemos escrever? Eu acho que nós vamos apenas olhar para outra pessoa. ROB: Então para aqueles que possam ser preso, um caminho - Se eu tiver algum char c, e vamos dizer que ele passa a ser a letra D. Então, agora como posso descobrir o que letra do alfabeto é C? Não D, mas eu quero dizer, D passa a ser a quarta letra do alfabeto. E se começar a contar a partir de 0, então é a terceira letra do alfabeto. Assim, se A é 0, B é 1, C é 2, é 3 D, como posso descobrir posição int - em que posição do alfabeto C é em? Alguém tem alguma idéia? ALI: Eu acho que eles estão todos de codificação. ROB: E sobre o primeiro? COLUNA 12: Então o que A é, subtrair o primeiro? ROB: Yeah. ALI: Sim, incrível. Então, você poderia fazer o capital D - oh, sinto muito. Você leva o personagem e você subtrair o primeiro, como você disse. ROB: Então, se D é algo como 68, e subtraímos A, que é de 65, então temos 3, nos dizendo que D é a terceira letra do alfabeto a partir de 0. Então você pode usar isso. Agora sabemos o que letra do alfabeto, em termos de letras maiúsculas, ou - nós poderíamos fazer a mesma coisa para letras minúsculas para descobrir o que minúsculas posição em que estamos dentro E nós podemos usar isso para depois convertê-lo em maiúsculas usando um ideia muito semelhantes. Pedir sugestões? ALI: Vocês - espere, eu não sei o quanto vocês são. São mais de você fez, você ainda está trabalhando, você está preso? Vocês podem gritar - preso. Uma pessoa está presa. Cool. Eu tendem a ser preso também. COLUNA 13: eu sou feito. ALI: Você está feito? Okay. Concluído. COLUNA 13: [inaudível] ALI: Sim, legal. Você está verificando que é em forma de minúsculas? Ok, legal. Onde estão os outros? Essa dica ajudá-lo, como para não-furando a si mesmo? COLUNA 14: Não realmente, mas apenas porque, eu não sei, eu não sou digerir ainda. ALI: Ok, legal. Você quer tentar - ou você quer ir e falar? ROB: O que eu ia dizer é - utilizando este modo. Você entende como temos que posição do alfabeto a letra é em? COLUNA 14: Ok, então quando você colocar as coisas em aspas simples, que retorna um número? ROB: sim. Será traduzido para o valor ASCII que representa. Então você quer ir a tabela ASCII, ou seja o que for? ALI: Apenas um destes? ROB: Yep. Então, quando você colocar qualquer desses símbolos, ignorando um monte de - ALI: [inaudível] ROB: Oh, utilizando o cursor. ALI: Yeah. Isso foi emocionante. ROB: Então, ignorando estes do lado esquerdo, que são símbolos especiais - se você colocar qualquer um destes símbolos em aspas simples, então será traduzidas para este valor do lado esquerdo. ALI: Este é o número decimal para ele. É como um jogos com 65, B a 66, e você vai notar que eles estão todos em ordem alfabética, o que faz a diferença. Então, como Rob diz, antes, em que o código, fomos calcular a distância de a primeira letra, per se. E isso vai ser o mesmo, se é maiúscula ou minúscula. ROB: Então, quando nós fizemos D, 68 menos de 65, nós temos três. Como D é de três posições para o alfabeto. ALI: Então, como é que você traduzir isso mais para encontrar o pouco d? ROB: Yeah. Então, se eu tenho 3 agora, eu sei que eu quero ir três letras no - acontecer de estar indo minúsculas agora, mas vamos dizer que eu quero ir para três posições para o lado das coisas minúsculas. Então, como posso fazer isso? Eu sei que é um minúsculo 97. Então, como posso encontrar três posições para as letras minúsculas? COLUNA 15: Eu tenho uma pergunta, na verdade. ALI: Sim, vá em frente. COLUNA 15: Então, para isso, ele realmente não se importa se eu sei que esta posição, gosta, eu não preciso desta tabela. ROB: Nope. Você nunca vai precisar usar qualquer um desses números. E este é um ponto importante em seus programas que você nunca deve difícil codificar qualquer destas constantes. Use 'A'. nunca use 65 ou 97. ALI: Aqueles são chamados números mágicos, e eles são muito confusas. Tipo, quando você estiver depurando um código, você pode não se lembrar do que você usou para eles. E para nós o seu código de classificação, não sabe realmente o que que você está usando para eles. Então, é melhor se você realmente usar os personagens assim que faz mais sentido para as pessoas. Ok, todas as outras perguntas? As pessoas estão mais feito, ou - Eu acho que nós podemos verificar. É realmente assustador que você pode ver o código das pessoas. ROB: Yeah. Nós não temos que fazer isso aqui. Nós não sabemos os nomes das pessoas, também. ALI: Ah, sim, bem que o torna melhor, então vamos ser ainda mais imparcial em vez de apenas escolher aleatoriamente alguém. Não se preocupe. Eu não vou fazer isso. Se você tem coisas aleatórias sobre - nunca mente. Okay. Como as pessoas estão fazendo? COLUNA 17: Então, a nona linha deve imprimir um personagem? ROB: sim. ALI: Yeah. Então, se você vai para baixo - ROB: Oh, não pode fazer isso. ALI: Você vai ver que é impresso o símbolo hash. COLUNA 17: Ah, ok. ROB: Eu acho que outra maneira você pode olhar para as coisas é que estamos imprimindo dois caracteres. Primeiro que está imprimindo é a letra A. O próximo que estamos imprimindo é apenas 65. Ele provavelmente vai gritar comigo por estes. Então, se nós simplesmente executar isso, você vai perceber que ele imprime uma vezes ambos. Porque nós estamos pedindo é a mesma coisa. Estamos pedindo para imprimir a letra A. E então nós estamos pedindo para imprimir a número 65 interpretado como um personagem, que é a mesma coisa. ALI: Você tem algo a dizer? Ah, só brincando, desculpe. Tudo bem, que são pessoas - ROB: Nós podemos apenas atravessá-la. ALI: Ok, então como você começa? Alguém? Como sugestão, temos que conseguir alguma coisa do povo, a partir das typers. COLUNA 18: [inaudível] ALI: Ah, sim, um aviso, perfeito. Então, nós vamos escrever - o que vamos escrever? Alguém? Ou devo apenas digitá-lo? Estamos realmente digitando o - ROB: Claro. ALI: Então, nós vamos escrever um printf para solicitar que, por isso, pode ser gosto, dá-me um personagem. Ok, e depois? Por que ele está fazendo isso? ROB: Eu não sei. ALI: Okay. Então, agora, nós estamos dizendo a eles para nos dar um caráter. Mas, então, como é que você começa realmente o personagem? COLUNA 19: GetString uso. ALI: GetString? GetChar? Ok, então qual é a diferença entre uma corda e um char? COLUNA 19: Strings são uma série, como uma matriz de caracteres. ALI: Cool, sim. Portanto, neste problema, só precisamos considerar um personagem de cada vez, de modo estamos indo só para fazer GetChar para essa instância. ROB: Nós poderíamos implementar uma função, se quiséssemos que levou uma cadeia inteira e foi até a cadeia e mudou todas as letras minúsculas para maiúsculas e tudo maiúsculas de minúsculas. Mas aqui, estamos apenas a pedir-lhe um caráter. ALI: Então, agora temos o caráter aqui, mas então temos de salvá-lo. Então vamos acrescentar char c - o quê? COLUNA 20: Defina a variável. ALI: Sim, exatamente. Portanto, temos o nosso caráter. ROB: Eu acho que você pode ser - você está apenas três espaços, é por isso que está gritando para você. ALI: Ok, legal, agora que temos a tabulação conjunto, o que acontece a seguir? Qual é o próximo passo? ROB: O que o nosso programa deve fazer é mudar uma letra minúscula a um letra maiúscula. E se acontecer de eu inserir o símbolo hash? É que - ALI: É um bom símbolo. Nós usamos muito. ROB: Isso é uma coisa válida que pode converter para uma forma maiúscula? COLUNA 21: Não. ALI: Não. Devemos verificar isso. Assim podemos ter uma declaração se verificar isso, se o c é maior do que ou igual a a'a minúscula '- por isso, se olharmos para o gráfico, você vai perceber que ele tem que ser entre aqui, em 97, ea minúscula. E pode ser qualquer um destes, e em incrementos de toda a maneira para baixo. E depois há a z 122. E tem que cair entre estes dois valores. Isso faz sentido? ROB: Então, se c não é entre 97 e 122 - ou você nunca precisará usar esses números - se c não é entre 'a' e 'Z', então não era um personagem válido para nós em letras maiúsculas. ALI: Então, em forma de código, dizemos que se c é maior ou igual a única minúsculas caso - uau, como você diz isso? Ok, é maior do que ou igual à minúscula "a", e que tem de estar acima de 'z'. o minúsculas Por isso, tem de ser inferior ou igual a minúsculas 'z'. Nós estamos fazendo a certeza que é entre os dois. Então, podemos continuar com o nosso código feliz. O quê? ROB: Então eu percebi que seria apenas continuar perguntando, se acontecer de não ter um letra minúscula. ALI: Oh, eu não estava ciente disso. Desculpe. Ok, então se nós vamos fazer como Rob diz, e certifique-se de que - podemos continuar pedindo-lhes, então, o que devemos fazer? COLUNA 22: [inaudível] ROB: Yeah. Devemos usar algum tipo de laço. Como o usuário pode digitar algo inválido uma quantidade incontável de vezes. Então você pode usar um loop while. O objetivo de um laço do-tempo - literalmente, a única vez em suas vidas inteiras que você nunca vai usar do- while é quando você está pedindo a entrada do usuário. Então o fato de que estamos pedindo a entrada do usuário aqui é uma dica de que devemos usar um loop do-while. E por que isso? Porque do-while sempre acontece pelo menos uma vez. Então, quando você está pedindo a entrada do usuário, você quer que isso aconteça pelo menos uma vez. E então, se as coisas eram bem sucedido, você pode continuar. Se não, vá para trás e perguntar novamente. ALI: Então, em outras palavras, nós temos que fazer seção. E assim, este é dizendo a ele para fazer algo. Então printf - imprimir o extrato, o prompt, e também obter o personagem, ou a tentativa de obter um personagem. E depois temos que verificar se ele realmente fez isso corretamente. Então nós adicionamos as condições, então dizemos tempo, e depois temos a instrução condicional. ROB: Mas agora inverteu a linha de pensamento. Agora que originalmente estavam dizendo se c é neste intervalo, ele é válido. Agora queremos que inverter e dizer se c não é nesta faixa, então nós precisamos voltar a fazer as coisas de novo. ALI: Ah, sim. ROB: Então, enquanto isso não é verdade, nós queremos voltar e pedir para outro personagem. Será que todo mundo vê isso? Perguntas sobre isso? Okay. Então, agora temos um personagem válido que podemos maiúsculas. ALI: Então, o que o próximo passo para mudar pra maiúsculas isso? COLUNA 23: Adicionar 32. ALI: Você adiciona - Desculpe, o que? COLUNA 23: Você não pode simplesmente adicionar 32? ROB: Então, sim, e não em termos de números de mágica. Você só deve estar usando uma única citação coisas. COLUNA 23: Ok, bem - Rob: Mas você pode obter 32 - ALI: Como você conseguiu o número 32, eu acho, é o que estamos dizendo. COLUNA 23: [inaudível] ROB: Então podemos chegar com o número 32 junto - COLUNA 23: [inaudível]? ROB: Yeah. Mas se nós vamos fazê-lo em duas etapas que fizemos antes com as coisas posição. Portanto, a posição em que o alfabeto c passa a ser menos c é minúscula 'A'. Então, se entramos em uma minúscula 'd', a posição vai ser 3. E agora queremos levar as coisas para o intervalo maiúsculas de coisas. Então, agora a nossa nova c vai ser a posição do 'A' maiúsculo plus. Então, as pessoas ver como é que nos traz - estamos mudando a partir do intervalo minúsculas, a profundidade exata em que estávamos intervalo, e descer para o intervalo em maiúsculas, e indo tão longe para ele novamente, o que vai ser o mesmo personagem, mas agora maiúscula. ALI: E para as pessoas que foram confundidos pela forma como ele disse apenas 32, basicamente, ele combinou ambos em um comunicado. Então uma maneira equivalente de escrever isto para dizer que você pode apenas uma espécie de posição substituto, o c menos 'um', e colocá-lo aqui. Então, o que ele fez, eu não - newc de char = maiúscula "A" mais c menos minúsculas 'a'. E por causa da álgebra, você pode movê-los. Você também pode dizer que você pode movê-la para carbonizar newc = maiúscula "A" menos minúsculas 'a' mais c. E isso, você vai perceber se voltar para o gráfico. Nós temos letras maiúsculas de minúsculas é de 65 e um é de 97. Então, 65-97 é -32. Oi. Sente-se. Oh. Você pode sentar aqui. Legal, tudo bem, maravilhoso. Bem-vindo à seção. Você notará que a diferença é de 32. Então é aí que ele tem esse número. Mas não é, como Rob diz, a melhor maneira de fazê-lo, porque tem o estranho confusão número mágico. ROB: Você deve usar o capital Um minúsculas menos um. Você não deve utilizar apenas em linha reta 32. COLUNA 24: Por que é que, de novo? Por que você não deve usar 32? ALI: Se fizéssemos isso, seria de char newc = -32 + c. E se você não ver qualquer parte do resto do mesmo, se esse se foi, e você basta ver esta única linha, então como você sabe o que o 32 é negativo? É apenas fora do lugar. ROB: Então seu programa iria funcionar completamente bem. É só uma coisa de estilo. Alguém entrar e ler o seu código, eles são como o que significa 32? Talvez eles não - Eu provavelmente não iria perceber imediatamente que 32 passa a ser diferença entre uma letra minúscula e uma letra maiúscula, embora vamos usar esse fato no próximo problema. 32 é - Você pode deixar um comentário acima dizendo que 32 é a diferença entre 'A' e 'um'. Mas nesse ponto, por que não usar 'A' e 'a', e você não é necessário o comentário em seguida. ALI: É apenas as formas acima dele são muito mais limpo, estilo-sábio. E assim, a programação já que você está apenas começando - ou eu acho que não, já que você é edi hacker - nunca mente. É apenas uma boa maneira de ter - é melhor ter um melhor estilo. É mais fácil para outras pessoas a ler. ROB: Você nunca deve precisamos lembrar a tabela ASCII, nunca. Você deve apenas ser capaz de usar as aspas simples. Perguntas? ALI: Todo mundo bem? ROB: Okay. Assim, o problema seguinte é substancial. Assim, o próximo problema nos pede - ALI: O problema seguinte é pedir-nos para fazer a mesma coisa, mas de usar operadores bit a bit. ROB: E, claro, nós não vimos ainda operadores bit a bit. Então, vamos agora discutir os. ALI: Ser animado. Eles são super divertido. ROB: Então os operadores regulares, como x mais y, subtração, multiplicação, divisão. ALI: Escreva-lo neste prompt. Rob: Há também%, se você ainda não viu, que você pode usar pelo por cento de símbolo. Mas não vamos usar aqueles para este problema. Queremos usar operadores bit a bit. Agora lembre-se, que trouxe em uma palestra. Eu não tenho certeza se temos discutido binário além disso. Mas lembre-se que cada número único é representado - bem tudo, - está representada em 1s e 0s em binário. Então isso significa que quando eu digo que o número 8, acontece que eu sei que isso é como, 1000. Operadores bit a bit o que vamos fazer é operar sobre esses bits - se operar sobre estes bits diretamente. Agora estou mais lidando, em termos de oito. Estou lidando, em termos de 1000, e eu quero fazer as coisas com os bits individuais. Então, Ali escreveu os operadores bit a bit aqui, mas isso é - O número 8 nós vamos usar como um dos números de nosso exemplo. E a representação binária é 1000. Vamos usar outro número, 5 - realmente vamos usar 9 e 5. E a 5 de representação binário é 00 - 0101. ALI: É bom todo mundo sobre isso? O material binário? Foi a partir da primeira palestra? ROB: Assim, mesmo se você não está totalmente em cima de como converter as coisas binária, isso não é inteiramente importante para este problema. Nós vamos usá-la, mas você terá muitas chances mais para descobrir como rapidamente transformar as coisas em binário. Então, usando 9 e 5, agora temos os nossos operadores bit a bit. Ah, e também, 9 e 5, se for um número inteiro, então realmente é 32 bits, que significa que temos como 0, 0, 0, 0 um monte de vezes, em seguida, 101 no fim. Isso é apenas porque, não importa o que você faz, em números inteiros, de 32 bits. Só porque nós só precisa de quatro bits para representar 9 não significa que não somos utilizando-se os outros 27 bits para apenas 0s. ALI: Só para esclarecer, um destes números que um 0 ou um 1 é um bit. Este é 4 bits. Como tantas Rob disse que as máquinas de armazená-los em 32. Então eles teriam 32 de um 0 ou um 1. Cool? ROB: Os operadores bit a bit. O primeiro que vamos tratar, vamos fazer e. Então, se fizermos 9 e 5. Então, o que faz é e, pouco a pouco, ele compara os bits dos dois números e se ambos os números são 1, então ele irá retornar um 1. Se a pessoa é um 0 e o outro é um 1, ou ambos são 0s, em seguida, ele retorna um 0. Assim, você pode pensar nisso como seus ANDs lógicas. Como você precisa de verdade e verdadeiro para retornar verdadeiro, mas o verdadeiro eo falso é falso. Então é a mesma coisa, mas agora estamos lidando com isso com apenas bits. ALI: Então, se você olhar para isso, você vai ter um - você alinhá-los, por isso vai ser 1 e 0. Vocês acham que seria - o que teria que avaliar para? COLUNA 25: 1. ALI: Cool. Ou não. Desculpe. Então, isso faz sentido? Então, qual é a resposta coletivo de novo? Desculpe. Então, se temos 1 e 0, então o que você ganha? ROB: Então você acha de como você diz e em voz alta. Se tiver dois bits, x e y, é preciso x e y ser 1, a fim de que para avaliar a verdadeira - ou, para que ele para avaliar a 1. Se x ou y são 0, em seguida, ele avalia como falso ou 0. LUCAS: É bom lembrar também que um é verdadeiro e 0 é falso. Então se você tem verdadeiro e falso, é falso. Mas, então, verdadeira e verdadeira, é verdade. Falsa e falsa, falsa. ALI: Temos verdadeiro e falso. Assim, 1 e 0. Então, novamente, desculpe, mais uma vez? COLUNA 25: Seria 0. Sim, legal. E então nós temos 0 e 1 - COLUNA 25: [inaudível] ALI: Yeah. Assim, você pode sempre trocá-los - Então, se você tem 0 e 0? SPEAKER 4: 1? 0? ROB: Então é 0. Não é que os dois números tem de ser o mesmo. É que ambos os números precisam ser 1. ALI: Assim, ambos tem que ser verdadeiro para que ela seja verdadeira. Então, isso é 0. E então você tem um 1%, o que é? ROB: Estes números são muito bons. Eles têm todo o possível - ALI: Bom trabalho, wow. Ok, legal. Então, isso faz sentido para todos? ROB: Então agora vamos fazer |. E isso vai ser muito semelhante, mas agora, em vez de x e y a necessidade de ser de 1 para que ele para avaliar a um, agora é só x ou y tem de ser 1. ALI: Então 1 | 0 avalia - CLASSE: 1. ALI: Cool. 0 | 1 avalia - CLASSE: 1. ALI: Legal, e em seguida 0 | 0 - CLASSE: 0. ALI: Sim, e depois 1 | 1 - CLASSE: 1. ALI: Cool. Então, isso é como dois operadores bit a bit. Impressionante. ROB: Então agora vamos fazer ^. ALI: Devemos fazer todos eles? ROB: Sim, porque eu acho que nós vamos usá-lo - utilizando todos eles. ALI: Okay. Então - ROB: Eu acho que não precisa. ALI: Então ^ obras em que você tem que ter exatamente uma verdadeira e uma falsa. ^ Significa OU exclusivo. Então agora não é - Se x e y são ambos 1, agora é falso. Essa é a diferença entre ^ e |, é que OU, você pode ter, se x é verdade ou y é verdadeiro, então estamos bem. Não, ^ diz que se X é verdadeiro, y deve ser falsa, ou então não é verdade. Você tem uma pergunta? COLUNA 26: [inaudível] ALI: Yeah. É uma espécie de similar. ROB: Sim, por isso, quando você chegar a esse material de hardware de baixo nível, estes são os tipos de operações que você está lidando. Ao nível do hardware, você só vai lidar com bits. Você não lidar com números. ALI: Ok, para ^, ou se você tem um ^ 0, o que deve avaliar para que? CLASSE: 1. ALI: Cool. Se você tem 0 ^ 1? CLASSE: 1. ALI: Cool. 0 ^ 0? Cool. E, em seguida, 1 ^ 1? CLASSE: 0. ALI: Cool, impressionante. O próximo - ROB: Eu acho que estes são tudo o que temos de lidar. Só vamos fazer isso. ALI: A única vez que vamos ter de fazer - ROB: Oh, que o será para o último problema. COLUNA 27: Espera, mais uma vez? ALI: Desculpe, o que foi a sua pergunta? COLUNA 27: Você pode explicar isso mais uma vez? O ^? COLUNA 27: exclus - sim. ALI: Então, o que é exclusivo ou meios que tem que ser exclusivamente uma falsa verdade e uma, de forma um 1 e um 0, contra a OR, você pode ter - um deles tem que ser verdade, ou de ambos pode ser verdade, pois para avaliar a verdade. COLUNA 27: Então 0 e 0 seria falsa. ALI: Yeah. Mas se você tem uma | 1, que iria avaliar a verdade. Mas se você tem uma ^ 1, como nós, que avalia como false. Porque não é exclusivamente uma é verdadeira. ROB: E isso pode ou não ser útil, mas aviso que o ^ é igual a apenas tomando o | menos o &. E você pode realmente pensar desta maneira. ^ É apenas ORing tudo juntos, mas tirando qualquer um dos bits, onde ambos eram verdadeiras. Assim, e retorna tudo onde ambos eram verdadeiras. | Retorna tudo que um ou ambos eram verdadeiras. Assim, subtraindo que a partir da | dá-lhe a ^. ALI: Alguma pergunta? Este foi um monte de informações. Todo mundo bem? ROB: Podemos ir sobre os mais próximos para o próximo problema, slash que horas são? Eles não precisam disso até o próximo problema. ALI: Eu pensei que era um presente. ROB: Não é. ALI: Você tem certeza? ROB: Sim, eu sou positivo. ALI: Por que não começar a fazer o próximo problema? O problema é, mais uma vez, a mudar de minúsculas para maiúsculas, e este tempo para usar operadores bit a bit. ROB: Então nós - vamos começar com a representação binária de 'A', 'A' maiúsculo, que é 65. Assim binário em - para 'A' = 65, que é =, em binário - Eu vou estragar o número de 0s - isso. ALI: Então, isso faz sentido para todos? Então, 1, nenhum 2s, 4s não, não 8s, não - não 16s, 32s não, e depois um 64. ROB: Sim, eu acho que é uma 0s demais. ALI: Desculpe. ROB: Ok, então temos o conjunto de 64, e nós temos o conjunto 1, e combinando os juntos, nós temos 65. ALI: feijão frescos? ROB: Então agora, minúsculas 'a'- notar 97 - que é a diferença entre 97 e 65? COLUNA 28: 32. ROB: Yeah. Então é 32, que é o seu próprio pouco, de modo que vai ser 110001. E isso vai ser verdade para todos os possíveis caracteres. Então, se pensamos em 'D', que vai ser 68, que vai ser 1000011. E, em seguida, em letras minúsculas 'd' vai ser 68 plus 32, que é de 100, o que é vai ser a mesma coisa que esta foi, apenas lançando o 32 outra vez, assim 1100011. Assim, a diferença entre uma letra maiúscula e minúsculas está apenas lançando que 32 bits posição. COLUNA 29: Não é 1000100? ROB: Espere, é 100 - algo que eu fiz de errado. Isso não era verdade. Eu estava pensando que era uma diferença de 3, então eu apenas preso o binário 3 na extremidade. Este deve ser o certo. ALI: Obrigado. Bom para apontar isso. Isso foi nítido. Tudo bem, está claro para as pessoas? ROB: A diferença entre a versão em maiúsculas e minúsculas é sempre só vai ser 32, e por isso sempre vai ser um único bit que tem de ser virado para mudar entre os dois. ALI: Então, nesse caso, saber a diferença entre a capital A e a minúscula um é uma coisa boa. Não em seu código, mas conceitualmente, pelo menos, é bom. Então, vocês podem ir em frente e código que nos Espaços agora. Ou devemos apenas discutir isso? ROB: Nós podemos apenas discutir o assunto. Eu não sei. Vocês podem tentar. Falar entre si por um pouco. Nós vamos dar-lhe uma chance de codificá-lo. [Interpondo VOZES] ALI: - é legal COLUNA 30: Isto é como comédia hacker. ALI: Sim, estamos apenas dizendo a notícia, passando por isso. Rob: E estamos de volta. ALI: Isso é meio estranho. Eu sinto que nós devemos ter uma estação de notícias CS50 e poderíamos realmente sentar-se assim. ROB: Hacker News. ALI: Hacker News 50. ALI: Sinta-se livre para fazer qualquer pergunta se você está confuso. ROB: Alguém está preso? ALI: Sim, isso é uma coisa boa. ALI: Espera, você está preso em sua cadeira? Oh. Eu estava um pouco preocupado. ROB: Porque eu só percebi que vamos querer outro operador bit a bit. Por enquanto, vamos apenas converte maiúsculas em minúsculas. ALI: Desculpe, mas se todos se que o anúncio? Nós estamos indo para ir de maiúsculas para minúsculas. ROB: Então vamos discutir minúsculas para maiúsculas logo depois. Oh, não. Temos um bug no presente, que, eu acho, nunca tentou fugir. Que é apenas isso char c precisa ser declarada fora do circuito, porque seu escopo é restrito no circuito. COLUNA 32: Neste caso, é errado usar um número? ROB: Eh, você não precisa. Se eu garantiu que o capital 'A'- ou, minúsculas' a 'capital menos' A ' era exatamente um pouco, mas que você não sabe que é 32 - as coisas iriam funcionar tão bem se fosse o de 16 bits que foi virado - ou não, eu acho que wouldn't - ou o de 64 bits foram capotou, possivelmente. Mas você não precisa usar 32. Você poderia usar minúsculas 'A' 'a' capital menos. COLUNA 32: Okay. O que você pode fazer se você sente como se estivesse escrevendo demais é que você pode defini-lo na parte superior. Assim, você pode ser assim, a diferença int = minúsculas 'A' 'a' capital menos. E então você pode digitar diferença em seu lugar. Isso é válido. Mas apenas usar o número 32 é uma espécie de - COLUNA 33: Mesmo que seja por causa do fato de que é o de 32 bits? ALI: Yeah. ROB: Não poderia ser - a única garantia que precisamos fazer é que a diferença entre o minúsculas e maiúsculas é um pouco. Não deve importar que ele passa a ser o de 32 bits que está capotou. Por considerações de tempo, vamos começar a ir por isso. Tudo bem se você não tiver terminado. Não se preocupe com isso. ROB: Supondo que c é uma letra maiúscula - não temos de assumir c é uma letra maiúscula. Sabemos c é uma letra maiúscula após este loop while - do-while. Então, isso significa que é algo como isto "A". Então, se nós queremos levar este 'A' a este 'a', o que precisamos fazer? Então, como vamos converter e virar a pouco? ALI: Como é que vamos lançá-lo? ROB: Então, nós sabemos que queremos inverter a 32 bits. Então que vai fazer 'a' menos 'A', ou podemos escrever 32, mas - Droga, é o contrário. ALI: Ok, Rob aqui está cálculo do número, número mágico 32. Então, ele está descobrindo onde essa área pouco aleta seria. E então o que é que vamos colocar, onde os pontos de interrogação são? ROB: Como é que vamos virar essa parte? Em termos de letra maiúscula, é a 0, e queremos nos tornar um 1. COLUNA 34: |. ROB: Yeah. Portanto, esta é-nos a dizer que tomar 'A'. Estamos ORing com 0 - 1000 - e que = isso. ALI: Isso faz sentido para todos? Podemos passar por isso, pouco a pouco, se quiser. COLUNA 35: Você é [inaudível]? ALI: Onde está o sinal de menos? ROB: Ah, você quer dizer aqui? ALI: Ah, sim. ROB: Então eu acho que isso é a gente. Poderíamos dizer 32, e agora nós estamos apenas usando os operadores bit a bit. ALI: Nós não gostamos de números mágicos. Nós não vamos fazer isso. Também acho que devemos usar apenas um operador bit a bit - COLUNA 36: Se você usar um ^ A, você vai obter 32? COLUNA 37: Sim, eu acho - ROB: Sim, você vai. ALI: Isto é como você teria feito isto para ir do capital para minúsculas. Agora alguém pode me dizer por que Rob e eu mudei o prompt e como fomos maiúsculas das minúsculas, em vez de minúsculas para maiúsculas, como fizemos antes? Alguém tem alguma idéia de por que isso pode ser mais difícil? ROB: Então nós faríamos - ALI: Sim, vá em frente. COLUNA 38: O operador | era apenas realmente bom para somar. ALI: Sim, exatamente. ROB: Então, o que nós queremos fazer na minúsculas para maiúsculas caso é, converter essa a''- por isso queremos colocar em alguns números aqui e usar algum operador para que ele vem para capital de A. Nós ainda estamos usando provavelmente 32 de alguma forma, mas agora como é que nós chegar a este sair para isso? Então c - oh, eu ainda quero que também - ALI: Então agora, se está convertendo de minúsculas para maiúsculas novamente, então nós fazer a operação ^, como vocês disseram. ROB: Há outras maneiras de fazer as coisas. Um monte de operadores bit a bit acabar sendo muito facilmente definível em termos de outros operadores bit a bit. Então, eu estava indo para não usar ^ ou em tudo, mas ^ funcionou perfeitamente bem. ALI: Ok, então nós estamos indo para ir no último problema, que é a base - o último problema é converter algo em binário. Assim, por exemplo, você tem 50, e depois convertê-lo para binário, que é 110010. E eu acho que vocês todos conhecem binário de aula. E você também não devem colocar qualquer 0s líder para ele. ROB: Você pode ignorar essa parte para agora. O primeiro passo, você pode fazê-lo de modo que não são 0s principais. E então nós podemos modificar essa não ter 0s líder, se tivermos tempo. ALI: Então não se preocupe com isso. Basta tentar entrar em binário. Um bom lugar para começar seria - ROB: Nós precisamos de pedir um inteiro. ALI: Ah, sim, isso é uma boa. Podemos começar com isso. Assim você pode mudar o prompt. Então, ao invés de um personagem, agora que estamos a lidar com números inteiros. Cool? ROB: E agora o que é nosso do-while condição vai ser? Ele está pedindo um número inteiro não negativo. ALI: Quando queremos manter avisar o usuário para outra coisa? Quando ele é menor do que 0. ALI: Certo. ROB: Enquanto eu for inferior a 0. ALI: Agora queremos convertê-lo. Vocês têm alguma idéia do que fazer? Qualquer inklings? Sim. COLUNA 39: Nós temos que convertê-lo, ou podemos simplesmente imprimir algumas 0s e 1s que seria o número correto? Você poderia fazer um loop e contar por potências de 2? ROB: sim. Você não precisa converter i ao seu binário - a representação binária de i não vai caber dentro de i. Você só precisa imprimir a representação binária de i. ALI: Em outras palavras, você não precisa ir por potências de dois. ROB: Porque eu já está sendo armazenados como binários, assim você não precisa convertê-lo em binário. Basta ir sobre o seu binário, e imprimi-lo. E você vai precisar usar bit a bit, porque você quer olhar para os bits reais. Você não precisa usar bit a bit, mas por favor. E isso é verdade - você só pode fazer potências de dois multiplicando por dois. Nós vamos passar por cima de um dos últimos dois operadores binários bit a bit, que é um presente. Então, quando você tomar - ALI: Você pode passar os dois? ROB: Yeah. Então vamos com 9. Assim deslocamento esquerda 9 1 - o que deixou meios de deslocamento é simplesmente mover todos os bits para a esquerda e para inserir um 0. Então, nós estamos movendo todos os bits de 9 para a esquerda posição, o que nos dá - Então, observe que mudaram tudo saiu um, e inserido um 0 no lado direito. Se tivéssemos deslocado para a esquerda por dois, que mudaria tudo saiu por dois, e inserir dois 0s para preencher as lacunas. Pergunta? ALI: Então deslocamento para a direita faz uma coisa semelhante. Se você tem um deslocamento para a direita 9, então você está apenas movendo tudo para à direita, você perde um dígito, para 100 em vez. ROB: Então você é bom que você está perdendo o pouco que passou a ser tudo o caminho para a direita. Existem diferentes tipos de mudanças certas, mas, basicamente, você pode pensar deslocamento para a direita como apenas dividir por 2. E você pode pensar de deslocamento à esquerda que multiplicar por dois. Então, se você converteu isso - se você converteu nove turno 1, que é igual a 10010, se você realmente passou através do binário e descobri o que era, que seria apenas 18. Nós só multiplicar por 2. 1001 desvio para a esquerda duas vai ser 36. Nós multiplicamos por 4. Ok, legal, de modo que é um operador bit a bit útil para este. Mais confusão? Vocês querem experimentá-lo? Ou podemos simplesmente saltar para a direita e iniciá-lo? ROB: Nós provavelmente deve saltar para a direita dentro ALI: Sim, está bem. Rob: E atravessá-la juntos. ALI: Bem, eu vou entrar nisso. Assim como disse no início, vamos apenas passar pouco a pouco. Então, nós vamos precisar de um loop. Alguém tem uma idéia do melhor tipo de loop para passar por isso? Temos laços while, do-while, loops. COLUNA 40: Do-while? ROB: Então lembre-se do que eu disse antes sobre, estamos apenas usando-enquanto loops para obter entrada do usuário. Você nunca vai muito bem sempre usá-los para qualquer outra coisa. ALI: O problema com loops do-while é que faz alguma coisa antes que verifica a condição. Assim, poderia fazer algo de ruim - gosta, machucou - fazer algo que não é possível. Então você quer verificar primeiro. ROB: Há um monte de casos em que você pode usar loops do-while, mas as pessoas não esperam que você usá-los a menos que seja a entrada do usuário. Então, nós temos usado a nossa loop do-while para obter i. Quantas vezes é nosso laço vai querer loop? Queremos loop sobre cada um dos bits de i. Quantos bits estão em i? COLUNA 41: 32. ALI: Yeah. ROB: Então há 32 bits. Nós não queremos dizer 32. Nós em vez quero dizer sizeof - que, você já viu que em sala de aula ainda? ALI: Nope. ROB: Por que dizer que usar - sizeof (int) vezes 8 - ALI: Então, sizeof é - COLUNA 42: [inaudível] ALI: Interessante. Então, sizeof é uma função incorporada C, onde ele apenas diz que o número de bits de in - ROB: Bytes. ALI: Bytes, desculpe - o número de bytes que uma variável tem para armazenar um valor. Então, eu acho que ele foi em classe, em seguida, um int é de 4 bytes talvez. Cool? ROB: Mas você não precisa saber que um int é de 4 bytes. Você deve ser capaz de dizer - você deve usar sizeof (int) para obter 4 bytes. E isso é realmente importante para algumas coisas. Um int não pode ser de 4 bytes. Em outro computador, um int pode ser de 8 bytes. Portanto, o seu programa não vai funcionar no computador, porque você hard-coded 32 bits quando no computador passa a ser de 64 bits. ALI: Então você tem o número total de bits que você quer que ele se inverta. ROB: E a diferença entre um byte e um bit é que há são de 8 bits num byte. Então, sizeof (int) retorna 4 bytes, então temos que multiplicar isso por 8 para obter 32 bits. ALI: Ok, então nós sabemos que o máximo e sabemos que quer ir de - queremos passar por todos eles. Então, nós queremos ir de 0 a numBits. Então, alguém sabe como escrever o loop para isso? Alguém? COLUNA 43: [inaudível] ALI: Então você quer atravessar o número i do bit 0 para o primeiro bit, o bit de segundo, o terceiro bit, todo o caminho para numBits. O número máximo de bits que você pode chegar. ROB: O que é o laço comum que usamos o que nós queremos fazer algo x vezes? ALI: Para. Perfeito. Então temos para. E então nós vamos criar um iterador, que não vai ser eu. ROB: j. ALI: J = 0. Então, vamos começar do 0. E então nós vamos ter a condição para ter certeza, quando você estiver passar por ela a cada momento - [Interpondo VOZES] ROB: j. ALI: j é menor do que numBits. Então nós não queremos fazer o real é igual a um, porque eles são numBits total, e nós começamos a 0. Então, nós estamos realmente vai ter - COLUNA 44: Ah. ALI: Os índices de não terminar em numBits menos 1. ROB: Nós rotular os bits de 0 a 31, nós não rotulá-los 1 a 32. ALI: E então nós estamos indo para incrementar cada vez por um, porque queremos verificar cada um. Então vamos j + +. COLUNA 45: Por que está fazendo isso? COLUNA 46: Por que você está passando por todos os bits? ROB: Então, nós queremos passar por cada bit e - Então, vamos dizer que temos algum número. ALI: 68. ROB: Podemos usar 68. Assim, o binário vai ser 100100. Portanto, esta é dentro de i, e queremos passar por cima de cada um desses bits. É um 1? Imprimir 1. É um 0? Imprimir 0. Então vamos para a próxima. É um 1? Imprimir 1. É um 0? Imprimir 0. ALI: Cool, ok. Agora estamos no índice correto para onde é que pouco. Como podemos verificar que uma específica? Vamos dizer que estamos em j = 0, por isso queremos verificar o índice 0 do bit. Assim, neste caso, esta. Então agora como é que vamos verificar - oh, seria este. ROB: Yeah. ALI: Desculpe. Como poderíamos ir sobre a verificação de que um, em um sentido? Como podemos verificar se é um 0 ou um 1? Bem vamos - CLASSE: E 1? ALI: E? Sim. ROB: Então, vamos dizer que já temos um. Em seguida, este e, este voltará se era um 1 ou um 0. ALI: Então podemos ir para baixo. E nós podemos fazer como vocês disseram, de fazer o & função. ROB: int - como é que eu quero dizer isso - Isone = i. E para o primeiro bit que estejamos olhando, estamos fazendo i & 1. Agora o que vamos querer e por pouco para o segundo? COLUNA 47: 2. ROB: Sim, o segundo que estamos no 2. ALI: Você vai perceber que o 1 foi transferido para a esquerda. Então, nós aprendemos todos os operadores bit a bit para fazer essa função? ROB: O próximo - ALI: Sim, certo, exatamente. Portanto, é um desvio para a esquerda. Em vez de sempre verificar com um, vamos mudar isso. E quantas vezes é que vamos mudar isso? Se estamos verificando a um 0, então nós estamos indo para movê-lo sobre zero. Sim, exatamente. Então você deixou transferi-lo por j. Perfeito. Portanto, agora sabemos - temos esta int se é um, e então - assim tipo de Rob de trapaça aqui - e agora ele estava indo em frente e que ele está apenas dizendo que se ele realmente é 1, porque um avalia a verdade, por isso não tenho que dizer isf Isone é igual a 1 - por isso, se Isone, imprimimos um, e caso contrário, imprimir 0. ROB: Então o nosso programa tem um bug geral. Bem, perguntas sobre isso primeiro. COLUNA 48: Será que você consegue colocar o Isone dentro da parte de operação de quatro e depois tê-lo mudar-se como a última parte? Assim Isone é igual a 1 e, em seguida, - ROB: Sim, você pode. Nós podemos realmente mostrar que uma vez que corrigir o erro que eu estou a ponto de discutir com todos vocês. Observe a ordem vamos sobre as coisas. Dada esta representação binária, estamos começando com o bit 0. Se for um 0, então estamos imprimindo - bem, é um 0, por isso estamos imprimindo 0. Então vamos para o segundo bit. Ele é um 0, então imprimir 0. Então vamos para o terceiro bit. Ele é um 1, então imprimir 1. ALI: Então vai para trás. Então, como é que vocês sugerem que corrigir isso e ir por outro caminho? COLUNA 49: [inaudível] ROB: Yeah. Então, em vez de ir de 0 a numBits, vamos a partir de pedaços numBits a 0. ALI: Então [inaudível] sempre pode ir por outro caminho. ROB: NumBits menos 1, porque essa é a última nubmer - ALI: Porque ele vai de 0 a 31. E então nós vamos sempre ter certeza de que ele é maior do que 0, assim você não vai muito longe para a direita. E então você sempre subtrair 1 para ir para a direita. ROB: Então agora nós temos um ciclo inverso, eo número é de volta para impressão de forma correta. COLUNA 50: Você não tem que mudar a coisa mudança também? ALI: Então, não. ROB: Estamos fazendo as mesmas operações exatas, só que agora na ordem inversa. Então, ao invés de fazer a mudança por numBits menos 1 para obter o que quer que isso bit é, em vez de fazer esse último, vamos fazê-lo primeiro. Ao inverter isto aqui, nós inverter a ordem de tudo o que acontece lá dentro. Mas nós não queremos mudar o que acontece dentro de todo. ALI: Será que faz sentido? Processamento? Ok, então se alguém tiver quaisquer outras questões conceituais? ALI: Antes de ir para seu ponto que é - ALI: Tudo bem, bem ir. Rob: Em vez de usar j para ser nosso - em vez de usar j para sempre mudar por, como um j desvio à esquerda, eu acho que o que você está dizendo é como, para j usar em si. Assim, para j - Eu acho que essa é a dura - j = 1 << 31. É isso o que eu quero? Eu acho que é << 31. j> = 1. j >>, >> Isone, I & J - agora em vez de usar - ALI: Você está constantemente em movimento j em vez de ter um índice para verificar isso. Não é tão ruim assim. Estamos usando um tipo similar de lógica. Então, se você voltar - oh, mas vai perdê-lo. Ok, você está indo só para digitá-lo novamente. Se você perceber que temos uma quantidade j << vezes, e nós estávamos j incrementando cada vez em um incremento, mas desta vez em vez eles estão fazendo o incremento de j no topo dentro do loop for. Então, ao invés de sempre se movendo para baixo - ROB: A primeira iteração do loop for, temos j é 10000. A próxima iteração do loop é 01000. A próxima iteração é isso. E o 1 está indo só para manter propagação para baixo até que chegamos ao muito final, onde agora é isso. O próximo, o 1 que vai ser empurrado para fora, e j não é mais maior que ou igual a 1. Eu também poderia colocar maior que 0 diferença, mesmo. E então é isso. Perguntas? Sim. COLUNA 51: [inaudível] ROB: Então, isso é o mesmo que - você já viu j + = 3? Portanto, este é o mesmo que j = j + 3? Você pode fazer isso para praticamente qualquer operador no C. Então j >> = 3 é igual a j = j >> 3. Assim que funciona também com operadores bit a bit. E eu não deveria ter colocado 31 aqui. Eu deveria ter colocado numBits - 1. ALI: Yay, não há números mágicos. Ok, é 4:00, porém, assim se vocês têm que ir - mas isso faz sentido? Vocês têm alguma pergunta? ROB: Eu também estava indo jogar em que se queria - tem ele discutiu operador ternário em tudo? ALI: Não. Está tudo bem. ROB: Então, você poderia olhar para ele para a próxima vez. ALI: Ok, realmente? Agora você está se exibindo. Rob: Não, agora é - isso é o que deixa as pessoas interessadas, e agora eles vão olhar para ele. Então, agora, que faz a mesma coisa, em uma única etapa. Então, primeiro verificar, é i & j 1? É verdade? Se assim for, imprima a 1, então, imprimir um 0. ALI: Mas fazer isso de outra maneira é perfeitamente bem. Tem a mesma lógica. Então não é como é - ROB: Neste ponto, podemos nos livrar dessas chaves, porque é só uma linha de loop. ALI: Ok, então isso faz sentido? Que era uma espécie de salto. Mas era apenas uma espécie de sintaxe, mais assim. Cool? Alguma outra pergunta? ROB: Tudo bem. ALI: Tudo bem, legal. Obrigado por ter vindo à secção.