SPEAKER: OK, allora, tu non ci crederai, ma la scorsa settimana, il Lunedi, in Pierce, I è sceso nel seminterrato. Non vado mai a Pierce. E sto mai tornare di nuovo, perché Ho lasciato la mia roba solo per, come, cinque minuti e qualcuno ha rubato il mio computer e il mio telefono al di fuori del mio zaino. Il che significa che ho ottenuto indietro, e poi meno di una settimana dopo che ha rubato di nuovo. E poi è rimasto acceso - Trova il mio iPhone continua di essere inutile. Quindi io continuo a incoraggiare a non usarlo. Si accende una volta, ed era in MIT, come 15 minuti più tardi, e la persona chiamato questo numero di telefono che ha mostrato nella mia AT & T registro chiamate. Così sono andato online, chiamato quel telefono numero, ed è andato direttamente a questa segreteria telefonica in spagnolo. E non ho sentito parlare da allora. Così ho dovuto ottenere un nuovo computer e telefono. Lo so. Già. Ma se voi volete di chip al mio Fondo computer dopo questo, ecco perché Ho chiesto qui. Sto scherzando. Ma questo era davvero triste e traumatico. Ma è tutto indietro, ed era per questo il p-set 8 voluto così tanto tempo, perché Non ho avuto un computer. E qualcuno l'ha rubata. E ho contattato, chiedendo se sarebbe grade vostro p-set 8. Ma hanno detto di no. E io era come, posso avere il mio computer torna? E sono come, no. Sto scherzando. OK. Questa è la nostra sezione finale, e ho un paio di - abbiamo solo tre cose all'ordine del giorno. Stiamo per parlare un po ' sulla guida Q. Poi andremo a spendere 15 minuti su un demo fresco. Poi andremo a dire tutto addio a un altro. Non avete davvero bisogno dei vostri computer o una penna o carta per prendere appunti, o seguire. Quindi, presumo, se avete il vostro computer up, allora sei su Facebook. Solo dicendo. A meno che non si sta compilando il Guida Q, che è il primo. La guida Q è aperto. Hai avuto una email su di esso. Una volta che tutte le domande roba è presentata alla fine dell'anno, ho tutto il Q commenti in punteggi da parte di tutti che sceglie di darmi le risposte. E così quando si va in D - Non so se si può fare questo, Jeff, perché sei e studente estensione. Ma quando si va in Q, se non avete fatto prima, si sceglie il insegnante, che è David Malan. Devi fare lui. E poi si può scegliere TF. E si può scegliere come molti TF come si desidera. Ma ci sono 60 di noi. Non si dispone a prendere tutti. Si può solo venirmi a prendere, o semplicemente scegliere un paio di altre persone, se si vuole, di dare loro risposte pure. E poi si ottiene punteggi su tutti questi diversi assi, e quindi si può lasciare loro feedback. E poi, come un mese più tardi, Prendo tutto questo feedback. E proprio come le valutazioni sei stato dandomi tutto il semestre, I leggi tutto. Ed è veramente utile, e aiuta mi ha fatto crescere come insegnante e come individuale. Quindi, per favore, prendetevi del tempo per farlo. Stiamo solo andando a essere qui per, tipo, 30 minuti. Quindi, se si desidera, al termine di questa, per prendere cinque minuti, e basta compilare Q, perché non tiene più tempo di quello. Sarebbe meraviglioso, e anche voi ottenere i voti indietro più rapidamente se compilare il Q. Così la maggior parte di voi hanno fatto prima - o non, circa la metà di voi hanno fatto prima. Ma se sei una matricola, questo è quello che è. Sarà lo stesso per tutte le classi. Fatelo. Ci vogliono cinque minuti. Ma anche, se lo si fa un po 'sul serio, che non è la cosa peggiore nel mondo, perché io di certo prenderlo sul serio. Quindi, se mi lasciate una faccina sorridente, Io apprezzo quello. Ma vorrei anche apprezzare se si mi ha lasciato più di una faccina sorridente. Ma tocca a voi. Non posso dirvi - o come un grande smiley affrontare, con un capitale D. Sarebbe ancora meglio. OK, questo è tutto quello che ho per il Q. Se Per eventuali domande, si può chiedere me, ma abbastanza auto-esplicativo. Basta, per favore, compilarlo. Vorrei davvero apprezzare, e significa molto per me. OK, questo è quello che stiamo andando a spendere 15 minuti passando. Io vado a mostrarvi qualche codice. Penso che questo è davvero cool, e questo mi ha fatto più eccitato in informatica. Quindi spero che farà il stessi per tutti. Stiamo per aprire - e tutto questo codice che ti invieremo a voi più tardi. Ma stiamo solo andando ad aprire - Sono nel mio terminale - stiamo andando ad aprire questo programma chiamato [? MySum. ?] Chiunque può leggere che, o devo renderlo più grande? Qualcuno può dirmi che cosa questo codice fare quando lo eseguo, o che cosa questa programma farà quando lo eseguo? [? Avi,?] Cosa ne pensi sta andando a fare? Fine masticare. Non si dovrebbe parlare con la bocca aperta. AUDIENCE: Ci vuole un po 'di argomenti, per somma di restituirli somma, e poi stamparlo? O ci vogliono in due argomenti, e poi lo fa [incomprensibile]. E poi esso stampa a prescindere i risultati sono. SPEAKER: Close, davvero vicino. Qualcuno vuole aggiungere alla [? cosa Avi?] ha detto? Avete bisogno di dare a questo programma eventuali argomenti della riga di comando? PUBBLICO: No. SPEAKER: No. Che cosa succede se non si dà eventuali argomenti della riga di comando? Ho appena scrivo dot barra MySum. AUDIENCE: 1 più 2 uguale a 3. SPEAKER: 1 più 2 uguale a 3. E sarà la stampa che fuori. Questo è esattamente vero. Vedrai che la stampa f linea in basso. Sarà stampare a, b, e allora la somma di ae b. E credo che si assume che somma funziona correttamente. Buona assunzione. OK, e cosa succede se io dare ciò che argomento? [? Manu? ?] AUDIENCE: Sarà aggiungere qualunque il primo argomento è quello di b. O per 2, mi dispiace. SPEAKER: Diritto, a 2. Qualcuno sa che cosa strtol fa? E 'fondamentalmente atoi. Atoi è in realtà una versione di fantasia di - o una versione più semplice di strtol. Ma in realtà usa strtol. E ho scoperto che fuori perché volevo qualcosa come atoi, e poi quando ho ho atoi, ho letto qui. E ho trovato "questo comportamento è la stessa "strtol. Quindi è fondamentalmente atoi per tutti gli effetti. E si vede che uso anche nullo e 10. Ciò consente in realtà si prende una stringa, e trasformarlo in un numero e scegliere quello base che si desidera farlo dentro Quindi questo è base 10 proprio qui. Avrei potuto fare la base per due decimali, base 16 per esadecimale. E 'piuttosto fresco. Ma per farla breve, questo richiede due numeri e li aggiunge insieme. Quindi cerchiamo di eseguirlo. E avrete anche notato, ci ci sono alcune cose - quindi ho un makefile proprio qui, e Se si apre che fino, alcune cose si noterà sono diversi. In particolare, questo argomento proprio qui, probabilmente non hanno visto prima. In generale, compiliamo le cose con il precipitare zero, zero. Dash zero, zero, significa non fare eventuali ottimizzazioni, compilatore. Non cercare di fare niente di eccezionale, o fare qualcosa di correre più velocemente, o scarica eliminare le variabili che sono necessarie. Non ottimizzare questo codice a tutti, Sto chiedendo di terzo livello ottimizzazione. Così sto chiedendo compilatore di fare un sacco di ottimizzazioni. È possibile modificare che nel makefile quando si dispone di questo codice, se si desidera di vedere cose diverse. Che vi mostreremo in un secondo. Così corriamo il mio somma 1 + 2 + 3. Qualcuno mi dia due argomenti. AUDIENCE: 4 e 5. SPEAKER: 4 e 5. Grazie. Grande, funziona. Quali sono alcuni altri buoni argomenti da provare, per assicurarsi che questo funziona? Chiunque? AUDIENCE: 0. SPEAKER: 0 e? AUDIENCE: Negativo 3. SPEAKER: Funziona. Ma quelli erano buone scelte. OK, torniamo qui. Questo è mysum.c. Noterai che c'è anche qualcosa chiamato sumfunction.c. E questo dice: oh, c'è qualcosa definito in sumfunction.c. Non includo il file in qui perché non ho bisogno di. Ma mi collego in quando compilo, che avete notato. Facciamo scorrere verso l'alto. Abbiamo visto quando abbiamo compilato MySum, a destra lì, abbiamo collegato al binario da sumfunction.o. E non ho bisogno di file di intestazione perché, ovviamente, c'è il dichiarazione di funzione. Così tagliente comprendono normalmente solo puts in una dichiarazione di funzione. Qui ho appena messo dritto nel codice. E quindi ho bisogno di fare è navigare in binario, cosa che faccio. Qualche ipotesi per quello che è in sumfunction.c? Quale codice che ho scritto in sumfunction.c? AUDIENCE: [incomprensibile]. SPEAKER: Qualche ipotesi? Sì? Pubblico: penso, definisce alcuni [incomprensibile]. SPEAKER: sì. Così faccio scrivere int somma int a. Scrivo questa linea, e poi ho aperto parentesi graffa, chiusa parentesi graffa. Cosa pensi scrivo dentro quelle parentesi graffe, all'interno di tale funzione? Sì? AUDIENCE: Return equivale a una. PROCESSORE: Questo è davvero un buon indovinare. Chi pensa [? Manu?] È giusto? Dice di ritorno a più b. OK, non tutti. [? Akshar,?] lo fai anche tu? Sei sicuro? OK. Cosa? AUDIENCE: è digitato male. SPEAKER: No, non l'ho fatto. Sì, solo scherzando. Hai ragione. Questo è esattamente quello che dice. E 'di ritorno a più b. Che fa un sacco di senso. Ok, torniamo qui. Vediamo come l'intestazione - questo è il tipo di ritorno. Ricordate, abbiamo visto quel giorno uno, il tipo della funzione di ritorno, ma va prima del nome della funzione int. Ecco, ho scritto int. Cosa pensi che succederà se in questo funzione, non scrivo int, ma Scrivo unsigned? La differenza, naturalmente, è che unsigned rappresenta solo positivo interi, e int possono essere positivo o negativo. Così ho cambiato il ritorno tipo di questa funzione. Questo codice non corrisponde questo ritorno tipo qui. Cosa pensi che succederà quando compilo? Si dovrebbe urlare contro di me. Senza urla. Che dire quando eseguo il programma? Facciamo prima di 0 negativo 3, o negativa 1. Funziona ancora, anche se sto dicendo sta restituendo un intero senza segno. Chiaramente questo non è il ritorno un intero senza segno. E 'il ritorno di un intero con segno. Sta tornando negativo 1. OK, questo è strano. Che dire se vado in qui e fare quello? Così ho cambiato tutto da int a unsigned. Si può prendere solo numeri interi senza segno. Ma noi continuiamo a pensare che sarà gestito? PUBBLICO: Sì. SPEAKER: Sarà. Questo è pazzesco. E passiamo in modo chiaramente assegnato integer, possiamo passare due firmato intero, funziona ancora. OK, qualche idea del perché ancora lavori, o cosa sta succedendo? Sì, Jeff. PUBBLICO: Ha qualcosa a che fare con l'ottimizzazione che si evidenziato. SPEAKER: No. Potremmo cambiare l'ottimizzazione, sarebbe ancora funzionare. Che posso fare per voi, ma - PUBBLICO: mi prendo la tua parola. SPEAKER: Già. Se si apre il makefile proprio qui, Ho cambiato l'ottimizzazione. Così si può fare precipitare zero, zero. Si continuerà a funzionare. Altri pensieri? Voi ragazzi tutti tenuti a lavorare, così perche 'ci si aspetta che funzioni? No? Silenzio. OK. Devo aspettare sette secondi, perché ho fatto una domanda. Quindi la cosa più cool C, e hai probabilmente sperimentato prima - si potrebbero non avere, questo potrebbe la prima volta. Ma, come tutti sapete, quando scrivo qualcosa in C, non salva come questo sul computer. E 'salvato come zeri e di uno. Si va da codice C in codice assembly. Qualcuno ha visto codice assembly prima, macchina di codice assembly? Vedremo in un secondo. Si va da codice C in codice assembly. E voi ragazzi conoscere le fasi di compilazione. Dovevi imparare a memoria che, per un quiz, e poi scrivere su quiz a zero. La maggior parte delle persone che si sono sbagliati. Penso che voi ragazzi inchiodato. Ma, voi ragazzi siete la migliore sezione per i quiz, tra l'altro. Che è impressionante. Non sarà male. Non essere preoccupato. Ma è davvero cool. Buon lavoro. Così va al linguaggio assembly, e poi va a zeri e di uno. E gli uni e zeri vengono salvati sul del computer, ed è quello che ha salvato in il a.out, o in questo caso, il file eseguibile. E il computer esegue uno e zero. Giusto? Abbiamo imparato prima. Quindi la cosa interessante è che questo unsigned idea, l'idea di tipi unsigned int, et cetera, et cetera, che è qui nel linguaggio C. Quelli esistono. Ma i tipi non esistono gli zeri e di uno. Tipi neppure non esistono realmente a il livello di linguaggio assembly. Ecco, questo è qualcosa che esiste in C mondo, ma non esiste in informatica mondo processore mondiale o. Ecco qualche astrazione che la C lingua ha incluso, per rendere il nostro vita più facile. Così, alla fine della giornata, posso scrivere molte cose diverse qui, ed è non fare la differenza. Dato che esiste solo nel mondo C. Non esiste nella zeri e di uno del mondo. E il nostro programma di esecuzione in gli uni e zeri mondo. Così la vostra mente non è chiaramente ancora bruciato. Ma penso che è cool. Sì, Jeff. PUBBLICO: Quindi, se invece di facendo int, char fate. E tu eri - SPEAKER: Facciamolo in un secondo. AUDIENCE: Perché allora si ottiene un unsigned passando da negativo a 128 127 o 0 a 255. SPEAKER: Così char è problematico. Qualcuno sa perché char sarebbe problematica, e si sarebbe in realtà cambiare le cose in quelle e azzera mondo? PUBBLICO: A causa delle dimensioni del carattere. SPEAKER: Dimensioni del char è 1. Così unsigned è anche 4 byte. Così char sarebbe avvitare le cose. Ma ciò che è di 4 byte che è in relativi a un char? O che aggiunge un ulteriore - si può mettere un altro personaggio dopo char. AUDIENCE: Char stella. SPEAKER: Char stelle dispone di 4 byte. Quindi cerchiamo di fare qualcosa che è una stella char. Quindi questo sarebbe probabilmente funzionerà, ma siamo intenzione di fare qualcosa di ancora più pazzo di questo. A mio parere, più pazzo. Ora ho scritto una funzione che restituisce un puntatore, e ci vuole un puntatore e un valore senza segno - faremo cambiare questo torna a int quindi non siamo fare troppi cambiamenti in una volta. E ha un array chiamato a, indici nella matrice e restituisce il indirizzo. Abbiamo visto questi operatori prima. Questo, cosa pensi che questo sta andando fare, in cambio, quando lo eseguo? Cosa pensi sta andando a fare? Qualche ipotesi? AUDIENCE: Segfault. SPEAKER: Cosa? Segfault? Questa è una buona congettura. Tom dice la stessa cosa. Tutte le altre ipotesi? Chi pensa che sta per fare la stessa cosa? Chi pensa che sta per segmentation fault? Si fa la stessa cosa. Scusi. Ma, naturalmente, abbiamo messo in 1 e 2. E quelli sono entrambi validi, giusto? Vediamo, possiamo andare al secondo posto di un array. Ma cosa succede se abbiamo fatto b un numero negativo? Questo è probabilmente una supposizione migliore per qualcosa di andare in segfault. Funziona ancora. OK, questo è ora pazzesco. Questa è la funzione di somma ugualmente validi. Questo fa la stessa cosa esatta come il ritorno a e b. Qualcuno può spiegare perché questa è una buona funzione di sintesi, o perché questo funziona? Che cosa sta succedendo qui? Perché questo fa la stessa esatta cosa come la nostra funzione di somma di età? [? Akshar,?] cosa sta succedendo? AUDIENCE: Perché quando si ha l'una che è un indirizzo di la memoria di locazione - e quando lo fai la commerciale, si va a quell'indirizzo di memoria. E quando si va in b, sei tipo di passi da che indirizzo di memoria in movimento, si sta tornando quello. Quindi sei in realtà, infatti, aggiungendo a e b [incomprensibile]. Dove sono operazioni standard su quella di ritorno? Come, da dove le parentesi cadono? E 'il ritorno del l'indirizzo su un prima o dopo [incomprensibile]? SPEAKER: Sta andando a indicizzare b - o indice in una - e poi restituire l'indirizzo. OK, così ha fatto capire a tutti cosa [? Akshar?] ha detto, e ha spiegato, perché questo funziona? Io no, la prima volta che qualcuno spiegato questo a me. Qualcuno dovrebbe scrivere una foto per spiegare questo? Stiamo andando a disegnare un quadro, con senza marcatori, che è grande. Trovato un po '. Quindi abbiamo una matrice che è una serie di scatole. Il primo è un indice 0, l'indice 1, 2, 3, 4, dot, dot, dot. Una matrice tipico. Ed oltre ad avere indici, tutti hanno indirizzi di memoria. Quindi cerchiamo di dare questo indirizzo di memoria 13, 14, 15, 16, 17, eccetera. Sono tutti qui finora. Quindi a è un indirizzo. Il nome di una matrice, un puntatore viene salvato lì. Si tratta di un puntatore, è una locazione di memoria, all'inizio della matrice. Quindi, se questo fosse la matrice, una sarebbe un valore di 13. E, naturalmente, possiamo dare un qualsiasi valore che vogliamo. Char stella a, possiamo dare un qualsiasi indirizzo di memoria che vogliamo. Siamo in grado di dare 0, possiamo dare negativo 1 - 1 negativo non esiste, così che è probabilmente problematico, ma hai visto che ha funzionato ancora. Così possiamo dare un qualsiasi numero che vogliamo, qualsiasi indirizzo di memoria che vogliamo. Poi, int b, dice, OK, andare in questo numero di passi nella matrice. Quindi, se b è uguale a 2, e un uguale 13, siamo in indirizzo di memoria 13. E andiamo due scale, e così siamo qui. E la commerciale significa ritorno l'indirizzo di questa posizione. E l'indirizzo è, ovviamente, 15. Così otteniamo 13 più 2, o un plus b, che è 15. La questione è, però - Mi dispiace. Vuol chiarire le cose per cui questo funziona? AUDIENCE: Perché dovrebbe funzionare in corso - così si può avere un array e andare ad un indice negativo? SPEAKER: Giusto. Così abbiamo fatto i numeri negativi, così che è il - fa questo senso, però, prima, [? Avi,?] per voi? PUBBLICO: Sì, io sono solo [Incomprensibile], ma - SPEAKER: Sì, questo sarebbe tornato 15. Se era 13, e b era 2, questa sarebbe tornato 15. AUDIENCE: Così l'indicizzazione zero non fa diventare un problema, giusto? Perché si sta spostando da 0. SPEAKER: Giusto. Così si sta muovendo - quindi se b era 0, non sarebbe spostare ovunque. E si era appena tornato l'indirizzo - se b è 0, che è essenzialmente ritorno che indirizzo di un. Passando in char stella una e restituendo il indirizzo di una è solo tornando a, sostanzialmente. OK, la domanda è: perché fare numeri negativi funzionano? E questa è la cosa veramente interessante di questo, perché questo dovrebbe segfault. E sarebbe segmentation fault se noi ha fatto qualcosa di simile. Diciamo, int. Quindi questo codice è identico e dovrebbero comportarsi allo stesso modo. Essenzialmente, x è una variabile spazzatura, e quindi questo dovrebbe comportarsi in modo identico. Facciamo questo - oops - in stella. OK, stiamo già ottenendo errori qui, perché è già sta per essere arrabbiato a me, perché già sa cosa sta per succedere. In particolare, il secondo. Indirizzo di memoria impilati associato con una variabile locale. In sostanza, non ho intenzione di compilare questo, e poi ho intenzione di annullare fare quello che abbiamo appena fatto. Ma perché siamo mai realmente accesso qual è nella memoria posizione, non sta andando a segmentation fault. Stiamo mai realmente guardando ciò che è nella seconda casella o che cosa è in ogni casella di questa matrice. Stiamo solo dicendo, ecco l'indirizzo della cosa stiamo cercando e non ritorno tale indirizzo. Stiamo mai effettivamente andare in matrice di guardare in quella posizione. E perché non abbiamo mai tocchiamo la memoria, non otteniamo in difficoltà. Non otteniamo un segfault. Se abbiamo cercato di, ancora una volta, toccare quella memoria, toccare ciò che era a o b - o una staffa b, e assumendo una era di 0 e - se era 0, anche, che sarebbe piuttosto male, perché non possiamo andare lungo tutto il tragitto. Se A e B erano entrambi 0, e abbiamo cercato di toccare ciò che era lì, allora avremmo finire nei guai. Ma se noi non tocchiamo quello che c'è, dobbiamo solo restituire l'indirizzo, è in realtà non andare a segmentation fault perché esso consente di eseguire tali operazioni. Si ottiene solo arrabbiato con te, e diventa super arrabbiato, quando si tenta e si tocca la memoria reale e restituire ciò che è in tale posizione di memoria. Ritiene che senso? Questo è solo una parte folle di C. Quindi, abbiamo un altro di questi. Chi pensa questo è cool? Più persone. Questo è un bene. OK, questo è il nostro ultimo. E vorrei che tu mi dica se o non pensi che questo sta andando a fare la stessa cosa esatta. Ho questi scritto da qualche parte. Io non li sto memorizzare. Vediamo, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Quindi questo è un array, ora, non una funzione. Ed è un array perché abbiamo quadrato parentesi, parentesi graffe non. Ed è un array di che tipo? Chiunque, hmm? PUBBLICO: Il loro numeri esadecimali? SPEAKER: Ma qual è il tipo C? Sono tutte dotate di numeri esadecimali. Qual è il tipo C? Vi dice. PUBBLICO: E 'caratteri non firmati. SPEAKER: Destra, caratteri non firmati. E due numeri esadecimali è un byte. Quindi questi sono 1, 2, 3, 4, 5, 6, 7, 8, 9 byte. E 'una matrice di 9 byte. OK, probabilmente già sapete la risposta a questa domanda. Ma, che cosa pensi che succede quando eseguo questo? Io dico, ancora una volta, in mysum.c, Mi aspetto una funzione che prende due interi. E sto invece dicendo che somma è un array di caratteri. Cosa sta per accadere quando Corro. / MySum e faccio? Beh, in primo luogo, la maggior parte di voi probabilmente sarà d'accordo che il make - oh no, sto scherzando. Cosa ho fatto di sbagliato? Uh oh. Questo dovrebbe essere parentesi graffe. Ecco come si inizializza un array. Il mio male. Così abbiamo già visto prima che i tipi sono un'astrazione di livello C, non un livello di computer astrazione. Così la maggior parte di voi probabilmente previsto per fare, o supponendo che avrebbe. Ma che cosa quando corro. / MySum? Cosa succederà? Qualche ipotesi? AUDIENCE: Sta andando a stampare una parola. SPEAKER: Sta andando a stampare una parola. Quale parola? AUDIENCE: [incomprensibile]. SPEAKER: Tutte le altre ipotesi? OK, stampare una frase. Si può avere qualsiasi frase. Che sarà al tuo fianco. Chiunque ha una congettura diverso? Anna, qual è la tua ipotesi? AUDIENCE: Sarà stampare - due lettere, o [incomprensibile] una lettera. SPEAKER: Una lettera. PUBBLICO: Posso contare come molti [incomprensibile]? SPEAKER: Nine. Beh, ho intenzione di eseguirlo. Si fa la stessa cosa esatta. E aggiunge due numeri insieme. Bene, passiamo i due argomenti. Non ci vuole argomenti. Quindi non so dove si potrebbe eventualmente ottenere questi argomenti. Ma passiamo a 100 e 0. E aggiunge 100 e 0. Questo è pazzo. Credo di sì. Negativo 4, che funziona anche. Si può fare tutto quello che vuoi. Questa è una funzione somma altrettanto valida. Questa è una funzione di somma. Ma, no, stai dicendo che è una matrice di byte. Così che cosa sta succedendo qui? Così, ancora una volta, torniamo a questa idea che abbiamo detto all'inizio. Si va da codice a livello di C, al montaggio lingua, di zeri e di uno. Questo è esadecimale. Ma questo è davvero solo un sacco di zeri e di uno. Questo è di 72 zeri e di uno, giusto? 72 zeri e di uno. 9 byte. Ogni byte ha 8 bit. Ogni bit è un uno o uno zero. Quindi, 72 quelli o zeri. Ho semplicemente scritto come questo - piuttosto che scrivere fuori come un sacco di zeri e di uno. Ma questo passerà dal livello del C linguaggio, al montaggio lingua, al codice. E questo stamperà nel codice, da qualche parte, questi 72 zeri e di uno che ho qui scritto. Così, da qualche parte in questo - andiamo qui - qualche parte in MySum, il programma, ci sono questi 72 zeri e di uno che ho scritto e detto che scrivere. Ora, ogni ipotesi per ciò che coloro 72 zeri e di uno significano? AUDIENCE: Probabilmente lo stesso cosa come ritorno un plus b. SPEAKER: Probabilmente lo stesso cosa come ritorno un plus b. Cerchiamo di verificare che. Cerchiamo di capire come ho fatto questo. Quindi se andate di nuovo qui, ti dico per eseguire questo comando, objdump-S sumfunction.o. Andiamo eseguirlo. objdump - obj, discarica. Fondamentalmente mi può dare quello che voglio vedere. Mi può dare il linguaggio assembly. Mi può dare gli zeri e di uno. Ha un sacco di bandiere. Questo è quello che stiamo andando da utilizzare per ora. Dot - come si vede nelle slides - capitale dash S dice, intervallare, codice sorgente - questa linea è da C - con il gruppo codice e con quelli e zeri. E stiamo andando a correre su sumfunction.o. Perché sarà più facile da vedere. Anche in questo caso - hmm? AUDIENCE: è digitato male. SPEAKER: Ma in realtà sto andando per cancellare per un secondo. Io prima di andare ad aprire solo sumfuntion.o. AUDIENCE: Lei digitato è sbagliato la prima volta. SPEAKER: Classic. Sum - che è una parola difficile, però. Sareste sorpresi. Ok, quindi questo è sumfunction.o. Non riuscivo nemmeno a dirvi. C'è un sacco di zeri, chiaramente un sacco di zeri, e c'è qualche altro roba che non è zero. Ma per lo più zeri. Sembra che ci sono alcuni tra quelli. Quindi, chiaramente, questo è difficile da leggere. Questo è il linguaggio binario. Vediamo ora aprirlo - che cosa? Che cosa sto facendo di sbagliato? Ho incantesimo correttamente? OK, questo è imbarazzante. Ho bisogno di un secondo per capire che cosa sto facendo male. Questo è un errore. Che strano. Oh, ecco perché. Ho intenzione di tornare al nostro iniziale uno, in modo che possiamo guardare al codice oggetto della presente. Perché non c'è davvero di essere nulla quando abbiamo appena messo il zeri e di uno dentro Ci andiamo. OK, così tutti possono vedere questo. Questa funzione, come ho detto, mettere le linee C - linee di codice sorgente - con alcune istruzioni di montaggio. Ecco la nostra linea di codice. Eccone uno, qui è un altro. Ecco le istruzioni di montaggio. Questo è quello che sembrano. Istruzioni di montaggio - si può imparare di più di questi se si prende altre classi CS, ma sono generalmente un'istruzione. E poi una sorgente e una destinazione. E poi qui è il codice binario che corrisponde a tale assembly istruzioni. Quindi, come potete vedere, questa funzione somma, alla fine della giornata, è tre istruzioni di montaggio. Solo tre. One mov - m-o-V sta per una mossa. Aggiungi sta per Aggiungi. E r-e-t è l'acronimo di Return. Così uno mov, un componente aggiuntivo, uno di ritorno. E questi, qui, sono gli zeri e quelli che corrispondono a tale codice. Quindi questi zeri e quelli, se si sai quelli, si può semplicemente mettere quelli dritto dentro E poi lo farà il stessa identica cosa. Poiché, al termine della giornata, tutti si sta eseguendo è una lunga serie di zero e uno. Ed è quello che il codice è in realtà. E la ragione - diamo un'occhiata a una cosa. Avevo il makefile aperto? Quindi, se siamo tornati a precipitare zero, zero fino qui - Spiacenti, il capitale o capitale o zero, non zero, zero. E abbiamo fatto fare, sarebbe continua a funzionare lo stesso. Ma ora si nota che ci sono un molto di più istruzioni per il montaggio. Ecco perché, ancora una volta, ho chiesto al compilatore di non fare alcuna ottimizzazione. Così ho potuto ancora prendere tutti questi zero e uno, e gettarle in, e che avrebbe funzionato. Ho appena fatto le ottimizzazioni, perché è un po 'più facile, quindi, scrivere tale matrice. Ma questo dovrebbe funzionare altrettanto bene. OK, stiamo andando a fare una cosa finale, perché penso che è la parte più bella. Anche se tutti sono chiaramente già soffiato e senza parole. Le nostre menti sono bruciati. [Incomprensibile] Quindi, questi sono da una classe CS diverso, che è super interessante, che ho preso - CS61. Vivamente vi incoraggio a prendere. Ma la parte interessante di questo fatto, che le cose sono solo zero e uno, sono che tutto è zero e uno. Così si può prendere un file che ha il zeri e quelli corretti che desideri da qualche parte in essa, e utilizzare quel tratto di zeri e quelli in funzione somma. Cosa voglio dire con questo? Voglio dire, si può prendere un file di immagine ha la corretta serie di zeri e quelli, che stampano qualcosa ad un'immagine. E un programma potrebbe interpretare è un immagine, ma si può interpretare, se si vuole, come una funzione somma. Quindi, se volessimo aprire, per esempio, questa immagine. Andiamo, Ciao Kitty. Wonderful little immagine. Qui vi è quella stringa di zero e uno. Quei 72 zeri e quelli presenti in questa immagine. Allora cosa posso fare, allora, è scrivere - Devo ricordare dove sono. Io trovo che in un secondo. Ma facciamo - mi permetta di scoprire dove sono. Uno sec. Facciamo - AUDIENCE: [incomprensibile]. SPEAKER: Grazie. Quindi, se eseguiamo questo programma, che invece si legge in un file, poi va per questo indice nel file. E poi, di nuovo, proprio come MySum, prende due numeri. Possiamo aggiungere i numeri esattamente come stavamo facendo prima, che va a mostrare come il fatto che, alla fine della giornata, tutte queste cose sono zero e uno. Ed è proprio come si sceglie interpretarli. E se effettivamente osservate in questa immagine - cerchiamo di zoom in un po '. Chiunque può vederlo? Noterete qui, c'è qualche macchia strano. Andiamo - questa è l'immagine originale. Noterete qui non c'è macchia. Questo è il codice per la funzione somma, è quella piccola macchia proprio lì. E in realtà, ancora una volta, se si impara di più su questo, vi renderete conto che questo Ciao Kitty, che ha anche un grande sbavature, dispone di codice che può prendere più di un computer se non è protetto opportunamente. Così si può effettivamente eseguire questo. Non ho intenzione di correre subito. Ma è possibile eseguire questo Ciao Immagine Kitty, e si può prendere in consegna il computer. Ecco, questo è tutto per la demo. Qualcuno ha delle domande, commenti, preoccupazioni? Penso che questa roba è affascinante. E mi ha ispirato per saperne di più. Mi raccomando, se siete interessati a tutti sul CS, parlare con me. Anche se io sono uno Studi Sociali Concentratore, io sono un CS, secondaria, così So ancora un po '. Ma di certo so cosa classi si dovrebbe prendere. Penso che sia tutto davvero interessante, e vi incoraggio, certamente, a Saperne di più se siete interessati. OK, ho un'ultima cosa. Scusi. Tutte le domande? Non mi soffermo ad aspettare se qualcuno aveva dei dubbi che. C'è qualcuno sarà un concentratore CS? O pensarci? Uno, due, tre, quattro. One - solo uno. Anna è l'unica mano che è sollevata autorevolmente. OK, questo è cool. Assam, cosa hai intenzione di fare? AUDIENCE: [incomprensibile]. SPEAKER: Constantine? AUDIENCE: Fisica. SPEAKER: Whoa, che è stato veloce. Hai avuto una brutta esperienza in CS50? [Incomprensibile], cosa hai intenzione di fare? PUBBLICO: Non ho idea. SPEAKER: Curt? AUDIENCE: Econ o CS. SPEAKER: Econ o CS. Tom? PUBBLICO: Sto facendo Stat. SPEAKER: Stat? OK. Che cosa sei? AUDIENCE: Me? SPEAKER: Già. AUDIENCE: Stat. SPEAKER: Stat. Oh, ci si va. Tom, parlare Alden. Emily, che cosa sei? AUDIENCE: Biomedical - SPEAKER: Sei in questa sezione? PUBBLICO: No. SPEAKER: OK, questo è Emily. Lei è la mia amica. Chiaramente non è che il bene di un amico, perché mi dà un momento difficile. Potresti essere più bello per me davanti di tutti, mio ​​studente - PUBBLICO: Sto facendo la tua guida Q. SPEAKER: Davvero? Uh oh. OK, sei incredibile. Ti amo così tanto. Oh boy. Comunque, io, ieri sera, come tutto - Sono sicuro che a tutti sembra davvero sottolineato in questo momento. Non lo so, sono matricola - sono voi ragazzi sentirsi stressato? Mi sento stressato. E 'stato come, vai a casa per il Ringraziamento. Sei come, ho intenzione di fare tutte queste cose. PUBBLICO: E 'così diverso. SPEAKER: Sì, e si torna. Jeff, non ti senti in quel modo? PUBBLICO: Ho solo pensato Farei un po '. SPEAKER: OK, grande. Così ho tornare indietro, e non ho fatto nulla. Ed è tutto super-stressante. E mi riguarda, sinceramente interessato, circa se o non sono andando a finire tutto quello che devo. Ma ieri sera, non è stato sottolineato, Ero solo un po 'triste. Così ho scritto nel mio diario su quello che ero triste. E io ero triste per questa sezione in questa classe sta per finire. Così stavo andando a leggere per voi ragazzi un piccolo frammento del mio diario, dalla notte scorsa. Posso ottenere alcuni tovaglioli, alcuni tessuti di Tom? No, io vado a piangere. Io non piango. Non che non si può piangere, Io proprio non piangere. Io non so nemmeno se la mia lacrima ghiandole lavorato - condotti lacrimali. Non ho pianto in un tempo lungo. AUDIENCE: [incomprensibile]. SPEAKER: Ok, grazie. OK, c'è un po 'di prefazione - ci sono alcune altre parti del mio diario voce, perché cerco di diario ogni sera prima ho avuto a letto. Consiglio vivamente journaling. Ti aiuta a elaborare le cose, e anche essere molto riconoscenti della vostra giornata. E rende molto più facile da guardare indietro il giorno e rendersi conto che c'erano un sacco di bene cose che sono successe. Anche se si sente veramente stressato di notte o veramente sconvolto, o davvero triste o stanco. Oh, mio ​​dio. Io non so nemmeno se è scritto che bene perché non ho rileggere. Ma ci leggiamo. Io di solito non leggo il mio giornale, ovviamente. "Domani, io ti insegno il mio finale Sezione CS50 dell'anno. E 'pazzesco come il tempo vola veloce. Eppure, mi colpisce quanto sia diverso la mia esperienza di insegnamento di quest'anno è stato rispetto a quando ero al secondo anno. Per cominciare, ho sicuramente conoscere il materiale migliore. Ma non dirlo a mia prima coorte di alunni che. Ancora più importante, però, mi sono reso conto che la gioia che viene da standing davanti a una camera di ciò che inizia come stranieri, ma finisce come, a Almeno, amici di Facebook, è Non un colpo di fortuna del primo anno. Piuttosto, è da sapere che, in qualche modo, si sta aiutando talento, riflessivo, delizioso, e persone appassionate imparano un po 'di più scienza del computer. Si sta spostando che la lampadina solo una bit nel suo zoccolo, in modo che sia in grado a brillare più luminosa di te, oppure, avrebbe potuto immaginare a inizio semestre. Stai aiutando trasformare quelle aggrotta le sopracciglia a testa verso il basso e fare domande che fornire sostegno, ma consentono ancora agli studenti di alzarsi in proprio. Non è certamente un'esagerazione dire che questa sezione è il mio preferito parte della settimana. O anche che ho esitato a dire, che è tutti, alle 05:30 ogni settimana, sapendo che sarà troppo lunga fino a quando ci incontreremo di nuovo. Eppure, io sono incredibilmente grato a tutti quelli che mi ha dato questo opportunità di restituire agli altri. Per David, per la sua pazienza e fiducia. Per la troupe e della produzione, per farmi fare un po 'di tutto rispetto. E, soprattutto, per i miei studenti, senza il quale non avrei motivo di passare 10 ore per capire al meglio modo di disegnare i puntatori, o stendere un Tavolo di delfini, tramite JavaScript. Come sempre, è stata una benedizione. " Quindi, con questo, grazie ragazzi. Ci vediamo tutti in fiera CS50, e l'Hackathon, se ci sei. E se avete domande, sarò il bastone intorno fino a quando non ci sono più. Ma ti ringrazio ragazzi per un anno meraviglioso. [Applausi] SPEAKER: Potrei piangere.