ALTAVOZ: OK, así, usted no lo crea, pero la semana pasada, el lunes, en Pierce, me estaba en el sótano. Nunca voy a Pierce. Y yo nunca voy a volver de nuevo, porque Dejé mis cosas solo por, como, cinco minutos y alguien robaron mi computadora y mi teléfono de mi mochila. Lo que significa que tengo que volver, y a continuación, a menos de una semana más tarde que nos robaron otra vez. Y entonces se excitaba - Buscar mi iPhone sigue ser de poca ayuda. Así que sigo alentando no lo uses. Se enciende una vez, y fue en el MIT, como 15 minutos más tarde, y la persona llamado a este número de teléfono que mostró en mi registro de llamadas AT & T. Así que me fui en línea, llamado el teléfono número, y se fue directamente a esta contestador automático en español. Y no he oído hablar de él desde entonces. Así que tuve que conseguir un nuevo ordenador y el teléfono. Lo sé. Sí. Pero si ustedes quieren hacer mella en mi Fondo de equipo después de esto, es por eso que Te he pedido aquí. Es broma. Pero eso era muy triste y traumático. Pero es todo de nuevo ahora, y que por eso el p-set 8 tomó tanto tiempo, porque Yo no tengo una computadora. Y alguien se lo robó. Y le envié un correo, preguntando si le pondría su p-set 8. Pero ellos dijeron que no. Y yo estaba como, puedo tener mi equipo de nuevo? Y son como, no. Es broma. Aceptar. Esta es nuestra última sección, y no tengo un par de - sólo tenemos tres cosas en el orden del día. Vamos a hablar un poco Acerca de la guía Q. Luego nos vamos a gastar 15 minutos en una demostración fresca. Entonces vamos a decir todo adiós a uno otro. Usted realmente no necesita los equipos o una pluma o un papel para tomar notas, o seguir a lo largo. Así que supongo que si tienes tu ordenador , entonces usted está en Facebook. Sólo digo. A menos que estés rellenando los datos del Guía de Q, que es primero. La guía de Q está abierta. Usted ha tenido un correo electrónico sobre él. Una vez que todo el material Q se presenta en el final del año, me sale todo el Q comentarios en las puntuaciones de todo el mundo que opta por darme retroalimentación. Y así, cuando vas en el Q - No sé si se puede hacer esto, Jeff, porque usted es estudiante y extensión. Pero cuando vas en el Q, si no lo ha hecho antes, usted escoge su maestro, que es David Malan. Usted tiene que hacer él. Y entonces usted puede escoger TFS. Y usted puede recoger la mayor cantidad TFS como desee. Sin embargo, hay 60 de nosotros. Usted no tiene que recoger todos. Me puedes recoger, o simplemente elegir un par de otras personas, si lo desea, a darles retroalimentación. Y entonces usted consigue las puntuaciones en todas estas diferentes ejes, y entonces usted puede dejar ellos retroalimentación. Y entonces, como un mes después, Voy a todos los que la retroalimentación. Y al igual que los comentarios que ha estado darme lo largo del semestre, me leer todo eso. Y es muy útil, y ayuda a a crecer como un maestro y como un individuo. Así que, por favor, tómese un tiempo para hacerlo. Sólo vamos a estar aquí por como 30 minutos. Así que si quieres, al final de esto, para tomar cinco minutos, y sólo tiene que rellenar la Q, ya que no toma más tiempo que eso. Eso sería maravilloso, y también obtener sus grados de hace más rápidamente si a llenar la Q. Así que la mayoría de ustedes han hecho esto antes - o no, alrededor de la mitad de ustedes han hecho eso antes. Pero si usted es un estudiante de primer año, eso es lo que es. Va a ser el mismo para todas las clases. Hazlo. Se tarda cinco minutos. Pero también, si lo haces un poco en serio, eso no es lo peor en el mundo, porque sin duda tomar en serio. Así que si usted me deja una cara sonriente, Voy a apreciar eso. Pero también le agradecería si usted me dejó más de una cara sonriente. Pero le toca a usted. Yo no te puedo decir - o como un gran smiley cara, con un capital D. Eso será aún mejor. OK, eso es todo lo que tengo para el P. Si tiene alguna pregunta, puede pedir mí, pero bastante auto-explicativo. Simplemente, favor, llénelo. Yo lo agradecería muchísimo, y eso significa mucho para mí. OK, esto es lo que vamos a gastar 15 minutos pasando. Yo te voy a mostrar algo de código. Creo que esto es realmente genial, y esto me hizo más excitado en ciencias de la computación. Así que espero que va a hacer el igual para todos ustedes. Vamos a abrir - y todo esto Código voy a enviar a usted más tarde. Pero sólo vamos a abrir - Estoy en mi terminal - vamos a abrir este programa llamado [? MySum. ?] ¿Todos pueden leer eso, o debería hacerlo más grande? ¿Alguien puede decirme lo que este código se hacerlo cuando lo ejecuto, o lo que esta programa lo hará cuando lo ejecuto? [? Avi,?] ¿Qué te parece que va a hacer? Masticar Finalizar. Usted no debe hablar con la boca abierta. AUDIENCIA: ¿Se necesita un montón de argumentos, encuentra la suma de ellos regresan suma y, a continuación, imprimirlo? O que se necesita en dos argumentos, y entonces lo hace [inaudible]. Y luego imprime lo que sea los resultados son. ALTAVOZ: Close, muy cerca. ¿Alguien quiere agregar a la [? lo Avi?] dijo? ¿Es necesario dar a este programa cualquier argumento de línea de comandos? AUDIENCIA: No. ALTAVOZ: No. ¿Qué sucede si usted no le da cualquier argumento de línea de comandos? Yo sólo escribo MySum slash dot. AUDIENCIA: 1 más 2 es igual a 3. ALTAVOZ: 1 más 2 es igual a 3. Y va a imprimir eso. Eso es exactamente correcto. Vas a ver que la impresión f línea en la parte inferior. Se va a imprimir a, b, y entonces la suma de a y b. Y supongo que usted asume que suma funciona correctamente. Buena suposición. Bien, y lo que sucede si me darle qué argumento? [? Manu? ?] AUDIENCIA: Va a agregar lo que sea el primer argumento es b. O a 2, lo siento. ALTAVOZ: Derecho, a 2. ¿Alguien sabe lo que strtol hace? Se trata básicamente de atoi. Atoi es en realidad una versión de lujo de - o una versión más simple de strtol. Pero lo que realmente utiliza strtol. Y me encontré con que fuera porque quería algo así como atoi, y luego, cuando me me atoi, leí aquí. Y me encontré con "este comportamiento es lo mismo que "strtol. Así que es básicamente atoi para todos los efectos. Y ya ves, incluso yo uso nulo y 10. En realidad, esto le permite tomar una cadena, y convertirlo en un número, y elija qué base que desea hacerlo pulg Así que esta es la base 10 aquí. Yo podría haber hecho en base dos de decimales, base 16 para hexadecimal. Es muy bueno. Pero cuento largo, esto tiene dos números y los suma. Así que vamos a ejecutarlo. Y también se dará cuenta, no son algunas de las cosas - así que tengo un makefile aquí, y Si abre eso, algunas cosas te darás cuenta son diferentes. En particular, este argumento aquí, usted probablemente no he visto eso antes. Generalmente, compilamos cosas con guión cero, cero. Dash cero, cero, significa que no lo hacen cualquier optimizaciones, compilador. No tratar de hacer algo de fantasía, o hacer que algo funcione más rápidamente, o conseguir deshacerse de variables que son necesarias. No optimizar el código en absoluto, Estoy pidiendo de tercer nivel optimización. Así que lo que estoy pidiendo compilador para hacer una gran cantidad de optimizaciones. Usted puede cambiar esto en el archivo MAKE cuando usted tiene este código, si quieres para ver cosas diferentes. ¿Qué vamos a mostrar en un segundo. Así corremos mi suma 1 más 2 más 3. Alguien me da dos argumentos. AUDIENCIA: 4 y 5. ALTAVOZ: 4 y 5. Gracias. Gran, funciona. ¿Cuáles son algunos otros buenos argumentos para probar, para asegurarse de que esto funciona? ¿Alguien? AUDIENCIA: 0. ALTAVOZ: 0 y? AUDIENCIA: Negativo 3. ALTAVOZ: Funciona. Pero esos eran buenas opciones. OK, así que vamos a volver aquí. Este es mysum.c. Se dará cuenta de que hay también algo llamado sumfunction.c. Y esto dice, oh, hay algo definido en sumfunction.c. No incluyo este archivo aquí porque yo no necesito. Pero puedo enlazar en cuando compilo, que te has dado cuenta. Vamos a desplazarse hacia arriba. Vimos cuando compilamos MySum, derecho allí, nos vinculamos en el binario de sumfunction.o. Y yo no necesito el archivo de cabecera porque, por supuesto, está el declaración de la función. Así aguda incluyen normalmente sólo pone en una declaración de la función. Aquí acabo de ponerlo recto en el código. Así que tengo que hacer es enlace en el binario, lo que yo hago. ¿Alguna idea de lo que es en sumfunction.c? ¿Qué código que he escrito en sumfunction.c? AUDIENCIA: [inaudible]. ALTAVOZ: ¿Alguna idea? ¿Sí? AUDIENCIA: Creo, define algunos [inaudible]. ALTAVOZ: Si. Así que hago escritura int suma int a. Escribo esta línea, y luego tengo abierta llave de cierre, cerrado corchete. ¿Qué crees que yo escribo en el interior los llaves, dentro de esa función? ¿Sí? AUDIENCIA: Retorno es igual a. PROCESADOR: Esa es una muy buena opción. ¿Quién piensa [? Manu?] Tiene razón? Dice volver a más b. Bueno, no todo el mundo. [? Akshar,?] tú también? ¿Seguro? Aceptar. ¿Qué? AUDIENCIA: Usted deletreó mal. ALTAVOZ: No, no lo hice. Sí, es broma. Tienes razón. Eso es exactamente lo que dice. Es volver a más b. Eso tiene mucho sentido. OK, vamos a volver aquí. Vemos cómo la cabecera - ese es el tipo de retorno. Recuerde, hemos visto que el primer día, la tipo de la función de volver, pero va antes de que el nombre de la función int. Aquí, he escrito int. ¿Qué crees que pasará si en este función, no escribo int, pero Escribo sin firmar? La diferencia, por supuesto, es que sin signo representa único positivo enteros y pueden ser int positiva o negativa. Así que he cambiado el regreso tipo de esta función. Este código no coincide este retorno aqui. ¿Qué crees que va a pasar cuando compilo? Usted debe gritarme. Sin gritos. ¿Qué pasa cuando ejecuto el programa? Vamos a hacerlo antes de 0 negativo 3, o negativo 1. Todavía funciona, a pesar de que estoy diciendo que ha de devolver un entero sin signo. Está claro que no me devuelve las un entero sin signo. Se devuelve un entero con signo. Está volviendo negativo 1. OK, eso es raro. ¿Qué pasa si me voy en aquí y hacer eso? Así que he cambiado todo de int a firmar. Sólo puede tomar enteros sin signo. Pero, ¿seguimos pensando que va a funcionar? AUDIENCIA: Si. ALTAVOZ: Lo hará. Eso es una locura. Y pasamos de manera claramente asignado número entero, podemos pasar dos firmado número entero, que todavía funciona. OK, alguna idea de por qué sigue funciona, o lo que está pasando? Sí, Jeff. AUDIENCIA: Tiene algo que ver con su optimización que resaltado. ALTAVOZ: No. Podríamos cambiar la optimización, no por ello deja trabajar. Yo puedo hacer eso para usted, pero - AUDIENCIA: Voy a tomar su palabra para ella. ALTAVOZ: Si. Si abre el archivo MAKE aquí, Cambié la optimización. Así que usted puede hacer el tablero cero, cero. Todavía va a funcionar. Otros pensamientos? Ustedes todos esperábamos para trabajar, por lo que ¿por qué esperas que funcione? No? Silencio. Aceptar. Tengo que esperar siete segundos porque he hecho una pregunta. Así que lo bueno de C, y que ha probablemente experimentado antes - podría no tener, esto podría la primera vez. Pero como todos ustedes saben, cuando escribo algo en C, no se guarda como este en el ordenador. Se guarda como unos y ceros. Va de código C a código ensamblador. ¿Alguien ha visto a código ensamblador antes, Código de montaje de la máquina? Veremos en un segundo. Va de código C a código ensamblador. Y ustedes saben las etapas de compilación. Había que memorizar que por concurso una, y luego escribirlo en concurso cero. La mayoría de las personas se equivocaron. Creo que ustedes lo clavó. Pero, ustedes son la mejor sección para las pruebas, por cierto. ¿Cuál es impresionante. No te hará daño. ¡No se preocupe. Pero es realmente genial. Buen trabajo. Así que va a lenguaje ensamblador, y luego pasa a unos y ceros. Y los unos y ceros se guardan en el ordenador, y eso es lo que guarda en la a.out, o en este caso, el archivo ejecutable. Y el equipo funciona con unos y ceros. ¿Cierto? Hemos aprendido esto antes. Así que lo bueno es que esto no firmado idea, la idea de los tipos de ints sin firmar, etcétera, etcétera, eso es aquí en el lenguaje C. Aquellos existe. Pero no existen tipos de los unos y ceros. Tipos ni siquiera existen realmente en el nivel de lenguaje ensamblador. Así que eso es algo que existe en C mundo, pero no existe en el ordenador mundo o del mundo del procesador. Eso es una abstracción que el C idioma ha incluido, para que nuestra la vida más fácil. Así que al final del día, puedo escribir muchas cosas diferentes aquí, y es no hace una diferencia. Debido a que sólo existe en el mundo C. No existe en el unos y ceros mundo. Y nuestro programa de ejecución en los unos y ceros mundo. Así que claramente no ha volado de su mente. Pero creo que eso es genial. Sí, Jeff. AUDIENCIA: Así que, si en lugar de haciendo int, lo haces caracteres. Y tú estabas - ALTAVOZ: Vamos a hacerlo en un segundo. AUDIENCIA: Porque entonces se obtiene una sin signo al pasar de 128 a negativo 127 o de 0 a 255. ALTAVOZ: Así char es problemático. ¿Alguien sabe por qué carbón sería problemática, y que lo haría en realidad cambiar las cosas en las que y ceros mundo? AUDIENCIA: Debido al tamaño de los caracteres. ALTAVOZ: Tamaño de char es 1. Así que sin signo también es de 4 bytes. Así carbón sería arruinar las cosas. Pero lo que es 4 bytes que está en relacionada con un char? O, al que se suma uno más - usted puede poner un carácter más después de caracteres. AUDIENCIA: Car. estrellas. ALTAVOZ: Carácter estrellas cuenta con 4 bytes. Así que vamos a hacer algo eso es una estrella de carbón. Así que esto probablemente funcionaría, pero estamos va a hacer algo, incluso más loco que esto. En mi opinión, más loco. Ahora que he escrito una función que devuelve un puntero, y se necesita un puntero y un valor sin signo - vamos a cambiar esto a int así que no estamos hacer demasiados cambios a la vez. Y tiene un arreglo llamado a, los índices en la matriz, y devuelve la dirección. Hemos visto estos operadores antes. Esto, ¿qué crees que esto va a hacer, a cambio, cuando lo ejecuto? ¿Qué piensa usted que va a hacer? ¿Alguna idea? AUDIENCIA: violación de segmento. ALTAVOZ: ¿Qué? Segfault? Eso es una buena suposición. Tom dice lo mismo. Cualesquiera otras conjeturas? ¿Quién piensa que va a hacer lo mismo? ¿Quién piensa que va a segfault? Se hace lo mismo. Lo siento. Pero, por supuesto, ponemos en 1 y 2. Y esos son ambos válidos, ¿verdad? Vamos a ver, podemos ir a la el segundo lugar de una matriz. Pero lo que si hicimos b un número negativo? Esa es probablemente una mejor conjetura por algo en violación de segmento. Todavía funciona. OK, esto ya es una locura. Esta es la función de suma igualmente válidas. Esto hace exactamente lo mismo como el retorno a y b. ¿Alguien puede explicar por qué esto es una buena función de resumir, o por qué esto funciona? ¿Qué está pasando aquí? ¿Por qué hace esto exactamente el mismo cosa como nuestra antigua función suma? [? Akshar,?] ¿qué está pasando? AUDIENCIA: Porque cuando usted tiene un a que es una dirección a la memoria de localización - y cuando lo hace el signo, que va a la dirección de memoria. Y cuando vas a la b, eres un poco pasos de esa dirección de memoria en movimiento, usted está volviendo eso. Así que usted es en realidad, de hecho, añadiendo a y b [inaudible]. ¿Dónde están las operaciones estándar en esa declaración? Al igual que, ¿de dónde caen los paréntesis? ¿El regreso de la dirección en un antes o después de [inaudible]? ALTAVOZ: Se va a indexar en b - o un índice en un - y luego devolver la dirección. OK, así que entendía todo el mundo lo que [? Akshar?] dijo, y explicó por qué esto funciona? Yo no lo hice, la primera vez que alguien explicado esto a mí. ¿Alguien quiere una foto para explicar esto? Vamos a hacer un dibujo, con ningún marcador, eso es genial. Encontrado alguna. Así que tenemos una matriz que es una serie de cajas. El primero es un índice de 0, índice 1, 2, 3, 4, punto, punto, punto. Un arreglo típico. Y además de tener índices, todos ellos tienen direcciones de memoria. Así que vamos a dar a esta dirección de memoria 13, 14, 15, 16, 17, etcétera. Todo el mundo está aquí hasta ahora. Así que a es una dirección. El nombre de una matriz, un puntero se guarda allí. Es un puntero, es una ubicación de memoria, al inicio de la matriz. Así que si se tratara de la matriz, una sería un valor de 13. Y, por supuesto, podemos dar un valor que queremos. Carácter de lujo A, podemos dar una cualquiera dirección de memoria que queremos. Podemos darle 0, podemos darle negativo 1 - negativo no existe 1, de manera que es probable que haya un problema, pero viste que todavía funcionaba. Así que podemos darle un cualquier número que queramos, cualquier dirección de memoria que queremos. Entonces, int b dice, OK, vaya este número de los pasos en la matriz. Así que si b es igual a 2, y a es igual a 13, estamos en la dirección de memoria 13. Y vamos dos pasos, y por lo que estamos aquí. Y el signo significa retorno la dirección de este lugar. Y la dirección es, por supuesto, 15. Así que tenemos 13 más 2, o A más B, que es de 15. La cuestión es, sin embargo - Lo siento. ¿Eso aclarar las cosas por qué esto funciona? AUDIENCIA: ¿Por qué sería trabajar va - para que pueda tener una matriz y ir a un índice negativo? ALTAVOZ: Así es. Así que hicimos los números negativos, así que eso es el - ¿esto tiene sentido, sin embargo, primero, [? Avi,?] para usted? AUDIENCIA: Sí, estoy solo [Inaudible], pero - ALTAVOZ: Sí, esto sería volver 15. Si una tenía 13 años, y b era 2, esto sería volver 15. AUDIENCIA: Así que la indexación de cero no convertido en un problema, ¿verdad? Debido a que usted se está moviendo desde 0. ALTAVOZ: Así es. Así que usted está en movimiento - así que si b fue de 0, usted no desplazarse a cualquier lugar. Y usted acaba de regresar de la dirección - si b es 0, eso es esencialmente devolviendo esa dirección de una. Al pasar en una charla de una estrella y devolver el dirección de una se acaba volviendo a, esencialmente. Bien, la pregunta es ¿por qué números negativos funcionan? Y eso es lo realmente bueno de esto, porque esto debe segfault. Y sería segfault si hizo algo como esto. Digamos, int. Así que este código es idéntico y debe comportarse de forma idéntica. Esencialmente, x es una variable de basura, por lo que este debe comportarse de forma idéntica. Vamos a hacer esto - ups - en estrella. Bien, ya estamos recibiendo errores aquí, porque ya va a estar enojado a mí, porque ya sabe lo que viene. En particular, el segundo uno. Dirección de memoria apilados asociado con una variable local. Esencialmente, yo no voy a compilar esto, y luego me voy a deshacer hacer lo que acabamos de hacer. Pero debido a que nunca estamos realmente acceder a lo que está en la memoria ubicación, no va a segfault. Estamos en realidad nunca mirar a lo que es en el segundo cuadro, o lo que hay en cualquier caja de esta matriz. Nosotros sólo estamos diciendo, aquí está la dirección de lo que estamos buscando y devolver esa dirección. Estamos en realidad nunca entrar en el matriz a mirar en esa ubicación. Y porque nunca nos tocamos la memoria, no nos metemos en problemas. No conseguimos una violación de segmento. Si intentamos, de nuevo, toque que memoria, toque lo que estaba en un ob - o un soporte de b, y suponiendo un 0 y - si una de 0, incluso, que sería bastante malo, porque no podemos ir abajo todo el camino. Si A y B son ambos 0, y tratamos de tocar lo que estaba allí, entonces lo haríamos meter en problemas. Pero si no tocamos lo que hay, simplemente devolvemos la dirección, es en realidad no va a segfault porque que le permite realizar estas operaciones. Sólo se enoja con usted, y se pone muy enojado, cuando tratas de tocar la memoria real y devolver lo que es en esa ubicación de memoria. ¿Eso tiene sentido? Eso es sólo una parte loca de C. Así, tenemos uno más de estos. ¿Quién cree que es genial? Más personas. Eso es bueno. Vale, este es nuestro último. Y me gustaría que me dijera si o no crees que esto va hacer exactamente lo mismo. Esto lo he escrito en alguna parte. No voy a memorizarlos. Vamos a ver, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Así que esta es una matriz, ahora, no una función. Y es una matriz porque tenemos cuadrado soportes, abrazaderas no rizado. Y es una matriz de qué tipo? Cualquier persona, ¿no? AUDIENCIA: Sus números hexadecimales? ALTAVOZ: ¿Pero cuál es el tipo C? Todos ellos tienen números hexadecimales. ¿Cuál es el tipo C? Te dice. AUDIENCIA: Es caracteres sin signo. ALTAVOZ: Derecha, caracteres sin signo. Y dos números hexadecimales es de un byte. Así que estos son 1, 2, 3, 4, 5, 6, 7, 8, 9 bytes. Es un conjunto de 9 bytes. Bueno, usted probablemente ya sabe la respuesta a esta pregunta. Pero, ¿qué crees que va a suceder cuando ejecuto esto? Digo, de nuevo, en mysum.c, Estoy esperando una función que toma dos números enteros. Y yo estoy en su lugar diciendo que suma es una serie de caracteres. ¿Qué va a pasar cuando Corro. / MySum y hacer? Bueno, en primer lugar, la mayoría de ustedes probablemente de acuerdo en que hacer - oh no, es broma. ¿Qué hice mal? Uh oh. Eso debería ser llaves. Así es como se inicializa una matriz. Mi mal. Así que ya vimos antes de que los tipos de son una abstracción de nivel C, no una abstracción nivel de equipo. Así que la mayoría de ustedes probablemente esperaba que hacer, o asumir que haría. Pero lo que cuando corro. / MySum? ¿Qué va a pasar? ¿Alguna idea? AUDIENCIA: Se va a imprimir una palabra. ALTAVOZ: Se va a imprimir una palabra. ¿Qué palabra? AUDIENCIA: [inaudible]. ALTAVOZ: ¿Alguna otra conjeturas? Aceptar, imprima una frase. Usted puede tener cualquier frase. Esa será tu lado. Cualquiera que tenga una suposición diferente? Anna, ¿cuál es su respuesta? AUDIENCIA: Se va a imprimir - dos letras, o [inaudible] una letra. ALTAVOZ: Una carta. AUDIENCIA: ¿Puedo contar cómo muchos [inaudible]? ALTAVOZ: Nueve. Bueno, yo voy a ejecutarlo. Hace exactamente lo mismo. Añade dos números juntos. Bueno, vamos a pasar los dos argumentos. No toma argumentos. Así que no sé de dónde pudo posiblemente obtener estos argumentos. Pero vamos a pasar a 100 y 0. Y añade 100 y 0. Eso es una locura. Creo que sí. Negativo 4, que funciona también. Puedes hacer lo que quieras. Esta es una función de suma igualmente válidas. Esta es una función de suma. Pero, no, usted está diciendo que es una matriz de bytes. Entonces, ¿qué está pasando aquí? Así que, de nuevo, vamos a volver a esta idea que decíamos al principio. Se pasa de código de nivel C, para el montaje lenguaje, a unos y ceros. Este es hexadecimal. Pero esto es sólo una montón de unos y ceros. Esto es 72 unos y ceros, ¿verdad? 72 unos y ceros. 9 bytes. Cada byte tiene 8 bits. Cada bit es un uno o un cero. Así que 72 unos o ceros. Acabo de ellos escritos como este - en lugar de escribirlo como una gran cantidad de unos y ceros. Pero esto va a pasar de nivel C idioma, para el montaje idioma, a código. Y esto mostrara en el código, en alguna parte, estos 72 unos y ceros que he escrito aquí. Así en algún lugar en que - vamos a ir aquí - en algún lugar de MySum, el programa, hay son estos 72 unos y ceros que he por escrito y le dijo que para escribir. Ahora, cualquier conjetura sobre lo que los 72 unos y ceros significan? AUDIENCIA: Probablemente lo mismo cosa que volver a más b. ALTAVOZ: Probablemente lo mismo cosa que volver a más b. Vamos a verificar eso. Vamos a averiguar cómo hice esto. Así que si vas de vuelta aquí, te digo para ejecutar este comando, objdump-S sumfunction.o. Vamos a ejecutarlo. objdump - obj, volcar. Básicamente se me puede dar lo que yo quiero ver. Me puede dar el lenguaje ensamblador. Me puede dar los unos y ceros. Tiene un montón de banderas. Este es el que vamos para utilizar por el momento. Dot - como podéis ver en las diapositivas - capital de la rociada S dice, intersperse, código fuente - esta línea es de C - con el conjunto código y con los unos y ceros. Y vamos a correr en sumfunction.o. Debido a que va a ser más fácil de ver. Una vez más - hmm? AUDIENCIA: Usted deletreó mal. ALTAVOZ: Pero de hecho voy para desactivarla por un segundo. Estoy primero va a abrir sólo sumfuntion.o. AUDIENCIA: Usted deletreó mal la primera vez. ALTAVOZ: Classic. Suma - que es una palabra difícil, sin embargo. Usted se sorprendería. OK, así que esto es sumfunction.o. Ni siquiera pude decirle. Hay un montón de ceros, claramente mucho de ceros, y no hay otra cosas que no son ceros. Pero todo ceros. Parece que hay algunos más. Así que, claramente, esto es difícil de leer. Ese es el lenguaje binario. Ahora vamos a abrirlo - ¿qué? ¿Qué estoy haciendo mal? ¿Escribí correctamente? OK, esto es incómodo. Necesito un segundo para entender lo que estoy haciendo mal. Esa es una error. Eso es raro. Oh, es por eso. Voy a volver a nuestra inicial uno, para que podamos mirar el código objeto de este. Porque no hay realmente va a ser cualquier cosa cuando sólo hay que poner el unos y ceros pulg Eso es. OK, así que todo el mundo puede ver esto. Esta función, como ya he dicho, apagar las líneas C - líneas de código fuente - con unas instrucciones de montaje. Aquí está nuestra línea de código fuente. Aquí hay uno, aquí es otra. He aquí las instrucciones de montaje. Eso es lo que parecen. Instrucciones de montaje - usted puede aprender más de ellos si se toma otras clases de CS, pero son en general, una instrucción. Y a continuación, una fuente y un destino. Y entonces aquí está el código binario que corresponde a la asamblea instrucciones. Así como usted puede ver, esta función suma, al final del día, es de tres instrucciones de montaje. Sólo tres. Uno mov - este m-o-v representa a Move. Añadir stands para Agregar. Y r-e-t significa retorno. Así que un mov, un add, una devolución. Y éstos, por aquí, son los ceros y los que corresponden a ese código. Así que esos ceros y unos, si se quiere Sabes esos, sólo puede poner aquellos directamente in Y luego va a hacer el exactamente lo mismo. Debido a que, al final del día, todos que está ejecutando es una larga serie de ceros y unos. Y eso es lo que su código es en realidad. Y la razón - vamos a ver una cosa. ¿Tenía abierto el makefile? Así que si nos fuimos de nuevo a lanzarse cero, cero hasta aquí - lo siento, el capital o el capital o cero, no es cero, cero. Y LOGRÓ, sería seguirá funcionando igual. Pero ahora te das cuenta de que hay una mucho más instrucciones de montaje. Eso es porque, de nuevo, le pregunté a la compilador que no haga ninguna optimización. Así que todavía podía tomar todos estos ceros y unos, y tirarlos a, y que iba a funcionar. Acabo de hacer las optimizaciones, porque que es un poco más fácil, entonces, para escribir la matriz. Pero esto iba a funcionar igual de bien. Bien, vamos a hacer una última cosa, porque creo que es la parte más fresca. A pesar de que todo el mundo está claramente Ya soplado y sin palabras. Nuestras mentes se han apagado. [Inaudible] Así, estos son de una clase diferente de CS, que es muy interesante, que he tomado - CS61. Yo le animo a tomarlo. Pero lo bueno de este hecho, que las cosas son sólo ceros y unos, son que todo está ceros y unos. Así que usted puede tomar un archivo que tiene el ceros correctos y que usted desea en algún lugar en el mismo, y el uso de esa sección de ceros y unos en función suma. ¿Qué quiero decir con eso? Quiero decir que puedes tener un archivo de imagen tiene la serie correcta de ceros y queridos, que imprimen algo a una imagen. Y un programa podría interpretar es un imagen, pero eres capaz de interpretarlo, si que quieres, como una función de suma. Así que si queríamos abrir, para ejemplo, esta imagen. Vamos, Hello Kitty. Wonderful little imagen. Aquí existe esa cadena de ceros y unos. Esos 72 ceros y unos existir en esta imagen. Así que lo que puedo hacer, entonces, es escribir - Tengo que recordar dónde están. Voy a encontrar eso en un segundo. Pero lo hacemos - déjame averiguar dónde están. Uno seg. Vamos a hacer - AUDIENCIA: [inaudible]. ALTAVOZ: Gracias. Así que si ejecutamos este programa, que en cambio lee en un archivo, entonces se va a este índice en el archivo. Y entonces, de nuevo, al igual que MySum, toma dos números. Podemos añadir números exactamente igual que que estábamos haciendo antes, lo que va a mostrar cómo el hecho de que, al final del día, todas estas cosas son ceros y unos. Y es sólo la forma en que usted elija interpretarlos. Y si realmente se ven en esta imagen - vamos a ampliar un poco. ¿Todos pueden verlo? Se dará cuenta de aquí, hay alguna mancha extraña. Vamos a ir - esta es la imagen original. Se dará cuenta de que aquí no hay mancha. Ese es el código de la función suma, es esa pequeña mancha ahí. Y, de hecho, una vez más, si usted aprende más sobre esto, te darás cuenta de que este Hello Kitty, que tiene incluso una mayor mancha, tiene código que puede hacerse cargo de un ordenador si no está protegida apropiadamente. Así que en realidad se puede ejecutar este. Yo no voy a correr ahora mismo. Pero se puede ejecutar este Hola Imagen del gatito, y que puede hacerse cargo de su equipo. Así que eso es todo por la demostración. ¿Alguien tiene alguna pregunta, comentarios, inquietudes? Creo que esto es fascinante. Esto me inspiró a aprender más. Le recomiendo, si estás interesado en absoluto en CS, habla conmigo. A pesar de que soy un Estudios Sociales Concentrador, soy un CS, secundaria, por lo que Todavía sé un poco. Pero yo sé lo que sin duda clases que debe tomar. Creo que es todo muy interesante, y animo a usted, sin duda, a obtener más información si está interesado. Está bien, tengo una última cosa. Lo siento. ¿Alguna pregunta? No me detuve a esperar si alguien tenía alguna pregunta acerca de eso. ¿Alguien va a ser un concentrador de CS? O pensar en ello? Uno, dos, tres, cuatro. Uno - sólo uno. Anna es la única parte que es planteado con autoridad. OK, eso es genial. Assam, ¿qué vas a hacer? AUDIENCIA: [inaudible]. ALTAVOZ: Constantino? AUDIENCIA: Física. ALTAVOZ: Whoa, eso fue rápido. Usted tuvo una mala experiencia en CS50? [Inaudible], ¿qué vas a hacer? AUDIENCIA: No tengo ni idea. ALTAVOZ: Curt? AUDIENCIA: Econ o CS. ALTAVOZ: Econ o CS. Tom? AUDIENCIA: Estoy haciendo Stat. ALTAVOZ: Stat? Aceptar. ¿Qué eres? AUDIENCIA: Me? ALTAVOZ: Si. AUDIENCIA: Stat. ALTAVOZ: Stat. Oh, ahí lo tienes. Tom, habla con Alden. Emily, ¿qué eres? AUDIENCIA: Biomédica - ALTAVOZ: ¿Está usted en esta sección? AUDIENCIA: No. ALTAVOZ: OK, eso es Emily. Ella es mi amiga. Es evidente que no es tan bueno de un amigo, porque ella me da un mal rato. Usted podría ser más amable conmigo delante de todos, mi estudiante - AUDIENCIA: Estoy haciendo tu guía Q. ALTAVOZ: ¿En serio? Uh oh. Bueno, eres increíble. Te amo tanto. Oh boy. De todos modos, yo, ayer por la noche, como todo - Estoy seguro de que todo el mundo parece realmente subrayado en estos momentos. No sé, son de primer año - son ustedes siente estresado? Me siento estresado. Era como, te vas a casa Acción de Gracias. Eres como, voy a hacer todas estas cosas. AUDIENCIA: Es muy diferente. ALTAVOZ: Sí, y vuelve. Jeff, que no te sientes de esa manera? AUDIENCIA: Acabo de pensar Yo haría un poco. ALTAVOZ: OK, muy bien. Así que volver, y no tengo hecho nada. Y todo es muy estresante. Y a mí se refiere, genuinamente interesado, acerca de si soy o no va a terminar todo lo que tengo que hacerlo. Pero ayer por la noche, no se destacó, Yo estaba un poco triste. Así que escribí en mi diario acerca de lo que yo estaba triste por. Y yo estaba triste por esta sección en esta clase llega a su fin. Así que yo sólo iba a leer para ustedes un pequeño fragmento de mi diario, de la noche anterior. ¿Puedo obtener algunas servilletas, algunos tejidos de Tom? No, voy a llorar. Yo no lloro. No es que no puedes llorar, Es sólo que no lloro. Ni siquiera sé si mi lágrima glándulas trabajadas - los conductos lagrimales. No he llorado en mucho tiempo. AUDIENCIA: [inaudible]. ALTAVOZ: OK, gracias. Bueno, hay un pequeño prólogo - hay algunas otras partes de mi diario entrada, porque trato de diario cada noche antes de llegar a la cama. Le recomiendo un diario. Se le ayuda a procesar las cosas, y también ser muy agradecidos por su día. Y eso hace que sea mucho más fácil mirar de vuelta en su día y darse cuenta de que había un montón de buenas cosas que sucedieron. Aunque usted se sienta muy estresado en la noche o muy molesto, o realmente triste o cansada. Oh, Dios mío. Ni siquiera sé si está escrito que bien porque yo no lo corrija. Pero vamos a leerlo. Por lo general no leo mi revista, obviamente. "Mañana me voy a enseñar mi último Sección CS50 del año. Es una locura lo rápido que vuela. Sin embargo, me sorprende lo diferente mi experiencia en la enseñanza de este año fue que cuando yo era un estudiante de segundo año. Para empezar, yo definitivamente conocer mejor el material. Pero no le digas a mi primera cohorte de los estudiantes que. Más importante, sin embargo, me di cuenta que la alegría que viene de pie en frente de una habitación de lo que comienza como extraños, pero termina siendo, en menos, amigos de Facebook, es no es un golpe de suerte de primer año. Más bien, es de saber que, en alguna manera, usted está ayudando a talentoso, pensativo, agradable, y personas apasionadas aprenden un poco más acerca de la informática. Estás cambiando la bombilla que sólo un poco en su cuenca, por lo que es capaz a brillar más que tú, o ellos, podría haber imaginado al inicio del semestre. Estás ayudando a convertir los ceños fruncidos de cabeza hacia abajo y haciendo preguntas que proporcionar apoyo, pero todavía permiten a los estudiantes a ponerse de pie por su cuenta. Ciertamente, no es una exageración decir que esta sección es mi favorito parte de la semana. O incluso que no me atrevo a decir, eso es todo, a las 5:30 cada semana, sabiendo que va a ser demasiado largo hasta que nos encontremos de nuevo. Sin embargo, estoy muy agradecido a todo el que me ha dado esta oportunidad de devolver algo a los demás. Para David, por su paciencia y confianza. Para el equipo de filmación y producción, por hacerme ver algo respetable. Y, lo más importante, a mis alumnos, sin los cuales no tendría ningún motivo para pasar 10 horas para averiguar la mejor manera de dibujar los punteros, o diseñar un tabla de los delfines, a través de JavaScript. Como siempre, ha sido una bendición. " Así que con eso, gracias chicos. Nos vemos todos en la feria CS50, y el hackathon, si estás ahí. Y si usted tiene alguna pregunta, voy a pegar alrededor hasta que no haya más. Pero le doy las gracias chicos por un año maravilloso. [Aplausos] ALTAVOZ: Podría llorar.