[Powered by Google Translate] [SONIDOS ELECTRONICOS STATIC]
ROB: Bueno, ¿y qué nos trajiste a CS50 es Spaces.
ALI: Espera, espera de nuevo.
Bienvenidos a la sección!
ROB: Bienvenidos a la sección!
ALI: Yay!
ROB: supersección!
ALI: Soy Ali y esto es Rob.
Bien, ahora vamos a explicar Spaces.
ROB: ¿Y qué nos trajiste a CS50 es Spaces.
Usted va a utilizar mucho esto en las secciones de este semestre.
Básicamente, ya hemos tenido que bajar el aparato.
Y usted puede pensar CS50 Espacios como una interfaz web que habla de un aparato
que tenemos en algún servidor en alguna parte.
Así que usted puede ejecutar su código en este interfaz, y haremos
ver la forma de hacer las cosas.
También puede buscar en el código de otras personas en la sección, y -
ALI: ¿Y como algunas personas han descubierto, puedes chatear gente en el lateral.
Y todos lo verán, también, así que es emocionante.
Entra, ven y siéntate.
Toma asiento.
>> ROB: Así, las secciones son -
ALI: No, no, ustedes pueden venir.
ROB: Las secciones van a ser mucho más interactivo este semestre.
ALI: Oh, él es como -
Oh.
De acuerdo, genial.
Así que si ustedes apenas están entrando, usted puede ir a este enlace, si puedo conseguir
ahí, justo ahí.
En realidad, no puedo escribir, porque no hay espacio en la placa, pero en este enlace
aquí mismo, vaya a la de los equipos, y entrarás CS50
Espacios, lo cual es algo muy bueno.
Bien.
¿Tiene un problema?
ROB: Así que usted puede encontrar los problemas -
tenemos que ser capaces de escribir esto en alguna parte.
Así que si vas a cs50.net/psets y este es el supersección hacker -
y entras en la edición pirata de un conjunto de procesadores, vea la especificación
en algún lugar de la página -
>> ALI: Así que, básicamente, mientras que Rob está mirando, lo que vamos a hacer en
Hoy sección es hay una sección de problemas -
ROB: - en la página ocho.
ALI: - llamada sección de problemas -
ROB: Sección de preguntas.
ALI: Lo siento, una sección de preguntas.
Y esos son los que vamos a pasar -
esos son los que vamos a pasar hoy en la sección.
Y nosotros vamos a codificar en CS50 Espacios, y es de esperar que va a funcionar.
Y sólo podemos hablar a través de ellos.
Y ustedes pueden hacer preguntas cada vez que se siente -
>> ROB: Así que esto se está convirtiendo en algo común con la mayoría de conjuntos de procesadores.
Creo que con esto, se dice que usted no tiene que entregar estas preguntas pulg
Pero la idea es que estas cuestiones se ponen en el conjunto de procesadores, y usted puede venir
a la sección de tener esas preguntas.
O si usted no viene a la sección, usted puede responder por su cuenta o conseguir
ayudar a las horas de oficina o algo así.
Pero éstas son cuestiones que se supone que prepararte para el conjunto de problemas.
Y en la edición pirata, muchas de las preguntas podría ser de
la ampliación de su actual conocimiento CS.
ALI: Sí, bastante.
>> Bien, entonces, es que todos los espacios en CS50?
Hola, adelante
Ponencia 1: ¿Podemos ver la dirección una vez más?
Rob: Sí, esto será más fácil una vez que esté en sus secciones, y
la TF sólo puede enviarle por correo electrónico la URL de antemano.
ALI: Yay, tome asiento.
Hay asientos aquí.
El frente no es tan malo.
¿Qué?
Por lo tanto, CS50 Spaces, nos vamos acercando.
¿Alguien tiene alguna pregunta antes de entrar en - ¿qué?
ROB: No hay siquiera una tiza.
[Inaudible]
ALI: Lo siento.
Podrías usar tus uñas?
Estamos en una habitación muy baja tecnología para una clase muy alta tecnología.
Bueno, todo el mundo es una especie de bien?
¿Alguien tiene aún dudas sobre ello?
Como he dicho antes, vamos a ir a través de la sección de preguntas
las especificaciones PSET.
Así que sólo hay un par de problemas que vamos a
codificar en CS50 Spaces.
¿Están todos bien?
Bien.
¿Bueno?
ROB: ¿Tienes un ordenador portátil?
ALI: Puede pasar el rato con Lucas.
Está sentado a tu lado.
Vinculación tiempo.
>> ROB: Entonces, comience con el primer problema?
ALI: Si.
Podemos empezar.
¿Usted me quiere -
Puedo ir.
Por lo tanto, vamos a ir a las especificaciones PSET.
Oh, ¿por qué lo es -
ROB: Control.
ALI: Bueno, vamos a responder a estas cosas también?
ROB: Oh, sí.
Por lo tanto -
ALI: Oh, sí pantalones cortos protagonizada por todo el mundo reloj de Rob?
De acuerdo, genial.
Rob: Sí, no creo que nos espera necesariamente que usted tenga
lo vi antes de venir a esta sección, pero podemos discutir los
problemas de antemano, ya que están en la sección de preguntas cosas.
Así que si no lo han visto, no se preocupe.
Los que tienen pueden tratar de responder.
>> Por lo tanto, la primera pregunta, ¿qué es un pre-procesador, ¿cómo # include
relacionarse?
Así que ¿alguien tiene respuesta para eso?
ALI: Ustedes pueden hablarlo.
Claro, adelante.
Ponencia 2: # include es un código pre-escrito, y en lugar de
copiarlo y pegarlo en su programa, simplemente diciendo que incluyen,
el pre-procesador sabe que está ahí y que debería añadir en
más tarde o antes de que ocurra nada más.
ALI: Sí, impresionante.
Cool.
ROB: Entonces, cuando en realidad estás compilando un programa, el pre-procesador es este
primer paso.
Compilación ocurre en cuatro grandes pasos.
Así que el pre-procesador es el grande primero, y es este tipo que va
y busca a través de todos estos símbolos hash.
Y cualquier línea que comience con una almohadilla, el procesador pre-mira y ve
si se puede procesarlo.
Así que # include le dice al preprocesador para buscar alguna cs50.h
presentar y sólo tienes que copiar y pegar su contenido en este archivo.
Así que usted puede realmente # include lo que quieras, pero es en su mayoría va a ser
H. Archivos.
No hemos llegado a # define todavía, así que no importa.
ALI: Sí, somos buenos en eso.
¿Alguien tiene alguna pregunta acerca de eso?
¿Estamos bien?
Siguiente pregunta.
>> ALTAVOZ 3: En el fin, había algo en c también.?
¿Eso es relevante o es irrelevante?
ROB: Acerca de c con el pre-procesador.?
Ponente 3: Sí, o lo puedo hacer algo?
ROB: Así que el pequeño podría haber estado mostrando el preprocesado de este archivo y
. dar salida a otro archivo c, por lo que puede pre-procesar este archivo -
cuando usted acaba de funcionar como, hola o hacer hello.c sonido metálico, que está haciendo todo
la compilación en un gran paso.
Pero usted puede hacerlo de forma explícita en sus etapas separadas.
Así que primero se puede pre-procesar.
A continuación, puede compilar, entonces se puede montar, y entonces usted puede vincular.
Vamos a llegar a los otros.
Sin embargo, pre-procesamiento, que tipo de lo pre-proceso, y después de que entre en
otro. c archivo.
Debido a que pre-procesamiento en realidad no cambia nada.
Es sólo un montón de copiar y pegar.
Manualmente, puede copiar y pegar usted mismo.
ALI:. Y para ser claro, el archivo es un archivo c C, por lo que es
escrito en código C.
Así que va desde el código C a código C.
No eres más que añadir más código con la libra.
ROB: Cuando se pre-procesados, todavía es un archivo válido de C.
ALTAVOZ 3: De acuerdo.
ALI: Buena pregunta.
Eso me gusta.
Vale, siguiente pregunta.
>> ¿Cuál es el compilador?
¿Alguien?
Sí.
ALTAVOZ 4: Cambia el código de pre-procesado en el montaje.
ALI: Perfect.
ROB: Si.
ALI: Cool.
ROB: Así que eso es lo que el compilador está haciendo específicamente
cuando estamos usando Clang.
En un sentido muy general, un compilador es como si estuviera tomando el código en un lenguaje
y convertirlo en otro idioma.
Así que en C -
o, bien, Clang está tomando el código que está en C y transformarlo para el montaje.
Y que no tiene que ser capaz de entender el conjunto en absoluto.
Pero ese es el idioma que se está convirtiendo en lo.
>> ALI: Bueno.
Y entonces, ¿qué es un ensamblador?
¿Alguien?
ALTAVOZ 5: [inaudible] en binario?
ALI: Lo siento, ¿qué?
ALTAVOZ 5: [inaudible] en binario?
ROB: Yep.
ALI: Sí.
ROB: Así que el ensamblador -
código ensamblador es muy, muy cerca de lo que su computadora puede entender,
pero recuerda que no acaba de entender el texto
que es código ensamblador.
Es necesario que lo convierten en 1s y 0s recta.
Es como un proceso de traducción directa.
Podríamos darle una tabla que asigna lo que cada
instrucciones de montaje significa.
Sin embargo, el ensamblador está haciendo esto traducción para usted.
Se está transformando el código ensamblador en 1s y 0s.
>> ALI: ¿Y entonces, por último, ¿qué es un conector?
¿Y cómo-lcs50 relacionarse?
¿Alguien?
ROB: Este es el más difícil y por lo explicado en el vídeo un compilador.
ALI: ¿Alguien recuerda haber visto-lcs50 en un comando?
ALTAVOZ 6: Cuando usted fue a la marca.
ALI: Es en el hacer.
Sí, fresco y bien.
¿Hay alguna idea o vagos - Sí, vaya.
ALTAVOZ 7: No estoy seguro, porque su corto era realmente [inaudible], pero fue
algo acerca de hacer archivos separados con cada biblioteca y luego poner
todos juntos en una biblioteca?
ROB: Si.
Así que cuando usted tiene hello.c, es un programa muy simple.
Realmente estás haciendo sólo una cosa en él.
Pero cuando te metes en otros programas -
y creo que incluso cuando GetString en sus programas, que necesita para empezar
incluyendo otros archivos.
Así que la biblioteca CS50 es un fichero en el que tenemos las implementaciones
de GetString y getInt y todas esas cosas.
Así que lo que el enlazador que hace es que va por ahí buscando a través de todos estos
archivos, viendo donde se definen las funciones, asegurándose de que cuando llamo
GetString en algún lugar, sabe que GetString significa que es el
GetString más en la biblioteca CS50.
Así que el vinculador sólo toma todos estos archivos, rompe juntas, y ahora
Tiene un ejecutable.
Así que tenga en cuenta, si usted está utilizando la biblioteca CS50, es necesario tener las
# Include en la parte superior, y luego también en el comando make, como
Dicho esto, usted tiene que tener la lcs50-.
Así que no sólo puede tener uno.
Así que eso es algo a tener en cuenta para futuras consultas.
>> ALTAVOZ 8: Por lo tanto, vamos a decir que no había otra librería, como cs51.h, ¿nos
También hay que añadir-lcs51?
ROB: La única razón-lcs50 funciona a la perfección es porque no tenemos ese conjunto
en un lugar específico en sus aparatos para que sepa qué
-Lcs50 medios.
Podríamos darle un archivo cs50.c, y entonces usted puede compilarlo, diciendo:
Clang hello.c cs50.c, y entonces tendría su ejecutable poniendo
esos dos archivos juntos.
Sabe que-lcs50 significa cs50.c otra vez en algún directorio que se especifica en el
sus aparatos.
Así que si quería una cs51.c ser determinable por sólo decir-lcs51,
entonces también tendría que ponerlo en ese directorio para que sepa dónde
buscarla.
ALI: ¿Cuál es tu pregunta?
>> ALTAVOZ 7: ¿Por qué tienes que conectar el CS50
si - ¿no era que copiar / pegar en el primer paso cuando se pre-procesado?
ALI: ¿Quieres tomarlo?
ROB: Por supuesto.
Así el archivo cs50.h está separado de la cs50.c archivo C.
¿Has llegado a funcionar prototipos en clase?
Bien.
Así que, básicamente, el archivo cs50.h es sólo va a copiar y pegar -
ALI: ¿Ustedes saben lo que son las firmas?
Bien, así que más o menos, si nos fijamos en -
ROB: Vamos a fingir cs50.h no está allí.
Ahora este archivo -
que está haciendo GetString string s =.
Pero cuando hemos llegado a este punto en el código, no tiene idea de lo que
GetString es.
Se sabe que es una función, ya que lo está llamando.
Pero no saben que en realidad debe retornar una cadena.
Así que, como he dicho, string s = getInt, esto no tiene ningún sentido, ya que
que está firmando un entero a una cadena.
Pero no sabe que GetString tiene sentido, ya que no
Sabemos que GetString devuelve una cadena.
Así que lo que dice es cs50.h algo como esto.
ALI: ¿Así que lo que Rob está escribiendo es que es una promesa en la forma que se va a
tienen esta función llamada GetString.
ROB: Esto es todo lo que cs50.h es copiar y pegar aquí, así
como getInt y todas esas cosas.
Y esto sólo dice que GetString vuelve una cadena.
No sabes cómo está implementado todavía, pero cuando llegamos a esta línea, ahora
se sabe que devuelve correctamente una cadena.
>> ALTAVOZ 9: Así que si no nos molestamos con la cosa # include y en su lugar
acabo de escribir el prototipo de los que estamos en realidad va a usar?
ROB: Si.
Así que vamos a ejecutar este.
ALTAVOZ 9: ¿Lo es?
Así que, por defecto, lo haría el l-CS50 a sólo porque -.
ROB: - expresión.
ALI: Sí, porque como usted ha dicho, está en el archivo make.
ROB: cs50.h también pasa a ser * typedef char a string.
Usted puede ignorar lo que eso significa, por ahora.
Pero eso también es algo incluido en cs50.h.
Así que ahora todo funcionaba perfectamente bien.
Funciona exactamente igual que lo fue cuando nos tuvimos
el # include.
Y así como cs50.h sucede a un exceso de incluir cosas que usted necesita -
como, ya no usa el getInt en este programa, pero eso no importa.
Es simplemente lo ignoran.
ALI: Y luego, cuando haces el-lcs50 aquí y aquí, qué está pasando
es en que se trata de tener el código implementable real.
Así que ahí es donde está realmente, haciendo -
escribir el código para GetString.
Así que no es sólo una promesa más.
En realidad, es pasando y tomar la cuerda y todo eso.
Tiene sentido?
¿Preguntas? Está bien.
Cool Beans.
>> ROB: Ahora podemos pasar a código real.
ALI: Bueno.
Así que aquí está el primer problema.
Por lo que dice escribir un programa que pide al usuario una minúscula
letra y luego la convierte a mayúsculas sin usar bitwise
operaciones, de acuerdo con el resultado de ejemplo a continuación.
Así que usted puede ver, se ejecuta el programa con el. / A.out, y entonces estás
va a poner en minúscula, a continuación, el programa debe dar a conocer el capital
A. ¿Por qué no se van todos a darle un tiro en CS50 Spaces?
Así que ustedes pueden ir todos aquí.
Y usted puede eliminar todo el código aquí.
Y entonces usted puede seguir adelante y empezar a programar la cosa.
ROB: Usted probablemente querrá usar GetChar, eso es
incluido en la biblioteca CS50.
ALI: Supongo que podría ser mejor si se guarda la parte superior.
Así que es posible que desee cambiar sólo las cosas en el medio.
Seguir adelante y trabajar.
Siéntase libre para trabajar con otros.
Rob: Y usted puede hacer preguntas si usted tiene -
>> ALTAVOZ 10: ¿Qué es una operación bit a bit?
ROB: Entonces, pasar por alto que para este problema.
ALI: Si no lo sabe, eso es bueno.
ROB: Nosotros lo vamos a usar en el siguiente problema.
Pero si usted no sabe lo que es un operador de bits es, eso está bien.
ALTAVOZ 10: ¿Es como convertirlo a código ASCII?
ALI: No.
ROB: No.
Usted puede hacer eso por este problema.
ALTAVOZ 10: ¿Cómo se hace eso?
Así que si yo tuviera un lugar para escribir -
ALI: O algo con qué escribir.
ROB: Podría sólo un poco en este tipo.
ALI: Escriba en la parte superior.
ROB: Oh, estoy sentado en un micrófono.
>> Así, hemos visto en la conferencia que el valor ASCII de A mayúscula es 65.
Y el capital B será 66, y así sucesivamente.
Así que, literalmente, puede usar 'A' en el sentido del número 65.
Al igual, este es el valor 65.
Puedo hacer algo como int x = 100 - 'A'. Y ahora, x tendrá el valor
100-65.
ALI: Puede ejecutar y mostrar que eso.
Oh, tal vez no.
No importa.
ROB: tuve que imprimirlo.
ALTAVOZ 10: ¿Cómo se vuelva a personaje?
ALI: Así que si no -
que acaba de obligar a que sea un char, es igual.
ROB: Así que hay una -
la distinción entre un carácter y un entero es sólo en términos de tamaño.
Así que un número entero pasa a ser capaces de representar las cosas
a, como, cuatro mil millones.
Un char sólo es capaz de representar las cosas hasta 255.
Pero no hay ninguna diferencia entre ellos distinto de este.
Así que puedes decir char c = 65.
Eso es equivalente a decir char c es igual a 'A'.
ALI: Oh, no.
En realidad, no guardar cosas.
ROB: No, usted no puede hacer eso.
ALI: Eso es justo -
[Gemidos]
>> ROB: Está bien, así que lo que acabo de escribir Ali era un programa que primero imprime 100 -
'A' como un entero, que tenía 35 años, como esperamos, porque 100 menos el ASCII
valor de A es 65.
Luego se imprimen mediante% c, lo que significa que la interpretan como un char.
Así 100 - una es de 35.
Interpretar a un personaje que, como resulta ser el símbolo de hash.
Si nos fijamos en asciitable.com o lo que sea, verás que el 35 es el
símbolo de hash.
ALI: Bueno, cualquier aclaración sobre el otro problema?
Bueno, ustedes pueden ir adelante y hacerlo entonces.
No dude en hacer preguntas o hablar entre sí.
O si ya está hecho, usted puede relajarse.
>> LUCAS: ¿Son la misma clase, todas las letras minúsculas en orden y
también las mayúsculas también se encuentran en orden, porque eso es algo útil para
el problema.
ALI: Buen punto, Lucas.
Entonces, ¿ustedes todo eso?
ALTAVOZ 11: Sí.
Así es como lo haces, ¿verdad?
ALI: Así es.
ROB: Si.
ALTAVOZ 11: [inaudible]
ALI: Bueno.
ROB: ¿Cuál es la pregunta que pide?
Sólo para convertir -
ALI: Convertir las minúsculas a la mayúscula.
Eso es todo.
ROB: Muy bien.
ALI: ¿Hay que escribir?
Supongo que sólo tendremos que mirar de otra persona.
ROB: Así que para aquellos que puedan estar atascado, una manera -
si tengo algún char c, y decir que vamos a pasa a ser la letra D.
Así que ahora, ¿cómo puedo averiguar qué letra del alfabeto es C?
D No, pero quiero decir, D pasa a ser la cuarta letra del alfabeto.
Y si empezamos a contar desde 0, que es la tercera letra del alfabeto.
Así que si A es 0 y B es 1, C es 2, D 3, ¿cómo puedo averiguar la posición int -
cuál es la posición del alfabeto C es en?
¿Alguien tiene alguna idea?
ALI: Creo que todos estamos de codificación.
ROB: ¿Qué pasa con la primera?
ALTAVOZ 12: Así que lo que A es, restar la primera?
ROB: Si.
ALI: Sí, impresionante.
Por lo que podría hacer el capital D -
oh, lo siento.
Usted toma el carácter y se resta de la primera, como usted ha dicho.
ROB: Entonces, si D es algo así como 68, y restamos A, que es de 65, entonces obtenemos
3, que nos dice que D es la tercera letra del alfabeto
a partir de 0.
Así que usted puede utilizar eso.
Ahora sabemos qué letra del alfabeto, en términos de
letras mayúsculas, o -
podríamos hacer lo mismo con las letras minúsculas para averiguar qué
minúsculas posición que estamos metidos
Y podemos usar eso para convertir a mayúsculas después de que utiliza un
idea muy similar.
Pida sugerencias?
>> ALI: ¿Ustedes - espera, no sé hasta qué punto ustedes son.
¿La mayoría de los que has hecho, ¿sigues trabajando, ¿está atascado?
Ustedes pueden gritar -
atascado.
Una persona ha atascado.
Cool.
Tiendo a ser atrapado, también.
ALTAVOZ 13: Ya he terminado.
ALI: ¡Ya está?
Bien.
Hecho.
ALTAVOZ 13: [inaudible]
ALI: Sí, bien.
¿Está usted de comprobar que está en forma minúscula?
De acuerdo, genial.
¿Dónde están los demás?
¿Esta pista te ayude, como para sí mismo sin pegar?
ALTAVOZ 14: En realidad no, pero sólo porque, no sé, no estoy
digiriendo todavía.
ALI: Bueno, genial.
¿Quieres probar -
o quieres ir a hablar?
>> ROB: Lo que iba a decir es -
por lo que usar esto.
¿Entiende usted cómo llegamos cuál es la posición del alfabeto
la letra es en?
ALTAVOZ 14: De acuerdo, así que cuando usted pone las cosas en una sola cita,
que devuelve un número?
ROB: Si.
Se traducirá al valor ASCII que representa.
Entonces, ¿quieres ir a la tabla ASCII o lo que sea?
ALI: Sólo uno de estos?
ROB: Yep.
Así que cuando usted pone alguno de estos símbolos, haciendo caso omiso de una gran parte de la -
ALI: [inaudible]
ROB: Oh, utilizando el cursor.
ALI: Si.
Eso fue emocionante.
ROB: Así que, haciendo caso omiso de estos los de la izquierda, que son símbolos especiales -
si pones cualquiera de estos símbolos entre comillas simples, entonces será
convierten a este valor de la izquierda.
ALI: Esto es el número decimal de la misma.
Es como un partidos con 65, B 66, y te darás cuenta de que todos están en
orden alfabético, lo que hace la diferencia.
Así que, como dice Rob, antes, en ese código, estábamos calculando la distancia de
la primera letra, per se.
Y eso va a ser la misma, ya sea en mayúsculas o minúsculas.
ROB: Así que cuando hicimos D, 68 menos un 65,, obtenemos 3.
Debido a que D es de tres posiciones en el alfabeto.
ALI: Entonces, ¿cómo se traduce eso a encontrar el poco d?
ROB: Si.
Así que si tengo 3 ahora, sé que quiero ir tres letras en el -
nos ha tocado ir en minúsculas ahora, pero vamos a decir que quiero ir tres
posiciones en la parte minúscula de las cosas.
Entonces, ¿cómo puedo hacer eso?
Sé que es una minúscula 97.
Entonces, ¿cómo puedo encontrar tres posiciones en las letras minúsculas?
>> ALTAVOZ 15: Tengo una pregunta en realidad.
ALI: Sí, adelante.
ALTAVOZ 15: Así que por eso, en realidad no importa si conozco a esta posición,
gusta, yo no necesito esta tabla.
ROB: Nope.
Usted nunca tendrá que utilizar cualquiera de estos números.
Y este es un punto importante en sus programas que usted nunca debería duro
codificar cualquiera de estas constantes.
Use 'A'. nunca use 65 o 97.
ALI: Se llaman números mágicos, y son realmente confuso.
Al igual que, cuando se está depurando un código, es posible que no recuerde lo
usted los utiliza.
Y para nosotros clasificación de su código, no sabrá realmente lo que
usted los está utilizando para.
Así que es mejor si usted utiliza realmente los personajes por lo que tiene
más sentido para las personas.
Bueno, alguna otra pregunta?
¿Hay más gente hace, o -
Supongo que se puede comprobar.
Es realmente espeluznante que usted puede ver la gente.
ROB: Si.
Nosotros no tenemos que hacer eso aquí.
No sabemos los nombres de las personas, tampoco.
ALI: Ah, sí, bueno, eso lo hace mejor, así que vamos a ser aún más imparcial
en vez de escoger al azar a alguien.
No se preocupe.
No lo voy a hacer.
Si usted tiene las cosas al azar sobre - No importa.
Bien.
¿Qué están haciendo las personas?
>> ALTAVOZ 17: Así que la novena línea debe imprimir un personaje?
ROB: Si.
ALI: Si.
Así que si usted va abajo -
ROB: Oh, no puedo hacer eso.
ALI: Usted verá que imprime el símbolo de hash.
ALTAVOZ 17: Oh, está bien.
ROB: Supongo que de otra manera se puede ver las cosas es que estamos imprimiendo dos
personajes.
Primero que estamos imprimiendo es la letra A.
La siguiente es la impresión que estamos a sólo 65.
Probablemente voy a gritar a mí para estos.
Así que si nos basta con ejecutar esto, te darás cuenta de que se imprima A veces ambos.
Porque lo estamos preguntando lo mismo.
Lo estamos pidiendo para imprimir la letra A. Y entonces le estamos pidiendo que se imprima el
número 65 interpreta como un carácter, que es la misma cosa.
ALI: ¿Tienes algo que decir?
Oh, es broma, lo siento.
Muy bien, ¿cómo son las personas -
ROB: Se puede caminar a través de él.
>> ALI: Bueno, ¿cómo empezar?
¿Alguien?
Como sugerencia, tenemos que conseguir algo de las personas, de los typers.
ALTAVOZ 18: [inaudible]
ALI: Ah, sí, un perfecto sistema,.
Así que vamos a escribir -
¿qué tipo?
¿Alguien?
¿O debo escribirlo?
¿Estamos realmente escribiendo el -
ROB: Por supuesto.
ALI: Así que vamos a escribir un printf para estimular, para que podamos ser
gusta, me dan un carácter.
Bien, ¿y entonces qué?
¿Por qué está haciendo eso?
ROB: No lo sé.
ALI: Bueno.
Así que ahora, les estamos diciendo que nos dé un carácter.
Pero entonces, ¿cómo se consigue realmente ese personaje?
ALTAVOZ 19: GetString uso.
ALI: GetString?
GetChar?
Bien, ¿cuál es la diferencia entre una cadena y una charla?
ALTAVOZ 19: Las cadenas son una serie, como un conjunto de caracteres.
>> ALI: Cool, sí.
Así que en este problema, sólo tenemos que considerar un carácter a la vez, por lo que
sólo vamos a hacer GetChar para esa instancia.
ROB: Podríamos implementar una función que si queríamos que tuvo una cadena completa
y fue la cadena y cambió todo en minúsculas a mayúsculas y todo
mayúsculas a minúsculas.
Pero aquí, sólo estamos pidiendo un carácter.
ALI: Así que ahora tenemos el carácter aquí, pero entonces tenemos que guardarlo.
Así que vamos a añadir char c - ¿qué?
ALTAVOZ 20: Defina la variable.
ALI: Sí, exactamente.
Así que tenemos nuestro carácter.
ROB: Creo que podría ser -
que está a sólo tres espacios, por lo que está gritando en usted.
>> ALI: Bueno, cool, ahora que hemos tabulación conjunto, ¿qué pasa después?
¿Cuál es el siguiente paso?
ROB: Lo que nuestro programa debe hacer es cambiar una letra minúscula para una
letra mayúscula.
¿Qué pasa si se me ocurre para introducir el símbolo hash?
Es que -
ALI: Es un buen símbolo.
Nosotros usamos mucho.
ROB: ¿Eso es válido que se puede convertir en una forma mayúscula?
ALTAVOZ 21: No.
ALI: No.
Debemos comprobar que.
Así que podemos tener una sentencia if comprobando así que si el c es mayor que
o igual a a'la minúscula '-
por lo que si nos fijamos en el gráfico, te darás cuenta de que tiene que ser de aquí,
a 97, y la minúscula.
Y puede ser cualquiera de estos, y en incrementos abajo todo el camino.
Y luego está z en 122.
Y tiene que caen entre estos dos valores.
¿Eso tiene sentido?
ROB: Así que si c no es entre 97 y 122 -
o que nunca debería tener que usar esos números - si c no es entre 'a' y
'Z', entonces no era un carácter válido para nosotros en mayúsculas.
ALI: Así que, en forma de código, se dice que si c es mayor o igual a un solo
en minúsculas -
wow, ¿cómo puedes decir eso?
De acuerdo, es mayor o igual a «a» minúscula, y tiene que estar por encima
la minúscula 'z'. Así que tiene que ser menor o igual a minúsculas 'z'.
Nos estamos asegurando de que es entre los dos.
Entonces podemos continuar con nuestro código feliz.
¿Qué?
ROB: Así que pensé que sólo podría seguir preguntando, si resulta que no tienen un
letra minúscula.
ALI: Oh, yo no era consciente de ello.
Lo siento.
>> Muy bien, así que si vamos a hacer lo que dice Rob, y asegúrese de que -
podemos seguir haciendo ellos, entonces ¿qué debemos hacer?
ALTAVOZ 22: [inaudible]
ROB: Si.
Debemos utilizar algún tipo de bucle.
Debido a que el usuario puede introducir algo inválido una cantidad incalculable de veces.
Así que usted puede utilizar un bucle while.
El propósito de un bucle do-while -
literalmente, la única vez en sus vidas que tendrá que utilizar do-
bucles while es cuando usted está pidiendo la entrada del usuario.
Así que el hecho de que estamos pidiendo la entrada del usuario que aquí hay una insinuación de que deberíamos
utilizar un bucle do-while.
¿Y por qué es eso?
Debido a do-while siempre pasa por lo menos una vez.
Así que cuando usted está pidiendo la entrada del usuario, que desea que esto suceda, al menos una vez.
Y si las cosas fueran correctamente, puede seguir adelante.
Si no es así, vuelve a preguntar de nuevo.
>> ALI: En otras palabras, tenemos que ver sección.
Y así, este está diciendo que haga algo.
Así printf -
imprimir la declaración, rápido, y también conseguir el carácter, o el intento de
conseguir un personaje.
Y luego tenemos que comprobar si en realidad lo hizo correctamente.
Entonces añadimos las condiciones, entonces decimos rato, y entonces tenemos la
sentencia condicional.
ROB: Pero ahora que hemos revocado la línea de pensamiento.
Ahora que originalmente estaban diciendo si c está en este rango, es válido.
Ahora queremos revertir eso y decir si c no está en este rango, entonces
necesidad de volver a hacer las cosas de nuevo.
ALI: Oh, sí.
Rob: Así, mientras que esto no es cierto, queremos volver atrás y
pedir otro personaje.
¿Todo el mundo ve eso?
Las preguntas sobre esto?
Bien.
>> Así que ahora tenemos un carácter válido que podemos mayúsculas.
ALI: ¿Entonces cuál es el siguiente paso para las mayúsculas ella?
ALTAVOZ 23: Añadir 32.
ALI: Agrega -
Perdón, ¿qué?
ALTAVOZ 23: ¿No puedes añadir 32?
ROB: Así que sí, no en términos de números mágicos.
Sólo se debe utilizar comillas simples cosas.
ALTAVOZ 23: Bien, bien -
ROB: Pero usted puede obtener 32 -
ALI: ¿Cómo conseguiste el número 32, creo, es lo que estamos diciendo.
ALTAVOZ 23: [inaudible]
ROB: Así que podemos llegar con el número 32 junto -
ALTAVOZ 23: [inaudible]?
ROB: Si.
Pero si vamos a hacerlo en los dos pasos que hicimos antes con
la materia posición.
Así que la posición en el alfabeto que pasa a ser c es c menos minúsculas
'A'. Así que si entramos en una minúscula 'd', puesto que va a ser 3.
Y ahora queremos llevar las cosas al alcance mayúsculas de las cosas.
Así que ahora nuestro nuevo c va a ser la 'A' mayúscula posición plus.
Entonces, ¿cómo la gente ve que nos trae -
nos estamos moviendo de la gama minúsculas, la profundidad exacta en la que estábamos
rango, y descender al rango de mayúsculas, y va tan lejos
en ella de nuevo, que va a ser el mismo carácter, pero ahora
uppercased.
ALI: ¿Y para las personas que estaban confundidos por la forma en que él acaba de decir 32,
básicamente, combinó ambos en un comunicado.
Así que una manera equivalente a escribir esto para decir que puede sólo tipo de
puesto de sustituto, el c menos 'a,' y lo puso aquí.
Así que lo que hice, yo no -
caracteres en mayúsculas newc = 'A' más c menos minúscula 'a'. Y a causa de álgebra,
Usted puede moverse.
También se puede decir que se puede mover alrededor para caracteres en mayúscula newc = 'A'
menos minúscula 'a' plus c.
Y esto, te darás cuenta de si nos remontamos a la carta.
Contamos con mayúscula A es 65 y una minúscula es 97.
Por lo tanto 65 a 97 es -32.
>> Hi.
Toma asiento.
Oh.
Usted puede sentarse aquí.
Genial, bueno, impresionante.
Bienvenidos a la sección.
Se dará cuenta de que la diferencia es de 32.
Así que ahí es donde él consiguió ese número.
Pero no lo es, como dice Rob, la mejor manera de hacerlo, ya que tiene la extraña
confusión número mágico.
ROB: Usted debe usar mayúscula a minúscula menos.
Usted no debe usar sólo directamente 32.
ALTAVOZ 24: ¿Por qué, otra vez?
¿Por qué no debería usar 32?
ALI: Si lo logramos, sería caracteres newc = -32 + c.
Y si usted no ve ninguna de las demás, si todo esto se ha ido, y usted
sólo ver esta línea, entonces, ¿cómo saber cuál es el negativo 32 está?
Es simplemente fuera de lugar.
ROB: Así que su programa podría funcionar completamente bien.
Es sólo una cosa estilo.
Alguien que entra y la lectura de su código, son como 32, ¿qué significa?
Tal vez no -
Probablemente no pueda comprender inmediatamente que el 32 pasa a ser
diferencia entre una letra minúscula y una letra mayúscula, aunque
vamos a utilizar este hecho en el siguiente problema.
32 es -
usted puede dejar un comentario sobre ella diciendo: 32 es la diferencia entre
'A' y 'a'. Pero en ese momento, ¿por qué no usar 'A' y 'a', y
no es necesario el comentario a continuación.
>> ALI: Es sólo la forma por encima de ella son mucho más limpio, el estilo se refiere.
Y por eso, ya que estás empezando programación -
o creo que no, ya que eres edi hacker - no importa.
Es una buena manera de tener -
es mejor tener un mejor estilo.
Es más fácil para la gente a leer.
ROB: Usted nunca debería tener que recordar la tabla ASCII, nunca.
Usted sólo debe ser capaz de utilizar los caracteres de comillas simples.
¿Preguntas?
ALI: Todo el mundo bien?
ROB: Muy bien.
Así que el siguiente problema es sustancial.
Así que el siguiente problema nos pide -
ALI: El siguiente problema está pidiendo que hagamos lo mismo, pero para utilizar
bitwise operadores.
ROB: Y por supuesto, no hemos visto todavía operadores bit a bit.
Así que ahora voy a hablar de eso.
ALI: Estar emocionado.
Son super divertido.
>> ROB: Así que los operadores regulares, como x más y, menos, los tiempos, divisoria.
ALI: Escriba en este sistema.
ROB: También hay%, si usted no lo ha visto, que se puede utilizar por el
por ciento símbolo.
Pero no vamos a utilizar los de este problema.
Queremos usar los operadores bit a bit.
Ahora recuerde, nosotros lo traían en una conferencia.
No estoy seguro de si hemos discutido binario más allá de eso.
Pero recuerde que cada número solo se representa -
así, todo -
se representa en 1s y 0s en binario.
Así que eso significa que cuando digo el número 8, que yo sé que eso es
como, 1000.
¿Qué operadores bit a bit vamos a hacer es operar en estos bits -
se operan en estos bits directamente.
Ahora estoy ya no se trata en términos de ocho.
Estoy tratando en términos de 1000, y quiero hacer las cosas con las que
bits individuales.
Así que Ali ha escrito los operadores bit a bit aquí, pero eso es -
El número 8 usaremos como uno de los números de nuestro ejemplo.
Y la representación binaria es 1000.
Vamos a utilizar otro número, 5 -
en realidad vamos a utilizar 9 y 5.
Y el 5 de representación binaria es 00 -
0101.
ALI: ¿Están todos bien en eso?
El material binario?
Fue a partir de la primera conferencia?
>> ROB: Así que incluso si usted no está completamente en la parte superior de la forma de convertir las cosas
binario, que no es del todo importante para este problema.
Vamos a estar usando, pero tendrás muchas más posibilidades para encontrar la manera de
rápidamente cambiar las cosas en binario.
Así que con 9 y 5, ahora tenemos nuestros operadores bit a bit.
Ah, y también, 9 y 5, si es un número entero, entonces en realidad es 32 bits,
lo que significa que tenemos como 0, 0, 0, 0 un montón de veces, y luego
101 en el último momento.
Eso es porque, no importa lo que hagas, en números enteros, de 32 bits.
El hecho de que sólo se necesitan cuatro bits para representar 9 no significa que no seamos
utilizando los otros 27 bits por sólo 0.
ALI: Solo para aclarar, uno de estos números que hay un 0 o un 1 es un bit.
Éste es de 4 bits.
Como tantas Rob dijo que las máquinas de almacenarlos en el 32.
Así que entonces tendrían 32 de un 0 o un 1.
Cool?
ROB: Los operadores bit a bit.
El primero que vamos a tratar, vamos a hacer y.
Así que si hacemos 9 y 5.
Así que lo que hace es y, poco a poco, compara los bits de los dos números
y si ambos números son 1, y luego volverá a 1.
Si uno es un 0 y el otro es un 1, o ambos son 0s, a continuación, devuelve un 0.
Así que usted puede pensar en ella como sus lógicas AND.
Al igual que usted necesita cierto y verdadero para devolver true, pero cierto y lo falso es falso.
Por lo que es lo mismo, pero ahora estamos tratando con él con sólo bits.
>> ALI: Entonces, si nos fijamos en esto, tendrás 1 -
las vas a alinear, por lo que será 1 y 0.
¿Ustedes piensan que sería - lo que evaluaría a?
ALTAVOZ 25: 1.
ALI: Cool.
O no.
Lo siento.
¿Eso tiene sentido?
Entonces, ¿cuál es la respuesta colectiva de nuevo?
Lo siento.
Así que si tenemos 1 y 0, entonces ¿qué se obtiene?
ROB: ¿Así que piensa en lo que dices y en voz alta.
Si dispone de dos bits, x e y, necesitas x e y para ser 1 a fin de que
para evaluar a verdadero - o, a fin de que para evaluar a 1.
Si xoy son 0, entonces se evalúa como falso o 0.
LUCAS: Es bueno recordar también que 1 es verdadero y 0 es falso.
Así que si tienes verdadero y falso, es falso.
Pero entonces, fiel y verdadero, verdadero.
Falso y falso, falso.
ALI: Tenemos verdadero y falso.
So 1 y 0.
Así que, de nuevo, lo siento, una vez más?
ALTAVOZ 25: Sería 0.
Sí, bien.
Y luego tenemos 0 y 1 -
ALTAVOZ 25: [inaudible]
ALI: Si.
Así que siempre se puede cambiar en -
Entonces, si usted tiene 0 y 0?
ALTAVOZ 4: 1?
0?
ROB: Así que es 0.
No es que los números tienen que ser el mismo.
Es que ambos números tienen que ser 1.
ALI: ¿Así que ambos tienen que ser verdad para que sea cierto.
Así que eso es 0.
Y entonces usted tiene un 1%, lo que es?
ROB: Son números bastante buenos.
Tienen todo es posible -
ALI: Buen trabajo, wow.
De acuerdo, genial.
¿Eso tiene sentido para todo el mundo?
>> ROB: Así que ahora vamos a hacer |.
Y esto va a ser muy similar, pero ahora en lugar de x e y necesidad de
ser de 1 a fin de que ésta pueda valorar a uno, ahora es sólo xo
y tiene que ser 1.
ALI: So 1 | 0 se evalúa como -
CLASE: 1.
ALI: Cool.
0 | 1 evalúa a -
CLASE: 1.
ALI: Cool, y luego 0 | 0 -
CLASE: 0.
ALI: Sí, y luego 1 | 1 -
CLASE: 1.
ALI: Cool.
Así es como dos operadores bit a bit.
Awesome.
ROB: Así que ahora vamos a hacer ^.
ALI: ¿Hay que hacer todo de ellos?
ROB: Sí, porque creo que lo van a utilizar -
uso de todas ellas.
ALI: Bueno.
Por lo tanto -
ROB: Supongo que no hace falta.
ALI: Entonces ^ obras en que usted tiene que tener exactamente una verdadera y una falsa.
^ Significa OR exclusiva.
Así que ahora no es -
si x e y son ambos 1, es ahora falsa.
Esa es la diferencia entre ^ y |, es que O, usted puede tener, si x es
verdadera o Y es cierto, entonces estamos bien.
No, dice que si x ^ es verdad, y debe ser falsa, o de lo contrario no es cierto.
¿Tiene una pregunta?
>> ALTAVOZ 26: [inaudible]
ALI: Si.
Es algo similar.
Rob: Sí, así que cuando llegue a eso de hardware de bajo nivel, estos son
los tipos de operaciones que se está tratando.
A nivel de hardware, sólo se ocupará de bits.
Usted no se ocupan de números.
ALI: Bueno, para ^, o si tiene 1 ^ 0, lo que se debe evaluar a?
CLASE: 1.
ALI: Cool.
Si usted tiene
0 ^ 1? CLASE: 1.
ALI: Cool.
0 ^ 0?
Cool.
Y entonces 1 ^ 1?
CLASE: 0.
ALI: Cool, impresionante.
El siguiente -
ROB: Creo que se trata de todo lo que tenemos que tratar.
Sólo vamos a hacer esto.
ALI: La única vez que vamos a tener que hacer -
ROB: Oh, eso será para el último problema.
ALTAVOZ 27: Espera, ¿una vez más?
ALI: Lo siento, ¿cuál era su pregunta?
>> ALTAVOZ 27: ¿Se puede explicar que una vez más?
El ^?
ALTAVOZ 27: Exclus - sí.
ALI: ¿Cuál es la OR exclusiva significa que no tiene que ser exclusivamente
un verdadero y falso, así que un 1 y un 0, frente a OR, usted tiene puede -
uno de ellos ha de ser verdad, o ambos pueden ser cierto, por lo
para evaluar a true.
ALTAVOZ 27: Así que 0 y 0 sería falso.
ALI: Si.
Pero si tienes 1 |
1, que se evaluará como true.
Pero si usted tiene un ^ 1, como hicimos nosotros, que se evalúa como false.
Porque no es exclusivamente una es verdadera.
ROB: Y esto puede o no ser útil, pero observe que la ^ es
igual a simplemente tomar el |
menos el &.
Y en realidad se puede pensar de esta manera.
^ Es sólo ORing todo juntos pero sacando cualquiera de los bits que
ambos eran ciertas.
Así y todo vuelve donde ambos eran ciertas.
| Devuelve todo lo que uno o ambos eran verdaderas.
Así que resta desde el | le da la ^.
ALI: ¿Alguna pregunta?
Esta fue una gran cantidad de información.
Todo el mundo bien?
>> ROB: Podemos pasar los próximos para el siguiente problema, reducir
¿qué hora es?
No necesitan esto hasta que el siguiente problema.
ALI: Pensé que era éste.
ROB: No lo es.
ALI: ¿Estás seguro?
ROB: Sí, estoy seguro.
ALI: ¿Por qué no empezar a hacer el siguiente problema?
El problema es, una vez más, para cambiar de minúsculas a mayúsculas, y este
momento de usar los operadores bit a bit.
ROB: Así lo haremos -
vamos a empezar con la representación binaria de 'A', 'A' mayúscula,
que es 65.
Así que en binario -
por lo que 'A' = 65, = que, en binario -
Voy a meter la pata el número de 0s - que.
ALI: ¿Eso tiene sentido para todo el mundo?
Por lo tanto, 1, no 2s, no 4s, 8s no, no -
no 16s, 32s, y luego no un 64.
ROB: Sí, creo que eso es una 0s demasiados.
ALI: Lo siento.
>> ROB: Está bien, así que tenemos la serie 64, y tenemos el conjunto 1, y la combinación de los
juntos, tenemos 65.
ALI: Cool Beans?
ROB: Así que ahora, minúsculas 'a'-
nota 97 -
¿cuál es la diferencia entre 97 y 65?
ALTAVOZ 28: 32.
ROB: Si.
Así que es de 32 años, que es su propio pedacito, así que eso va a ser 110001.
Y esto va a ser verdad para todos los caracteres posibles.
Así que si pensamos en la 'D', que va a ser 68, que va a ser 1.000.011.
Y entonces minúscula 'd' va a ser 68 más 32, que es 100, que es
va a ser la misma cosa que era, simplemente moviendo el
32 otra vez, de modo 1100011.
Así que la diferencia entre una letra mayúscula y en minúscula es sólo mover de un tirón
que la posición de 32-bit.
ALTAVOZ 29: ¿No es 1000100?
ROB: Espera, es 100 -
algo que hice mal.
Esto no era cierto.
Estaba pensando que se trataba de una diferencia de 3, por lo que luego me pegó
el binario 3 al final.
Esto debe estar en lo cierto.
ALI: Gracias.
Bueno para señalarlo.
Eso fue fuerte.
Muy bien, ¿está claro a la gente?
>> ROB: La diferencia entre la versión en mayúsculas y minúsculas es
siempre va a ser sólo 32, por lo que siempre va a ser un poco sola
que necesita ser volteado para cambiar entre los dos.
ALI: Así que en ese caso, conocer la diferencia entre la capital y un
la minúscula es una buena cosa.
No se encuentra en el código, pero al menos conceptualmente, es bueno.
Así que ustedes pueden ir y código que en los Espacios ahora.
¿O debemos hablar de ello?
ROB: Sólo se puede hablar de ello.
No se.
Ustedes pueden probar.
Discusión entre usted mismo un poco.
Nosotros le daremos la oportunidad de codificar.
[Interrumpiendo VOCES]
ALI: - está fresco
ALTAVOZ 30: Esto es como la comedia hacker.
ALI: Sí, estamos diciendo a la prensa, pasando a través de él.
>> Rob: Y estamos de vuelta.
ALI: Esto es un poco extraño.
Siento que debería tener una estación de noticias CS50 y podríamos
en realidad se sientan así.
ROB: Noticias Hacker.
ALI: Hacker News 50.
ALI: No dude en hacer cualquier pregunta si usted está confundido.
ROB: ¿Hay alguien atrapado?
ALI: Sí, eso es una buena cosa.
ALI: Espera, ¿estás atascado en su silla?
Oh.
Yo estaba un poco preocupado.
ROB: Porque me acabo de dar cuenta que vamos a querer
otro operador bit a bit.
Por ahora, vamos a convertir mayúsculas a minúsculas.
ALI: Lo siento, ¿todo el mundo conseguir que el anuncio?
Vamos a pasar de mayúsculas a minúsculas.
ROB: Luego hablaremos de minúsculas a mayúsculas después de eso.
Oh, no.
Tenemos un bug en el, que, supongo, nunca trató de correr.
Que es sólo eso char c debe ser declarado fuera del bucle, porque
su alcance está restringido en el bucle.
ALTAVOZ 32: En este caso, es incorrecto utilizar un número?
ROB: Eh, no es necesario.
Si te garantiza que el capital 'A' - o, en minúscula 'a' capital menos 'A'
era exactamente un poco, pero que no sabe que es 32 -
las cosas funcionarían igual de bien si se tratara de la de 16 bits que se volcó - o
no, supongo que wouldn't -
o el bit 64 se volcó, posiblemente.
Pero usted no necesita usar 32.
En su lugar, puede utilizar minúsculas 'A' 'a' capital menos.
>> ALTAVOZ 32: De acuerdo.
¿Qué puedes hacer si te sientes como si estuvieras escribiendo demasiado es que se puede definir
en la parte superior.
Así que usted puede ser como, int = diferencia minúscula 'A' 'a' capital menos. Y
entonces usted puede escribir diferencia en cambio.
Eso es válido.
Pero sólo con el número 32 es una especie de -
ALTAVOZ 33: A pesar de que es por el hecho de que es la de 32 bits?
ALI: Si.
ROB: No puede ser -
la única garantía que tenemos que hacer es que la diferencia entre el
minúsculas y mayúsculas es un bit.
No debería importar que pasa a ser la de 32 bits que se volcó.
Por razones de tiempo, vamos a empezar a ir por esto.
No pasa nada si no se ha terminado.
No se preocupe.
ROB: Suponiendo que c es una letra mayúscula -
no tenemos que asumir c es una letra mayúscula.
Sabemos c es una letra mayúscula después de este bucle while -
do-while.
Así que eso significa que se ve algo como esto 'A'. Así que si queremos llevar este
'A' a esta 'a', ¿qué es lo que tenemos que hacer?
Entonces, ¿cómo convertir y darle la vuelta al bit?
ALI: ¿Cómo darle la vuelta?
>> ROB: Así que sabemos que queremos darle la vuelta al de 32 bits.
Así que va a hacer 'a' menos 'A', o podríamos escribir 32, pero -
Maldita sea, es al revés.
ALI: Bueno por lo que Rob aquí está el cálculo de esa cifra, el número mágico 32.
Así que él está descubriendo que la zona donde flip poco sería.
Y entonces ¿qué es lo que ponemos en los signos de interrogación son?
ROB: ¿Cómo podemos voltear esa parte?
En términos de la letra mayúscula, es un 0, y queremos llegar a ser un 1.
ALTAVOZ 34: |.
ROB: Si.
Así que esto nos está diciendo que tenemos 'A'. Lo estamos ORing con 0 -
1000 -
y que que =.
ALI: ¿Eso tiene sentido para todo el mundo?
Podemos ir a través de él poco a poco si quieres.
ALTAVOZ 35: ¿Es usted [inaudible]?
ALI: ¿Dónde está el signo menos?
ROB: Oh, quieres decir aquí?
ALI: Oh, sí.
ROB: Así que supongo que esto es nosotros.
Podríamos decir 32 años, y ahora estamos usando operadores bit a bit.
ALI: No nos gustan los números mágicos.
No vamos a hacer eso.
También creo que deberíamos utilizar un operador bit a bit -
ALTAVOZ 36: Si utiliza un ^ A, obtendrá 32?
ALTAVOZ 37: Sí, creo que -
ROB: Sí, lo harás.
ALI: Así es como se habría hecho para ir
del capital en minúsculas.
>> Ahora, ¿alguien puede decirme por qué Rob y he cambiado el sistema y la forma en que se fue
mayúsculas de minúsculas, en lugar de minúsculas
mayúsculas como lo hicimos antes?
¿Alguien tiene alguna idea de por qué puede ser más difícil?
ROB: Así que haríamos -
ALI: Sí, adelante.
ALTAVOZ 38: El operador | Sólo realmente bueno para sumar.
ALI: Sí, exactamente.
ROB: Así que lo que quiero hacer en el caso de minúsculas a mayúsculas es decir,
convertir esta a''-
por lo que queremos poner en algunos números aquí y usar algún operador de modo que se trata de
a capital de A. Todavía estamos utilizando probablemente 32 de alguna manera, pero ahora ¿cómo podemos
conseguir que esto salga a esto?
Así que c -
oh, todavía quiero que también -
ALI: Así que ahora si estamos conversión de minúsculas a mayúsculas de nuevo, entonces
hacer la operación ^, como ustedes dijeron.
ROB: Hay otras maneras de hacer las cosas.
Muchos de los operadores de bits llegar a ser muy fácil de definir en términos
de otros operadores a nivel de bits.
Así que yo no iba a usar ^ o en absoluto, pero ^ funcionaba perfectamente bien.
>> ALI: Bueno, por lo que vamos a ir en el último problema, que es básico -
el último problema es convertir algo en binario.
Así, por ejemplo, tiene 50 años, y luego se convierte a
binario, que es 110010.
Y yo creo que ustedes saben todo acerca binario de charla.
Y también se supone que no ponga ningún 0s líder en ella.
ROB: puede ignorar esa parte por ahora.
El primer paso, usted puede hacerlo de modo que hay 0s líderes.
Y luego podemos modificar ese no tener 0s líder, si tenemos tiempo.
ALI: ¿Así que no te preocupes por eso.
Simplemente tratar de conseguir en binario.
Un buen lugar para comenzar sería -
ROB: Tenemos que pedir un número entero.
ALI: Oh sí, eso es una buena idea.
Podemos empezar con eso.
Así que usted puede cambiar el sistema.
Así que en lugar de un personaje, ahora estamos tratando con números enteros.
Cool?
>> ROB: Y ahora es lo que nuestro do-while condición va a ser?
Se está pidiendo un entero no negativo.
ALI: ¿Cuándo queremos seguir preguntando al usuario algo más?
Cuando es menor que 0.
ALI: Así es.
ROB: Si bien i es menor que 0.
ALI: Ahora queremos convertir.
¿Ustedes tienen alguna idea de qué hacer?
Los indicios?
Si.
ALTAVOZ 39: ¿Tenemos que convertirlo, o podemos simplemente imprimir algunos 0s y 1s
que sería el número correcto?
¿Podría hacer un bucle for y cuente por potencias de 2?
ROB: Si.
Usted no tiene que puedo convertir a su binario -
la representación binaria de i no cabe dentro de i.
Sólo tiene que imprimir la representación binaria de i.
ALI: En otras palabras, usted no tiene que ir por potencias de dos.
ROB: Porque ya está siendo almacenados como archivos binarios, por lo que no es necesario
convertirlo a binario.
Sólo tienes que ir a través de su binario, e imprimirlo.
Y vas a tener que usar bit a bit, porque quiere ver
los bits reales.
No es necesario usar bit a bit, pero por favor.
Y eso es en realidad -
usted puede hacer las potencias de dos, multiplicando por 2.
Vamos a repasar una de las últimas dos operadores de bits binarios,
que es éste.
Así que cuando usted toma -
>> ALI: ¿Se puede ir a través de los dos?
ROB: Si.
Así que vamos a ir con 9.
Así desviación a la izquierda 9 1 -
lo que queda es sólo medio turno mover todos los bits a la izquierda e inserte un 0.
Así que nos estamos moviendo todos los bits de 9 a la izquierda
posición, lo que nos da -
Así notar hemos cambiado todo lo que queda uno, y se inserta un 0 en el
lado derecho.
Si se hubiera desplazado a la izquierda en dos, que cambiaría todo lo que dejó a dos,
e inserte dos 0s para llenar los vacíos.
Pregunta?
ALI: Entonces desplazamiento a la derecha hace una cosa similar.
Si tiene 9 desplazamiento a la derecha 1, entonces estás moviendo todo a
el derecho, se pierde un dígito, lo que el 100 en su lugar.
ROB: ¿Así que está bien que usted está perdiendo el poco que pasó a ser todo lo
el camino a la derecha.
Hay diferentes tipos de cambios correctos, pero básicamente se puede pensar en
desplazamiento a la derecha como se acaba de dividir por 2.
Y se puede pensar en desviación a la izquierda que multiplicar por 2.
Así que si usted convierte esto -
si se convierten 9 turno 1, que es igual a 10010, si en realidad fue
a través del binario y descubierto lo que fuese, no sería más que 18 años.
Acabamos de multiplicar por 2.
1001 desplazamiento a la izquierda 2 va a ser 36.
Se multiplica por 4.
Vale, guay, así que eso es un práctico operador bit a bit para esta.
Más confusión?
¿Ustedes quieren probarlo?
O simplemente puede saltar a la derecha y ponerlo en marcha?
ROB: Probablemente debería saltar a la derecha adentro
ALI: Sí, está bien.
Rob: Y caminar a través de ella juntos.
>> ALI: Bueno, yo sólo voy a entrar en ella.
Así como lo dije al principio, vamos a ir sólo a través de bit por bit.
Así que vamos a necesitar un bucle.
¿Alguien tiene una idea de la mejor clase de lazo que pasar por esto?
Tenemos bucles while, do-while, bucles for.
ALTAVOZ 40: Do-while?
ROB: Así que recuerda lo que dije antes acerca, sólo estamos utilizando do-while
bucles para obtener entrada del usuario.
Usted nunca será más o menos siempre los utilizan para nada más.
ALI: El problema con do-while es que haga algo antes de que se comprueba
la condición.
Por lo tanto, se podría hacer algo malo -
como, duele -
hacer algo que no es posible.
Así que usted quiere comprobar primero.
ROB: Hay un montón de casos en los que se puede utilizar do-while, pero la gente
no espere que los use a menos que sea la entrada del usuario.
Así que hemos utilizado nuestra do-while i para conseguirlo.
¿Cuántas veces es nuestro lazo va a querer bucle?
Queremos bucle sobre cada uno de los bits de i.
¿Cuántos bits hay en i?
ALTAVOZ 41: 32.
ALI: Si.
ROB: Así que hay 32 bits.
No queremos decir 32.
En su lugar, quiero decir sizeof -
que, ¿has visto que en la clase todavía?
ALI: Nope.
ROB: ¿Por qué dice que el uso -
sizeof (int) veces 8 -
ALI: Bueno, sizeof es -
>> ALTAVOZ 42: [inaudible]
ALI: Interesante.
Así, sizeof es una función incorporada en C, donde sólo le indica la
número de bits en -
ROB: Bytes.
ALI: Bytes, lo siento -
el número de bytes que tiene una variable para almacenar un valor.
Así que creo que pasó en la clase, entonces, un int es de 4 bytes tal vez.
Cool?
ROB: Pero usted no necesita saber que un int es de 4 bytes.
Usted debe ser capaz de decir -
usted debe utilizar sizeof (int) para obtener 4 bytes.
Y eso es realmente importante para algunas cosas.
Un int no podría ser de 4 bytes.
En otro equipo, un int puede ser de 8 bytes.
Así que tu programa no funcionará en ese equipo porque no modificable 32
bits cuando en ese equipo pasa a ser de 64 bits.
ALI: ¿Así que usted tenga el número total de bits que te quiero dar marcha atrás.
Rob: Y es la diferencia entre un byte y un poco de que no
son 8 bits en un byte.
Así que sizeof (int) devuelve 4 bytes, entonces tenemos que multiplicar ese
por 8 para obtener 32 bits.
>> ALI: Bueno, por lo que sabemos el máximo y sabemos que queremos ir de -
queremos ir a través de todos ellos.
Así que queremos ir de 0 a numBits.
Entonces, ¿alguien sabe cómo escribir el bucle para eso?
¿Alguien?
ALTAVOZ 43: [inaudible]
ALI: ¿Así que quieres atravesar el número i del bit cero a la
bit primero, el segundo bit, el tercer bit, todo el camino a numBits.
El número máximo de bits que se puede llegar.
ROB: ¿Cuál es el lazo común que utilizamos lo que queremos hacer algo veces x?
ALI: For.
Perfecto.
Así que tenemos para.
Y luego vamos a crear un iterador, que no va a ser i.
ROB: j.
ALI: J = 0.
Así que vamos a empezar a 0.
Y entonces vamos a tener la condición para estar seguro, mientras que usted está
pasando a través de él cada vez -
[Interrumpiendo VOCES]
ROB: j.
ALI: j es menor que numBits.
Así que no quiero hacer el real es igual a uno, porque son numBits
total, y empezamos a 0.
Así que estamos realmente va a tener -
ALTAVOZ 44: Oh.
ALI: Los índices no terminan en numBits menos 1.
ROB: Nosotros etiquetar los bits 0 a 31, no se les etiqueta 1 a 32.
ALI: Y luego vamos a incrementar cada vez a uno, porque queremos
revisar cada uno de ellos.
Así que vamos a ir j + +.
>> ALTAVOZ 45: ¿Por qué haces eso?
ALTAVOZ 46: ¿Por qué va usted a través de cada bit?
ROB: ¿Así que quieres ir a través de cada bit y -
Así que digamos que tenemos un número.
ALI: 68.
ROB: Podemos utilizar 68.
Así que el binario que va a ser 100100.
Así que esto está dentro de i y queremos ir sobre cada uno de estos bits.
Es un 1?
Imprimir 1.
¿Es un 0?
Imprimir 0.
A continuación, pasamos a la siguiente parte.
Es un 1?
Imprimir 1.
Es un 0?
Imprimir 0.
ALI: Cool, está bien.
Ahora estamos en el índice correcto para que ese poco es.
¿Cómo podemos comprobar que un particular?
Digamos que estamos en j = 0, por lo que desee comprobar el índice 0 del bit.
Así, en este caso, esta.
>> Así que ahora, ¿cómo hacemos para comprobar - oh, sería éste.
ROB: Si.
ALI: Lo siento.
¿Cómo hacemos para comprobar que uno, en un sentido?
¿Cómo podemos comprobar si es un 0 o un 1?
Bueno let's -
CLASE: Y 1?
ALI: ¿Y?
Si.
ROB: Así que vamos a decir que ya tenemos una.
Entonces esto y, se devolverá si se trataba de un 1 o un 0.
ALI: Así que podemos ir hacia abajo.
Y podemos hacer como ustedes, dijo, de hacer y la función.
ROB: int -
¿Cómo quiero decir esto -
Isone = i.
Y para el primer bit que estemos viendo, estamos haciendo i & 1.
Ahora, ¿qué vamos a querer y por el segundo bit?
ALTAVOZ 47: 2.
ROB: Sí, el segundo que estamos en 2.
ALI: Se dará cuenta de que el 1 se ha movido hacia la izquierda.
Así que hemos aprendido todos los operadores bit a bit para hacer esa función?
ROB: La siguiente -
ALI: Sí, claro, eso es.
Así que es una desviación a la izquierda.
En lugar de siempre consultar con 1, se van a cambiar.
¿Y cuántas veces se lo vamos a cambiar?
Si estamos comprobando el cero entonces nos vamos a mover por encima de cero.
Sí, exactamente.
Así lo dejó pasar por ella j.
Perfecto.
Así que ahora que sabemos -
tenemos este int de si es 1, y luego -
por lo que Rob es una especie de trampa aquí -
y lo que ahora iba por delante y acaba diciendo que si realmente es 1,
porque un resultado verdadero, así que no tienes que decir isf Isone es igual a 1 -
por lo que si Isone, entonces imprimir 1, y de lo contrario imprimir 0.
>> ROB: Así que nuestro programa tiene un error total.
Bueno, las preguntas sobre esto primero.
ALTAVOZ 48: ¿Podrás poner el Isone dentro de la pieza y operación de cuatro
entonces sí lo han cambiando a medida que la última parte?
Así Isone es igual a 1 y, a continuación -
Rob: Sí, se puede.
De hecho, podemos demostrar que una vez que se corrige el error que estoy a punto de
discutir con todos vosotros.
Tenga en cuenta el orden en que van las cosas.
Teniendo en cuenta esta representación binaria, estamos comenzando con el bit cero.
Si es un 0, entonces estamos imprimiendo -
bien, es un 0, por lo que estamos imprimiendo 0.
Luego vamos al segundo bit.
Se trata de un 0, por lo que imprimimos 0.
Luego vamos al tercer bit.
Es un 1, por lo que imprimimos 1.
ALI: Así que va hacia atrás.
Entonces, ¿cómo es lo que ustedes sugieren que arreglar eso y van por otro camino?
ALTAVOZ 49: [inaudible]
ROB: Si.
Así que en vez de ir de 0 a numBits, iremos a partir de fragmentos numBits a 0.
ALI: Así que [inaudible]
Siempre se puede ir a otro lado.
ROB: NumBits menos 1, porque esa es la última nubmer -
ALI: Porque va de 0 a 31.
Y entonces siempre vamos a asegurarnos de que es mayor que 0 para que no te vayas
demasiado a la derecha.
Y luego que siempre resta por 1 para ir a la derecha.
>> ROB: Así que ahora tenemos un bucle de retorno, y el número está de vuelta en la impresión
en la forma correcta.
ALTAVOZ 50: ¿Usted no tiene que cambiar la cosa cambio también?
ALI: ¿Entonces no.
ROB: Estamos haciendo las operaciones exactamente los mismos, excepto que ahora
en el orden inverso.
Así que en lugar de hacer el cambio por numBits menos 1 para obtener lo que esta
es poco, en lugar de hacer eso último, sólo tendremos que hacer primero.
Al revertir esta aquí, invertimos el orden de todas las cosas
que sucede en el interior.
Pero no queremos cambiar lo que sucede en el interior del todo.
ALI: ¿Eso tiene sentido?
El procesamiento?
Bien, ¿alguien más tiene alguna pregunta conceptuales otros?
ALI: Antes de entrar en su punto que es -
ALI: Bueno, bueno ir.
Rob: En lugar de utilizar j para ser nuestro -
en lugar de utilizar j para cambiar por siempre, como un j desviación a la izquierda, creo que lo
usted está diciendo es así, para sí mismo j usar.
Así que para j -
Supongo que esta es la dura - j = 1 << 31.
¿Es eso lo que quieres?
Creo que es << 31.
j> = 1.
j >>, >> Isone, i & j -
por lo que ahora en lugar de usar -
ALI: Está en constante movimiento j en lugar de tener un
índice para comprobarlo.
No es tan malo.
Estamos utilizando el mismo tipo de lógica.
Así que si vas de nuevo -
oh, pero va a perder.
Está bien, te vas a escribirlo de nuevo.
Si usted nota que tenemos una cantidad j << de veces, y se nos
j incrementar cada vez por un incremento, pero esta vez en vez
que están haciendo el incremento de la j en la parte superior dentro del bucle for.
Así que en vez de estar siempre en movimiento hacia abajo -
ROB: La primera iteración del bucle for, tenemos j es 10000.
La siguiente iteración del bucle for es 01000.
La siguiente iteración es eso.
Y el 1 es sólo va a seguir propagando hacia abajo hasta que llegamos a la muy
final, donde ahora es esto.
El siguiente, el 1 va a ser empujado, y j ya no es mayor
que o igual a 1.
También podría poner mayor que 0, la misma diferencia.
Y eso es todo.
¿Preguntas?
Si.
>> ALTAVOZ 51: [inaudible]
ROB: Así que ese es el mismo que -
¿has visto j + = 3?
Así que este es el mismo que j = j + 3?
Usted puede hacer eso por casi cualquier operador en C. Así j >> = 3 es
igual a j = j >> 3.
Así que también funciona con los operadores bit a bit.
Y no debería haber puesto aquí 31.
Debería haber puesto numBits - 1.
ALI: Yay, no hay números mágicos.
Bueno, son las 4:00, así que si ustedes tienen que ir - pero ¿tiene sentido?
¿Ustedes tienen alguna otra pregunta?
ROB: Yo también iba a tirar que si queríamos -
se discutió operador ternario en absoluto?
ALI: No.
Está bien.
ROB: Así que usted puede ver en él para la próxima vez.
ALI: Bueno, en realidad?
Ahora estás presumiendo.
ROB: No, ahora es -
esto es lo que hace que la gente interesada, y ahora van a ir a buscar en ella.
Así que ahora, que hace lo mismo, en un solo paso.
Así que primero comprobar, es i & j 1?
¿Es cierto?
Si es así, escriba un 1, de lo contrario, imprima un 0.
ALI: Pero hacerlo de la otra forma es perfectamente bien también.
Tiene la misma lógica.
Así que no es como uno es -
ROB: En este punto, podemos deshacernos de esas llaves, porque es sólo
una línea de bucle.
ALI: Bueno, por lo que no tiene sentido?
Eso era una especie de salto.
Pero fue sólo un poco de sintaxis, más.
>> Cool?
¿Alguna otra pregunta?
ROB: Muy bien.
ALI: Bueno, genial.
Gracias por venir a la sección.