Speak: OK, så, du kommer inte tro det, men förra veckan, på måndagen, i Pierce, jag var nere i källaren. Jag går aldrig till Pierce. Och jag kommer aldrig tillbaka igen, eftersom Jag lämnade mina saker ensam, gillar, fem minuter och någon stal min dator och min telefon ur min ryggsäck. Vilket betyder att jag fick den tillbaka, och då mindre än en vecka senare den blev stulen igen. Och sedan fick påslagen - Hitta min iPhone fortsätter att vara till föga hjälp. Så jag fortsätter att uppmuntra du inte använda det. Det visade på en gång, och det var på MIT, som 15 minuter senare, och den som kallas detta telefonnummer som visade upp i min AT & T samtalsloggen. Så jag gick ut på nätet, som kallas den telefonen nummer, och det gick direkt till detta svarare på spanska. Och jag har inte hört talas om det sedan. Så jag var tvungen att få en ny dator och telefon. Jag vet. Yeah. Men om ni vill chip i min dator fonden efter detta, det är därför Jag har bett dig här. Skojar bara. Men det var verkligen sorgligt och traumatiskt. Men det är tillbaka nu, och det var därför p-set 8 tog så lång tid, eftersom Jag hade inte en dator. Och någon stal den. Och jag mailade och frågade om de skulle grade din p-set 8. Men de sade nej. Och jag var som, kan jag ha min dator tillbaka? Och de är som, nej. Skojar bara. OK. Detta är vår sista avsnittet, och jag har ett par - vi har bara tre saker på dagordningen. Vi kommer att prata lite om Q guide. Sen ska vi spendera 15 minuter på en sval demo. Sen ska vi alla säga adjö till en annan. Du behöver egentligen inte dina datorer eller en penna eller papper för att göra anteckningar, eller följa med. Så jag antar att om du har din dator upp, då du är på Facebook. Bara att säga. Såvida du fyller i Q-Guide, som är först. Q guide är öppen. Du har haft ett mail om det. När alla Q grejer avser det slutet av året, jag får alla Q kommentarer i poäng från alla som väljer att ge mig feedback. Och så när du går i Q - Jag vet inte om du kan göra detta, Jeff, eftersom du är och förlängnings elev. Men när du går i Q, om du inte har gjort det tidigare, du väljer din lärare, som är David Malan. Du måste göra honom. Och då kan du plocka TF. Och du kan plocka så många TF som du vill. Men det finns 60 av oss. Du behöver inte plocka alla. Du kan bara hämta mig, eller bara plocka en par andra människor, om du vill, till ge dem feedback också. Och då får du poäng på alla dessa olika axlar, och sedan kan du lämna dem feedback. Och sedan, som en månad senare, Jag tar allt som återkoppling. Och precis som den feedback du har varit ger mig hela terminen, jag Läs allt om det. Och det är riktigt bra, och det hjälper mig att växa som lärare och som en individ. Så snälla, ta lite tid att göra det. Vi ska bara vara här för, typ, 30 minuter. Så om du vill, i slutet av detta, till ta fem minuter, och bara fylla i Q, eftersom den inte tar mer tid än så. Det skulle vara underbart, och du också få dina betyg tillbaka snabbare om du fyller i Q. Så de flesta av er har gjort det förut - eller nej, ungefär hälften av er har gjort det förut. Men om du är en nybörjare, det är vad det är. Det ska vara lika för alla klasser. Gör det. Det tar fem minuter. Men också, om du gör det lite på allvar, det är inte det värsta i världen, eftersom jag verkligen ta det på allvar. Så om du lämnar mig en smiley, Jag kommer att uppskatta det. Men jag skulle också uppskatta om du lämnade mig mer än en smiley. Men det är upp till dig. Jag kan inte berätta för dig - eller som en stor smiley ansikte, med stort D. Det skulle bli ännu bättre. OK, det är allt jag har för F. Om du har frågor, kan du be mig, men ganska självförklarande. Precis, snälla, fyll ut det. Jag skulle verkligen uppskatta det, och det betyder mycket för mig. OK, det är vad vi kommer att spendera 15 minuter att gå igenom. Jag ska visa er lite kod. Jag tror att det är riktigt coolt, och detta fick mig mer upphetsad i datavetenskap. Så jag hoppas att det kommer att göra det samma för er alla. Vi kommer att öppna upp - och allt detta kod jag skickar till dig senare. Men vi kommer bara att öppna upp - Jag är i min terminal - vi kommer att öppna upp programmet heter [? MySum. ?] Kan alla läsa det, eller ska jag göra det större? Kan någon berätta för mig vad den här koden kommer göra när jag kör den, eller vad det Programmet kommer att göra när jag kör den? [? Avi,?] Vad tror du det kommer att göra? Slutför tugga. Du ska inte prata med munnen öppen. PUBLIK: Tar det ett gäng argument, hitta summan av dem återvänder summa, och sedan skriva ut den? Eller det tar två argument, och då gör det [OHÖRBAR]. Och sedan skriver ut vad resultaten är. Speak: Nära, riktigt nära. Någon som vill lägga till [? vad Avi?] sa? Behöver du ge det här programmet alla kommandoradsargument? PUBLIK: Nej. Speak: Nej. Vad händer om du inte ger det alla kommandoradsargument? Jag skriver bara punkt snedstreck MySum. PUBLIK: 1 plus 2 är lika med 3. Speak: 1 plus 2 är lika med 3. Och det kommer att skriva ut det. Det är precis rätt. Du ser att utskrifts f Raden längst ner. Det kommer skriva ut a, b, och då summan av a och b. Och jag antar att du utgår från att Summan fungerar korrekt. Bra antagande. OK, och vad händer om jag ge den vad argument? [? Manu? ?] PUBLIK: Det kommer att lägga till vad det första argumentet är att b.. Eller till 2, sorry. Speak: Rätt, till 2. Är det någon som vet vad strtol gör? Det är i grunden atoi. Atoi är faktiskt en prydlig version av - eller en enklare version av strtol. Men det faktiskt använder strtol. Och jag fann att eftersom jag ville något som atoi, och sedan när jag gjorde atoi, jag läste här nere. Och jag hittade "detta beteende är densamma som "strtol. Så det är i princip atoi för alla avseenden. Och ni ser använder jag även noll och 10. Det låter faktiskt du tar en sträng, och förvandla det till ett nummer och väljer vilken bas du vill göra det i. Så detta är basen 10 här. Jag kunde ha gjort basen två för decimal, bas 16 för hexadecimal. Det är ganska coolt. Men lång historia kort, tar det två siffror och lägger ihop dem. Så låt oss köra den. Och du kommer också att märka det är några saker - så jag har en makefile just här, och om du öppnar upp det, vissa saker du kommer att märka är olika. Särskilt detta argument här har du förmodligen har inte sett det förut. Generellt vi sammanställa saker med streck noll, noll. Dash noll, noll, betyder inte göra alla optimeringar, kompilator. Inte försöka göra något fint, eller göra vad som helst springa snabbare, eller få rid av variabler som är nödvändiga. Inte optimera denna kod alls, Jag ber om tredje-nivå optimering. Så jag ber kompilatorn att göra många optimeringar. Du kan ändra på det i makefile när du har denna kod, om du vill att se olika saker. Som vi ska visa på en sekund. Så vi kör min summa 1 plus 2 plus 3. Någon ge mig två argument. Publik: 4 och 5. SPEAK: 4 och 5. Tack. Bra, det fungerar. Vilka är några andra bra argument att försöka, att se till att detta fungerar? Någon? Publik: 0. Speak: 0 och? PUBLIK: Negativ 3. Speak: Det fungerar. Men de var bra val. OK, så låt oss gå tillbaka hit. Detta är mysum.c. Du kommer att märka det finns också något kallas sumfunction.c. Och detta säger, åh, det är något definieras i sumfunction.c. Jag inkluderar inte den här filen här eftersom jag inte behöver. Men jag länka den i när jag kompilera, som ni märkt. Låt oss bläddra uppåt. Vi såg när vi sammanställt mysum, höger där, vi kopplade in den binära från sumfunction.o. Och jag behöver inte sidhuvudfilen eftersom, naturligtvis, det är funktionsdeklarationen. Så skarp omfattar normalt bara sätter i en funktionsdeklaration. Här har jag bara uttrycka det rakt i koden. Och så jag behöver göra är länk i binärt, vilket jag gör. Alla gissningar om vad som är i sumfunction.c? Vilken kod jag skrivit i sumfunction.c? PUBLIK: [OHÖRBAR]. Speak: Några gissningar? Yeah? Publik: Jag tror, ​​definierar några [OHÖRBAR]. Speak: Ja. Så jag skriver int sum int en. Jag skriver denna linje, och sedan har jag öppet klammerparentes, stängt klammer. Vad tror du att jag skriver inuti dem krullparenteser, inuti som fungerar? Yeah? PUBLIK: Return lika med en. PROCESSOR: Det är en riktigt bra gissning. Vem tänker [? Manu?] Är rätt? Den säger returnera ett plus b.. OK, inte alla. [? Akshar,?] du också? Är du säker? OK. Vad? PUBLIK: Du stavade det fel. Speak: Nej, det gjorde jag inte. Ja, bara skojar. Du har rätt. Det är precis vad den säger. Det är åter ett plus b.. Det gör mycket vettigt. OK, låt oss gå tillbaka hit. Vi ser hur huvudet - det är returtypen. Kom ihåg, har vi sett att dag ett, de tillbaka typ av funktionen, men går innan namnet på int-funktionen. Här har jag skrivit int. Vad tror du kommer att hända om detta funktion, kan jag inte skriva int, men Jag skriver osignerad? Skillnaden, naturligtvis, är att osignerade representerar endast positiva heltal, och int kan vara positivt eller negativt. Så jag har ändrat returen typ av denna funktion. Denna kod stämmer inte denna avkastning skriver här. Vad tror du kommer att hända när jag sammanställa? Du skulle skrika på mig. Ingen skriker. Vad händer när jag kör programmet? Låt oss göra före 0 negativ 3, eller negativ 1. Den fungerar fortfarande, även om jag säger det åter ett heltal utan tecken. Klart det inte återvänder ett heltal utan tecken. Det åter ett heltal. Det åter negativ 1. OK, det är konstigt. Vad händer om jag går in här och göra det? Så jag har ändrat allt från int till osignerade. Det kan bara ta osignerade heltal. Men vi tycker fortfarande att det ska köras? PUBLIK: Ja. Speak: Det kommer. Det är galet. Och vi passerar i en tydligt tilldelad heltal, kan vi passera två undertecknade heltal, det fungerar ändå. OK, några idéer om varför det fortfarande fungerar, eller vad som händer? Ja, Jeff. PUBLIK: Det har något att göra med din optimering som du markeras. Speak: Nej. Vi skulle kunna ändra optimering, det skulle fortfarande fungera. Jag kan göra det för dig, men - PUBLIK: Jag tar ditt ord för det. Speak: Ja. Om du öppnar makefile just här, Jag ändrade optimering. Så du kan göra streck noll, noll. Det kommer fortfarande att fungera. Andra tankar? Ni alla förväntas arbeta, så Varför gjorde du förväntar dig att det ska fungera? Nej? Tystnad. OK. Jag måste vänta sju sekunder, för att jag ställde en fråga. Så det häftiga med C, och du har förmodligen upplevt tidigare - du kanske inte har, detta kan vara första gången. Men som ni alla vet, när jag skriver något i C, inte spara som detta på datorn. Det sparas som ettor och nollor. Den går från C-kod till assemblerkod. Har någon sett assemblerkod innan, maskin assemblerkod? Vi kommer att titta på i en sekund. Den går från C-kod till assemblerkod. Och ni vet de stadier för sammanställning. Du var tvungen att memorera det för frågesport en, och sedan skriva ut det på quiz noll. De flesta fick det fel. Jag tycker att ni spikade det. Men, ni är den bästa delen för frågesporter, förresten. Vilket är awesome. Det kommer inte att skada dig. Var inte orolig. Men det är riktigt coolt. Bra jobbat. Så det går att assembler, och sedan går till ettor och nollor. Och de ettor och nollor sparas på dator, och det är det som sparats i den a.out, eller i det här fallet, den körbara filen. Och datorn kör ettor och nollor. Rätt? Vi har lärt oss det här förut. Så det häftiga är, denna osignerade idé, idén om typerna Ints osignerad, et cetera, är et cetera som här uppe i C-språket. De existerar. Men typer som inte existerar på ettor och nollor. Typer inte ens egentligen existerar på nivå i assembler. Så det är något som finns i C värld, men finns inte i datorn värld eller processor värld. Det är några abstraktion att C språk har inkluderat, för att göra vår liv enklare. Så i slutet av dagen, kan jag skriva många olika saker här, och det inte göra skillnad. Eftersom det bara finns i C-världen. Det finns inte i ettor och nollor världen. Och vår programmets körs i ettor och nollor världen. Så ditt sinne klart inte blåst än. Men jag tror att det är coolt. Ja, Jeff. PUBLIK: Så, om i stället för gör int, gör du röding. Och du var - Speak: Låt oss göra det på en sekund. PUBLIK: För då får du en osignerad går från negativt 128 till 127 eller 0 till 255. Speak: röding är problematisk. Är det någon som vet varför röding skulle vara problematiskt, och det skulle faktiskt förändra saker i dem och nollställer världen? Publik: På grund av storleken av röding. Speak: Storlek på röding är 1. Så osignerade är också 4 byte. Så röding skulle skruva upp saker. Men vad är 4 byte som finns relaterade till en röding? Eller som lägger ytterligare en - du kan sätta en mer karaktär efter röding. PUBLIK: Char stjärna. Speak: Char stjärnan har 4 byte. Så låt oss göra något det är en röding stjärna. Så här skulle nog fungera, men vi är kommer att göra något ännu galen än detta. Enligt min mening, galnare. Jag har nu skrivit en funktion som returnerar en pekare, och det tar en pekare och en osignerad värde - vi kommer ändra detta tillbaka till int så vi är inte göra för många förändringar på en gång. Och den har en array kallas en, index in i matrisen och returnerar adress. Vi har sett dessa operatörer innan. Detta, vad tror du det går att göra, i gengäld, när jag kör den? Vad tror du att det kommer att göra? Några gissningar? PUBLIK: segfault. Speak: Vad? Segfault? Det är en bra gissning. Tom säger samma sak. Några andra gissningar? Vem tror att det kommer att göra samma sak? Vem tror att det kommer att segfault? Den gör samma sak. Ursäkta. Men, naturligtvis, sätter vi in ​​1 och 2. Och de är båda giltiga, eller hur? Låt oss se, kan vi gå till andra plats i en matris. Men tänk om vi gjorde b ett negativt tal? Det är förmodligen en bättre gissning för något segfaulting. Det fungerar fortfarande. OK, det är nu galet. Detta är av lika giltig summa funktion. Detta gör exakt samma sak som avkastning a och b. Kan någon förklara varför detta är ett bra Sammanfattningsvis funktion eller varför detta fungerar? Vad händer här? Varför detta gör exakt samma sak som vår gamla summa funktion? [? Akshar,?] vad händer? PUBLIK: För när du har en en som är en adress till platsen minne - och när du gör et-tecknet, det går till den minnesadress. Och när du går till b, du slags rörliga steg från den minnesadress, du returnera det. Så du är faktiskt i själva verket tillsats av a och b [OHÖRBAR]. Var är vanliga operationer på att avkastningen? Liksom, var ska parentes faller? Är återkomsten av den adress på en före eller efter [OHÖRBAR]? Speak: Det kommer att index till b - eller indexet till en - och sedan returnera adressen. OK, så gjorde alla förstår vad [? Akshar?] sade, och förklarade varför det här fungerar? Det gjorde jag inte, den första gången någon förklarade detta för mig. Skulle någon vilja ha en bild att förklara detta? Vi ska rita en bild, med inga markörer, det är bra. Hittade några. Så vi har en array som är en serie av kartonger. Den första är ett index 0, index 1, 2, 3, 4, punkt, punkt, punkt. En typisk matris. Och förutom att ha index, de har alla minnesadresser. Så låt oss ge denna minnesadress 13, 14, 15, 16, 17, et cetera. Alla är här så långt. Så en är en adress. Namnet på en matris, en pekare sparas där. Det är en pekare, det är en minnesplats, till början av arrayen. Så om detta var arrayen, en skulle vara ett värde på 13. Och, naturligtvis, kan vi ge ett valfritt värde som vi vill. Char stjärna en, kan vi ge en något minnesadress som vi vill ha. Vi kan ge den 0, kan vi ge den -1 - negativt 1 existerar inte, så det är förmodligen problematiskt, men du såg att den fortfarande fungerade. Så vi kan ge ett valfritt antal vi vill ha, varje minnesadress som vi vill ha. Sedan, int b säger, OK, går detta nummer av steg i arrayen. Så om b är lika med 2, och a är lika med 13, vi är på minnesadress 13. Och vi går två steg i, och så vi är här. Och et-tecknet betyder avkastning adressen till den här platsen. Och adressen är, naturligtvis, 15. Så vi får 13 plus 2, eller a plus b, vilket är 15. Frågan är dock - Jag är ledsen. Innebär att klargöra saker om varför detta fungerar? PUBLIK: Varför skulle det fungera att gå - så du kan ha en matris och gå till en negativ index? Speak: Rätt. Så vi gjorde negativa tal, så det är det - gör denna mening men, första, [? Avi,?] för dig? PUBLIK: Ja jag är bara [OHÖRBAR], men - Speak: Ja, det skulle återvända 15. Om en var 13, och b var 2, detta skulle återvända 15. PUBLIK: Så noll indexering inte bli ett problem, eller hur? För att du ska flytta från 0. Speak: Rätt. Så du ska flytta - så om b var 0, skulle du inte flytta någonstans. Och du hade just återvänt till adressen - om b var 0, det är i huvudsak returnera den adressen för en. Passerar i röding stjärn a och returnera adressen för en är bara tillbaka en, väsentligt. OK, är frågan varför negativa tal fungerar? Och det är det riktigt häftiga med detta, eftersom detta skulle segfault. Och det skulle segfault om vi gjorde något liknande. Låt oss säga, int. Så här koden ser identiska och bör bete sig på samma sätt. I huvudsak, x är ett skräp variabel, och så detta bör bete sig på samma sätt. Låt oss göra det här - oops - i stjärnan. OK, vi är redan få fel här, eftersom det redan kommer att bli arg på mig, eftersom det redan vet vad som kommer. I synnerhet den andra. Adress staplat minne associerat med en lokal variabel. I huvudsak, jag kommer inte att kompilera detta, och sedan kommer jag att ångra göra vad vi gjorde just. Men eftersom vi är aldrig komma åt vad som finns i minnet plats, det kommer inte att segfault. Vi är aldrig tittar på vad som finns i den andra rutan, eller vad som finns i varje låda i denna matris. Vi säger bara, här är adressen av det vi letar efter och returnera den adressen. Vi ska aldrig gå in i array för att titta på den platsen. Och eftersom vi rör aldrig minnet, vi inte hamna i problem. Vi får inte en segfault. Om vi ​​försökte igen, tryck att minne trycker du vad som var på a eller b - eller en konsol b, och förutsatt a var 0 och - Om en var 0, och med, det skulle vara ganska dålig, eftersom vi inte kan gå ner hela vägen dit. Om A och B var både 0, och vi försökte beröra det som var där, då skulle vi hamnar i trubbel. Men om vi inte röra vad som finns där, vi tillbaka bara adressen så är det faktiskt inte att segfault eftersom det kan du utföra dessa operationer. Det blir bara arg på dig, och blir super arg, när du försöker och röra själva minnet och återgå vad vid denna minnesplats. Låter det vettigt? Det är bara en galen del av C. Så, vi har ett flera av dessa. Vem tycker det är coolt? Fler människor. Det är bra. OK, det här är vår sista. Och jag skulle vilja att du berättar om eller du tror inte detta kommer att göra exakt samma sak. Jag har dem nedskrivna någonstans. Jag är inte memorera dem. Låt oss se, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Så detta är en array, nu, inte en funktion. Och det är en array eftersom vi har kvadratisk konsoler, inte klammerparenteserna. Och det är en samling av vilken typ? Vem som helst, hmm? PUBLIK: Deras hexadecimala tal? Speak: Men vad är det för typ C? De har alla hexadecimala tal. Vad är det för typ C? Den talar om. PUBLIK: Det är osignerade tecken. Speak: Höger, osignerade tecken. Och två hexadecimala tal är en byte. Så dessa är 1, 2, 3, 4, 5, 6, 7, 8, 9 bitgrupper. Det är en matris med 9 bitgrupper. OK, du förmodligen redan vet svaret på den frågan. Men, vad tror du kommer hända när jag kör det här? Jag säger återigen, i mysum.c, Jag väntar en funktion som tar två heltal. Och jag istället säga att summan är en grupp av tecken. Vad kommer att hända när Jag kör. / Mysum och göra? Tja, först, de flesta av er kommer förmodligen överens om att göra - åh nej, bara skojar. Vad gjorde jag för fel? Uh oh. Det borde vara klammerparenteser. Det är hur du initierar en array. Min dåliga. Så såg vi redan innan dess typer är en C-nivå abstraktion, inte en datornivå abstraktion. Så de flesta av er förmodligen trodde att den skulle gör, eller om man antar att det skulle göra. Men vad, när jag kör. / Mysum? Vad kommer att hända? Några gissningar? PUBLIK: Det kommer att skriva ut ett ord. Speak: Det kommer att skriva ut ett ord. Vilket ord? PUBLIK: [OHÖRBAR]. Speak: Några andra gissningar? OK, skriva ut en fras. Du kan ha någon fras. Det kommer att vara din sida. Alla som har en annan gissning? Anna, vad är din gissning? PUBLIK: Det kommer att skriva ut - två bokstäver, eller [OHÖRBAR] en bokstav. Speak: En bokstav. PUBLIK: Kan jag räkna hur många [OHÖRBAR]? Speak: Nio. Tja, jag ska köra den. Den gör exakt samma sak. Den lägger två nummer tillsammans. Nåväl, låt oss passera de två argumenten. Det tar inte argument. Så jag vet inte var det kunde möjligen få dessa argument. Men låt oss gå på 100 och 0. Och det tillför 100 och 0. Det är galet. Jag tror det. Negativt 4, som fungerar också. Du kan göra vad du vill. Detta är en lika giltig summa funktion. Detta är en summa funktion. Men, nej, du säger att det är en array av bytes. Så vad är det som händer här? Så, återigen, låt oss gå tillbaka till den här idén som vi sade i början. Du går från C-nivå-kod, för montering språk, till ettor och nollor. Detta är hexadecimalt. Men det är egentligen bara en massa av ettor och nollor. Detta är 72 ettor och nollor, eller hur? 72 ettor och nollor. 9 bitgrupper. Varje byte har åtta bitar. Varje bit är en etta eller en nolla. Så 72 ettor eller nollor. Jag har precis skrivit dem så här - stället för att skriva ut den som en hel del ettor och nollor. Men detta kommer att gå från C-nivå språk, för montering språk, till kod. Och detta kommer att skriva ut i kod, någonstans, dessa 72 ettor och nollor att jag har skrivit här. Så någonstans i det - låt oss gå här - någonstans i mysum, programmet, där är dessa 72 ettor och nollor som jag har skrivit och berättat den för att skriva. Nu, några gissningar om vad de 72 ettor och nollor detta? PUBLIK: Förmodligen samma sak som åter ett plus b.. Speak: Förmodligen samma sak som åter ett plus b.. Låt oss kontrollera det. Låt oss räkna ut hur jag gjorde det. Så om du går tillbaka hit, jag berätta att köra det här kommandot, objdump-S sumfunction.o. Låt oss gå köra den. objdump - obj, dumpa. I grunden är det kan ge mig vad jag vill se. Det kan ge mig assembler. Det kan ge mig de ettor och nollor. Den har massor av flaggor. Det är den vi ska att använda för nu. Dot - som ni ser på bilderna - dash huvudstad S säger intersperse, källkod - denna linje är från C - med montering kod och med ettor och nollor. Och vi kommer att köra det på sumfunction.o. Därför att det ska bli lättare att se. Igen - hmm? PUBLIK: Du stavade det fel. Speak: Men jag är faktiskt går att klara det för en sekund. Jag först ska öppna bara sumfuntion.o. PUBLIK: Du stavade det fel första gången. Speak: Classic. Sum - det är ett hårt ord, men. Du skulle bli förvånad. OK, så detta är sumfunction.o. Jag kunde inte ens berätta. Det finns en massa nollor, helt klart en hel del nollor, och det finns något annat saker som inte är nollor. Men mest nollor. Ser ut som det finns några sådana. Så klart, det är svårt att läsa. Det är den binära språket. Låt oss nu öppna den - vad? Vad gör jag för fel? Har jag stava det rätt? OK, det här är pinsamt. Jag behöver en sekund att räkna vad jag gör fel. Det är ett misstag. Det är konstigt. Åh, det är därför. Jag kommer att gå tillbaka till vår ursprungliga en, så att vi kan titta på objektkod av detta. Eftersom det inte går egentligen att vara vad som helst, när vi bara sätta ettor och nollor i. Så där. OK, så att alla kan se det. Denna funktion, som jag sa, släcka C-linjerna - rader källkod - med några monteringsanvisningar. Här är vår källkod linje. Här är en, här är en annan. Här är monteringsanvisning. Det är vad de ser ut. Monteringsanvisningar - du kan läsa mer om dessa om du tar andra CS klasser, men de är i allmänhet en instruktion. Och sedan en källa och en destination. Och sedan över här är den binära koden som motsvarar denna församling instruktion. Så som ni kan se, denna summa funktion, i slutet av dagen, är tre monteringsanvisningar. Endast tre. En mov - denna m-o-v står för en Move. Lägg står för Lägg till. Och r-e-t står för Return. Så en mov, en add, en retur. Och dessa, här borta, är de nollor och de som motsvarar den koden. Så dessa nollor och ettor, om du känna dem, kan du bara sätta de rakt i. Och så kommer det att göra det exakt samma sak. Jo, i slutet av dagen, allt du exekvera är en lång rad nollor och ettor. Och det är vad koden egentligen är. Och anledningen - låt oss titta på en sak. Har jag har makefile öppna? Så om vi gick tillbaka till dash noll, noll här uppe - ledsen, huvudstad o, kapital o noll, inte noll, noll. Och vi gjorde, skulle det fortfarande fungerar på samma sätt. Men nu märker man att det finns en mycket mer monteringsanvisningar. Det beror på, igen, frågade jag kompilatorn inte att göra någon optimering. Så jag kan fortfarande ta alla dessa nollor och ettor, och kasta dem in, och det skulle fungera. Jag gjorde precis de optimeringar, eftersom det är lite lättare, då, att skriva matrisen. Men det skulle fungera lika bra. OK, vi ska göra en sista sak, eftersom jag tror är den coolaste delen. Även om alla är helt klart redan är blåst och stum. Våra sinnen är blåst. [OHÖRBAR] Så dessa är från en annan CS klass, som är super intressant, att jag har tagit - CS61. Jag rekommenderar varmt att du tar den. Men den svala delen om detta faktum, att saker är bara nollor och ettor, är att allt är nollor och ettor. Så du kan ta en fil med riktiga nollor och de du vill någonstans i den och använda den del av nollor och ettor som en summa funktion. Vad menar jag med det? Jag menar att du kan ta en bildfil som har korrekt serie nollor och sådana, som skriver ut något ut till en bild. Och ett program tolkar är en bild, men man kan tolka det, om du vill, som en summa funktion. Så om vi ville öppna, för Exempelvis denna bild. Låt oss gå, Hello Kitty. Underbar liten bild. Här inne finns det att strängen av nollor och ettor. De 72 nollor och ettor förekommer i den här bilden. Så vad jag kan göra, då, är att skriva - Jag måste komma ihåg var de är. Jag hittar det på en sekund. Men vi gör - Låt mig ta reda på var de är. En sek. Låt oss göra - PUBLIK: [OHÖRBAR]. Speak: Tack. Så om vi kör det här programmet, som istället läser in en fil, sedan går till detta index i filen. Och sedan, återigen, precis som mysum, tar två tal. Vi kan lägga till nummer exakt samma som vi gjorde innan, som går till visa dig hur det faktum att, i slutet av dagen, alla dessa saker är nollor och ettor. Och det är precis hur du väljer att tolka dem. Och om du ser faktiskt på denna bild - låt oss zooma in lite. Kan alla se den? Du kommer att märka här, det finns några konstiga smetar. Låt oss gå - det är den ursprungliga bilden. Du kommer att märka här finns det ingen smetar. Det är koden för summan funktionen, är den lilla smetar där. Och faktiskt, återigen, om du lär dig mer om det här, kommer du att inse att detta Hello Kitty, som har till och med en större Smeta ut, har kod som kan ta över en dator om det inte är skyddat lämpligt sätt. Så du kan faktiskt köra. Jag kommer inte att köra det just nu. Men du kan köra det här Hej Pott bild, och det kan ta över din dator. Så det är allt för demo. Är det någon som har några frågor, kommentarer, frågor? Jag tror att det här är fascinerande. Det inspirerade mig att lära mig mer. Jag rekommenderar starkt, om du är intresserad alls på CS, prata med mig. Även om jag är en Samhällskunskap Koncentrator, jag är en CS, sekundär, så Jag vet fortfarande lite. Men jag vet verkligen vad klasser du bör ta. Jag tycker det är alla verkligen intressant, och jag uppmuntrar dig, verkligen, att lär dig mer om du är intresserad. OK, jag har en sista sak. Ursäkta. Några frågor? Jag ville inte göra en paus för att vänta om någon hade några frågor om det. Är det någon som kommer att bli en CS Concentrator? Eller tänka på det? Ett, två, tre, fyra. One - bara en. Annas är den enda sidan som är raised authoritatively. OK, det är coolt. Assam, vad ska du göra? PUBLIK: [OHÖRBAR]. Speak: Constantine? PUBLIK: Fysik. Speak: Whoa, det var snabbt. Du hade en dålig erfarenhet av CS50? [OHÖRBAR], vad ska du göra? PUBLIK: Jag har ingen aning. Speak: Curt? PUBLIK: Econ eller CS. Speak: Econ eller CS. Tom? PUBLIK: Jag gör Stat. Speak: Stat? OK. Vad är du? PUBLIK: mig? Speak: Ja. PUBLIK: Stat. Speak: Stat. Åh, det du går. Tom, prata med Alden. Emily, vad är du? PUBLIK: Biomedicinsk - Speak: Är du i det här avsnittet? PUBLIK: Nej. Speak: OK, det är Emily. Hon är min vän. Uppenbarligen inte så bra av en vän, för att hon ger mig en hård tid. Du kan vara trevligare mot mig framför av alla, min student - PUBLIK: Jag gör din Q guide. Speak: Verkligen? Uh oh. OK, du är fantastisk. Jag älskar dig så mycket. Oh boy. Hur som helst, jag, igår kväll, liksom allt - Jag är säker på att alla verkar verkligen stressad just nu. Jag vet inte, är förstaårselev - är ni känner dig stressad? Jag känner mig stressad. Det var som, du går hem för Thanksgiving. Du är som, jag ska göra alla dessa saker. PUBLIK: Det är så annorlunda. Speak: Ja, och du kommer tillbaka. Jeff, du behöver inte känna så? PUBLIK: Jag tänkte bara Jag skulle göra en liten bit. Speak: OK, bra. Så jag kommer tillbaka, och jag har inte gjort något. Och det är alla super stressigt. Och jag är orolig, genuint berörd, om huruvida jag är kommer att avsluta allt jag måste. Men i natt, blev jag inte stressad, Jag var bara lite tråkigt. Så jag skrev i min dagbok om vad jag var ledsen. Och jag var ledsen över det här avsnittet i den här klassen går mot sitt slut. Så jag tänkte bara att läsa för er en liten snutt av min dagbok, från i går kväll. Kan jag få några servetter, vissa vävnader från Tom? Nej, jag kommer att gråta. Jag gråter inte. Inte för att du inte kan gråta, Jag bara inte gråta. Jag vet inte ens om min tår körtlar arbetade - tårkanalerna. Jag har inte gråtit på länge. PUBLIK: [OHÖRBAR]. Speak: OK, tack. OK, det finns en liten förord ​​- det finns vissa andra delar av min dagbok inresa, eftersom jag försöker journal varje Kvällen innan jag kom i säng. Jag rekommenderar journalföring. Det hjälper dig att bearbeta saker, och även vara mycket uppskattande av din dag. Och det gör det mycket lättare att se tillbaka på din dag och inse att Det fanns en hel del bra saker som hänt. Även om du känner dig stressad på natten eller verkligen upprörd, eller riktigt ledsen eller trött. Herregud. Jag vet inte ens om det är skrivet att bra eftersom jag inte korrekturläsa det. Men vi kommer att läsa den. Jag brukar inte läsa min journal, tydligen. "I morgon, jag ska lära mitt sista CS50 delen av året. Det är galet hur fort tiden går. Men jag slås av hur olika min erfarenhet av att undervisa i år var än när jag var en sophomore. Till att börja med, jag definitivt vet materialet bättre. Men inte berätta för min första kohorten studenter som. Men kanske ännu viktigare, insåg jag att den glädje som kommer från stående upp framför ett rum av det som börjar som främlingar, men slutar som, vid Stone, Facebook-vänner, är inte en första året flyet. Snarare är det att veta att, i något litet sätt hjälper du begåvad, omtänksam, härlig, och passionerade människor lär sig lite mer om datavetenskap. Du skiftande att glödlampan bara en bit i sin sockel, så att det ska kunna att lysa klarare än du, eller de, kunde föreställa sig vid terminsstart. Du hjälper vända dem frowns upp ner och ställa frågor som ge stöd, men ändå tillåta eleverna att stå upp på egen hand. Det är verkligen inte en överdrift att säger att detta avsnitt är min favorit del av veckan. Eller till och med att jag tvekar att säga, det är allt, vid 05:30 varje vecka, att veta att det blir alldeles för lång tills vi möts igen. Ändå, jag är otroligt tacksam för alla som har gett mig det här möjlighet att ge tillbaka till andra. Till David för hans tålamod och förtroende. För film-och produktionspersonal, för gör mig ser något respektabel. Och, viktigast av allt, till mina elever, utan som jag skulle ha någon anledning att spenderar 10 timmar att räkna ut det bästa sätt att dra pekare, eller lägga ut en bord av delfiner, via JavaScript. Som alltid, det har varit en välsignelse. " Så med det, tack grabbar. Vi ses alla på CS50 mässan, och den hackathon, om du är där. Och om du har frågor, jag ska sticka runt tills det inte finns fler. Men jag tackar er för ett underbart år. [Applåder] Speak: Jag skulle kunna gråta.