[Powered by Google Translate] [Week 7] [David J. Malan - Harvard University] [Ez CS50. - CS50.TV] Rendben van. Üdv újra. Ez CS50, és ez a kezdete hét 7. Egy pár kis közleményei: Pset5 jelenleg folyamatban van, vagy hamarosan meg kell, és hadd mondjam el, őszintén, ez általában között nagyobb kihívást A kurzus problémája készletek, úgyhogy hadd említsem meg ezt most annak érdekében, hogy ezen a héten több, mint valaha, hogy nem várja meg, amíg, mondjuk, szerda este vagy csütörtök este merülni be Ez mindenképpen érdekes Pset. Azt hiszem, ez mókás. Ha tényleg kap teljesen helyes, és majd a kihívás az úgynevezett Big Board, akkor lehetősége van arra, hogy megfeleljen elméje néhány a tanfolyam személyzeti és néhány az osztálytársaival. What The Big Board egyszer megvan a helyesírás-ellenőrző munka, Ön képes lesz arra, hogy menjen cs50.net futtatása után egy parancs, tisztán döntött, majd az időt, és a RAM memória és több hogy már használt a végrehajtás kerülnek kiállításra itt a kurzus honlapján. Látni fogja, hogy egy csomó ezek az emberek itt felsorolt ​​staff mivel a hétvégén, a személyzet gondoltam, hogy jó móka lesz, hogy megpróbálja felülmúlni egymást. Tehát észre, hogy a cél itt nem az, hogy felülmúlni a személyzet. Még én vagyok, csak itt a 13-as szám. Tisztán döntött, de ez egy lehetőség, hogy lásd, milyen kevés RAM és milyen kevés CPU másodperc segítségével vis-a-vis néhány osztálytársaival. És én elismerem, hogy Kevin Michael Schmid, jelenleg az 1-es szám kell tekinteni, amely a TFS, ez a megvalósítás, amely hívunk nem lehetséges tekintettel arra, hogy ő használja szinte 0 RAM és majdnem 0 másodperc betöltés. Akkor mi gondoskodunk Kevin offline. [Nevetés] Vannak olyan készségek, Kevin a napokban a teszt itt. Az egyik dolog, amit gondoltuk, hogy túl most CS50x egy hét folyamatban van, és ti ugyanúgy része ennek a kísérletnek, mint a diákok. Már megkérte őket részeként pset0, ami hasonlóan be Scratch projekt az őket érdeklő - egy játék, egy interaktív műalkotás, animáció, vagy hasonló - egy 1 - 2-perces videót, ha szeretnének, mondván hello a világot, és kik is ők valójában. Gondoltam megosztom veletek, csak egy pár a videók nyújtottak be eddig mert nekünk, a személyzet legalább tényleg volt izgalmas és inspiráló, hogy ezek az emberek az egész világon - országok a világ minden tájáról - hangol, minden dolog, hogy a számítógép-tudomány tanfolyam az interneten, hogy ez azért van, mert azt akarják, hogy továbbra is a saját vizsgálatok azt akarom, hogy pályafutásuk egy új irányba, akarnak kitölteni hiányosságok a saját tudás, így néhány Ugyanilyen okokból, hogy ti talán már itt. Szóval adok egy ilyen diák van. Ön növelheti a hangerőt, csak egy kicsit. Itt van az egyik diák 1-perces beadványt. Hello, világ. Diák vagyok az ipari mérnöki itt Malaga, Spanyolország. Én izgatott ez az online tanfolyam, mert szeretem számítógép-tudomány, tényleg, és én igazán értékelem, hogy értem, hogy vizsgálja meg. És az a tény, hogy tudok tanulni ugyanazt mindannyian srácok de ahelyett, hogy a Harvard vagyok Malaga, milyen félelmetes ez? Nos, én vagyok Fernando, és ez CS50. Viszlát srácok. [Nevetés] Tovább clip mi különösen tetszik, rájössz, hogy ez az úriember angol nem olyan erős. Úgy néz ki, ő is fordította gép, így a fordítások magukat egy kicsit tökéletlen, de ez volt az egyik eddig közé is. [♪ ♪] Hello, világ. [Beszél japánul] [Én, hogy üdvözölje a japán, mert az angol tudásom nagyon megbízhatatlan.] [Én szállított az üzenetet Önnek a város Gifu, Japán.] [I lehet diák először az elmúlt 20 évben, amint látható.] [Nagyon hálás vagyok a Harvard University ki adta nekem a lehetőséget, és EDX.] [Golf egy gitárt, és a kedvenc dolog fut.] [Nevetés] [♪ ♪] [Mit gondolsz, miért akartam részt venni egy cs50x.] [Harvard University, ez az én vágy.] [Különösen, ha én vagyok a távoli jelenlétét Japánban élt.] [Akartam próbálni azonnal tisztában az ilyen jellegű EDX mikor.] [Nem gondolod, hogy így nem kapcsolódik a kor tanulási I.] [CS50 az én vágy. A nevem Kazu, és ez CS50.] [♪ ♪] [taps és éljenzés] Másik kedvence a miénk volt, a benyújtott ide valakit. [♪ ♪] [Malan] Google, ha Ön ismeri ezt a mém. Aztán végül, egy pár mások, hogy van közzétéve, hogy talán nyerni a imádnivaló díjat. [Diák] Aww! >> [Malan] Mi lesz hallgatni. Ez a rövid, ezért figyelj. [Női hangszóró] Mi a neve? >> Louie. [Női hangszóró] Mi ez? >> [Kuncogott] CS50. [Nevetés] [Malan] Ő 2 tart, mégis. Itt is vagyunk, az utolsó. A nevem Louie, és ez CS50. [Nevetés] Ez tehát CS50x. Köszönöm mindazoknak közületek követve végig otthon akiket veszünk eddig. Ma, arra a következtetésre jutunk vitánk az adatstruktúrák, legalábbis néhány igen alapvető, és akkor folytatjuk a beszélgetést HTML és web programozás. Sőt, most már töltötte az elmúlt néhány hét alatt nézi alapjait programozás - algoritmusok, adatszerkezetek, és a hasonló - és C, mint azt eddig tapasztalt, nem feltétlenül a leginkább elérhető nyelvek amellyel végrehajtására néhány ilyen ötletet. És ettől a héttől kezdődően, és a jövő héten, majd a következő, leszünk végre képes átmenet C, amelyet általánosan ismert, mint a viszonylag alacsony szintű nyelven, a dolgokat magasabb szintű, köztük PHP, JavaScript, és hasonlók, amelyet látni fogjuk meríteni az azonos tanulság, hogy megtanultuk az elmúlt hetekben, de rájössz, hogy nyilvánításáról dolgok, mint a tömbök és hash táblák és keresés és rendezés annyira sokkal könnyebb, mert a maguk nyelvén kezdünk használata lesz erősebb. De először is, az alkalmazás a fák. Ez nagyon gyakori ezekben a napokban, hogy meg kell tömöríteni információkat. Az, hogy milyen környezetben kíván tömöríteni kívánt valamilyen digitális információ? Igen. >> [Hallgató] Ha el kell küldeni az interneten keresztül. Igen, ha azt szeretné, hogy küldjön valamit a weben keresztül. Ha szeretné letölteni egy nagy fájlt, akkor ideális, ha valaki a másik végén azt, hogy a tömörített fájlt a zip formátumban, vagy valami ilyesmi úgy, hogy küldjük kevesebb bitet, mint egyébként továbbítani. Szóval hogyan lehet tömöríteni információt? A lényeg, hogy segítségével kevesebb bitet, mint szükséges alapértelmezés szerint. De ez a fajta egy furcsa dolog, mert úgy gondolja, vissza a héten 0 és 1 amikor beszéltünk ASCII és bináris és beszélgettünk ASCII különösen mint a 8 bites, hogy képviselje az ábécé betűit úgy, hogy a levél A jelentése 65, kisbetűk aa a szám 97, és bármilyen Ön által képviselt a 65 vagy 97, akkor a 7 vagy 8 bit. De a fogást, hogy van néhány betű az angol ábécé amelyek nem olyan népszerű, mint mások. Z egyáltalán nem olyan népszerű, Q nem olyan népszerű, de A és E szuper népszerű. És mégis, az összes ezeket a leveleket, alapértelmezés szerint a világon ugyanazt a bitek száma, mindössze 8. Tehát nem lenne okosabb lett volna, ha ahelyett, hogy a 8 bit minden levél, még a ritkán használt, mint a Q és Z, mi lenne, ha alkalmazható kevesebb bitet az A és az E és S, valamint a legnépszerűbb betűk Használt és több bit a kevésbé népszerű betűk, az ötlet, hogy menjünk optimalizálják a közös ügy, amely a téma számítógép-tudomány próbál optimalizálni, hogy mi fog történni a legtöbb és eltölteni egy kis időt, egy kicsit több helyet foglal a dolgokat, hogy igen, megtörténhet de nem feltétlenül olyan gyakran. Szóval vessünk egy példát. Tegyük fel, hogy szeretnénk kódolni információk meglehetősen hatékonyan. Lehet, hogy nőttek fel tudta egy kicsit valami Morse-kódot, és az esély, hogy nem ismeri a tényleges kódot, de talán emlékeztetni arra, hogy ez legalább ez a sorozat a pontok és vonalak. Ez egy meglehetősen hatékony kódolás, és figyelje meg, hogy a legnépszerűbb írni - például E - használja a legrövidebb sípol. Morse kód szól bip-bip-bip-bip-bip-bip hangokat és nyomvatartásával akár rövid időtartamra vagy hosszú időn át. E, mint jelöli a pontot, egy szuper rövid hangjelzést, csak csipog, és ez képviseli E. Ezzel szemben a T lenne hosszabb sípolás, mint beep [meghosszabbítja hang], és ez képviseli T. De ez még mindig elég rövid, mert ezzel szemben, ha megnézi Z, kifejezni Z szeretnél menni bip, bip [hosszabb hang], bip, bip [rövidebb hang]. Szóval ez már nem, mert ez kevésbé gyakori. De megvagy itt az, hogy Morse-kódot egy kicsit hibás az, hogy ez nem azonnal dekódolható. Tegyük fel például, hogy hallani néhány a drót végét hangjelzés [rövid], hangjelzés [hosszú]. Milyen üzenetet nem csak kapni? Egy pont és egy kötőjel. Ez mit jelent? [Hallgató] A. >> [Malan] Talán. Az is lehet, E-, majd T. Más szóval, Morse-kódot, bár kihasználja ezt az elvet, hogy javuljon az sarok ügy, nem alkalmas arra, hogy azonnali decodability. Ez azt jelenti, az ember, aki a tárgyaláson vagy fogad e morzejelek kell valahogy kitalálni, ahol a szünetek között levelek, mert ha nem tudod, ha ezek a szünetek vannak, lehet, hogy megzavarja egy ET, vagy fordítva. Szóval mit lehet tenni? A Morse-kódot akkor csak szünet az egyes betűket. De a szünet egyfajta ellentétes a lényege felgyorsítja a dolgokat. Szóval, mi lenne, ha ahelyett, hogy jött egy kódot, ahol nem volt ilyen rossz a helyzet ahol E jelentése egy előtagot, például az A - Más szavakkal, ha tudnánk arról, hogy a minták még mindig rövid a népszerű betűk hosszú a kevésbé népszerű leveleket, de nincs lehetséges zavar? Egy férfi a neve Huffman évvel ezelőtt feltalálta ezt a rendszert nevezzük Huffman kódolással hogy valóban kihasználja az egyik adatszerkezetet is töltöttem egy kis időt beszélünk a múlt héten, hogy a fák, bináris fák különösen - egy bináris fa azt jelenti, hogy nincs több, mint 2 gyerek. Ez talán a bal gyerek, talán egy jobb gyerek, és ennyi. Tehát tegyük fel, csak a vita kedvéért, hogy valaki akar küldeni egy üzenetet úgy néz ki, mint ez. Ez teljes képtelenség, de ez áll As, Bs, Cs, Ds és Es. És ha tényleg számít fel az összes As, Bs, Cs, Ds és Es és majd osszuk el az összes levél, ez kis diagram itt azt mondja, hogy 45%-a a betűk Es, 20%-a As, 10%-os B, és így tovább. Más szóval, azt feltételezik, hogy az idézett húr ott csak néhány üzenetet szeretne küldeni. Előfordul, hogy értelmetlen, csak így tudjuk használni néhány betű lehetséges, de ez tényleg igaz, hogy E továbbra is a legnépszerűbb, A és B és C a legkevésbé népszerű, legalábbis az 5 az ábécé. Szóval hogyan lehet járni jön egy kódolást, bináris kódolás, a minta 0s és 1s minden ilyen levelek oly módon, hogy E jelentése egy rövid minta és talán B és C kissé hosszabb minták, Ismét, az ötlet is, hogy szeretnénk használni kevesebb bitet a legtöbb időt és több bit csak egyszer egy darabig. Szerint a Huffman kódolás, akkor létrehozhat egy erdőben a fák. Van egyfajta történet van, amely magában foglalja a fák és építése során őket. Hadd kezdjem. Azt javaslom, hogy akkor kezdődik az erdőben, hogy úgy mondjam, az 5-fák, amelyek mindegyike egy nagyon hülye fa. A fa áll, csak egy csomópont, az itt képviselt egy kört. Így minden ilyen dolog lehet egy C struct és belsejében a C struct lehet egy float képviselő frekvencia gróf és akkor talán a char képviselő levelet. Szóval szerintem ezek csomópontokat csak a régi C struct, de most, magasabb szintre. Ez az erdő az 5 fa minden, aki csak egyetlen csomópont. Mi Huffman javasolt, hogy elkezdjük kombinálni a fák hogy a legkisebb frekvencia számít bele kicsit nagyobb fák kapcsolja össze őket egy új gyökér csomópont. Így a betűk között itt észre, hogy az egyszerűség kedvéért én már rendezve őket, balról jobbra, bár ez nem feltétlenül szükséges, és figyelje meg, hogy a legkisebb csomópontok jelenleg 10% és 10%. Szóval Huffman Javasoljuk, hogy egyesítik a 2 legkisebb csomópontok egy új fa bevezetésével új szülő csomópontot, majd adja e szülő a gyermek bal és jobb gyerek ahol B önkényesen a bal és a C önkényesen a helyes. És akkor Huffman továbbá azt javasolta, hogy menjünk most gondoljunk csak a bal oldali gyermek az egyik ezek a fák mindig, mintha képviselő 0 és a megfelelő gyermek mindig, mintha által képviselt 1-es szám. Nem számít, ha megfordítod őket, amíg maga következetes. Így most már négy fát az erdőben. És azt mondom, 4, mert most a fa a bal oldalon - és ez nem is annyira egy fa abban az értelemben, hogy a nő így ez több, mint egy családfát, ahol most a 0,2 egyfajta a szülő a két gyerek - észre, hogy az, hogy a tulajdonos általunk készített 0,2. Már hozzá gyakorisága számít a két gyerek, és mivel az új csomópont a teljes összeget. Szóval most már csak ismételd ezt a folyamatot. Keresse meg a két legkisebb csomópontot, majd kössük össze őket, egy új fa majd ismételje meg a folyamatot tovább. Most van néhány jelölt, 20%, 15%, és a másik 20%-ot. Ebben az esetben, meg kell törni a nyakkendő. Meg tudjuk csinálni önkényesen. Meg kéne csinálni következetesen. Ebben az esetben, én önkényesen megy az egyik a bal oldalon, és most egyesíteni a 20% és a 15%-ot, hogy adjon nekem egy új szülő nevű 35%, melynek bal gyermek 0, akinek jogát gyermek 1, és most már csak három fa az erdőben. Akkor talán látni, ahol ez megy. Ha ismételje meg ezt a pár többször is, mi megy, hogy csak egy nagyobb fa, amelynek minden széle címkével vannak ellátva 0s és 1s. Csináljuk újra. 35%-kal, hogy a fa gyökere. 20% és 45%, így megyünk összevonja a 35% és 20%. Most már ezt a fát itt. Mi hozzá e együtt már 55%. Most már csak két fa az erdőben. Tesszük ezt egy utolsó alkalommal, és remélhetőleg matematikailag összes frekvencia összeadódnak mert kell, hiszen számítani őket a get-go, hogy adja ki a 100%-os. És most van egy fa. Tehát ez egy Huffman kódolás fa. Ez a fajta Eltartott egy ideig, hogy ott verbálisan, de a valóság az a for ciklus vagy egy rekurzív függvény, meg tudná építeni ezt a dolgot ki elég gyorsan. Tehát most van egy új csomópont, és az összes ilyen belső csomópontok kerültek malloc'd, feltehetőleg az út mentén. Tehát most a tetején ez a fa már 100%-os, de most észre, hogy van egy út ezen új ük-ük-ük-nagyszülő, hogy minden a ük-ük-ük-unokája végig alján, az összes a levelek. Mit fogunk csinálni most javaslom, hogy annak érdekében, hogy képviselje az E betű, mi egyszerűen csak az 1-es szám. Miért? Mert ha keresztezik ezt a fát a végső gyökér le a levél ismert E, követjük csak egy él, a jobb szélén, és ez címkézett természetesen jobb felső sarokban 1. Tehát a hatása itt Huffman volt, hogy E kódolási bináris kell csak 1-. És ez átkozottul hatékony. Nem igazán olyan kisebb. Ezzel szemben, A fog képviselve, ha követi a logika, milyen minta bit helyett? 01. Tehát, hogy az A, kezdjük a gyökér és megyünk balra, aztán menj jobbra, ami azt jelenti, hogy majd a 0, majd a 1. Tehát képviseli a betű, a minta 0 és 1. És most észre, már van egy ingatlan közvetlen decodability hogy nem volt a Morse-kódot. Annak ellenére, hogy mindkét minták elég rövid - E = 1 bit, A 2 bit - észre, hogy azokat nem lehet összetéveszteni a egyik vagy másik, mert ha látsz egy 1, akkor van, hogy az E, ha úgy látja, a 0, akkor a 1 ez nyilvánvalóan van, hogy az A. Hasonlóképpen, mi a D? 001. Mi az a C? 0001. És mi a B? 0000. És ismét, mert a betűk mi érdekel vannak a levelek , és ezek egyike sem egyfajta közvetítők az útvonal root levél, nincs kockázata conflating 2 betű "más kódolás mivel ez utóbbiak mind ezek bit minták determinisztikus. 0000 mindig B. Nincs csomópont valahol a kettő között, hogy esetleg megzavarja egy levelet a másik. Szóval, mi a hatása itt? A legnépszerűbb levél - ebben az esetben E - ütött a legrövidebb kódolás, A ütött a következő legrövidebb kódolás, és B és C, amit már eddig is tudtunk a get-go kedvesek voltak a legkevésbé népszerű 10%-os gyakorisággal minden, általuk ütött a leghosszabb kódolást. És mit jelent ez most az, hogy ha azt szeretnénk, hogy küldjön egy üzenetet, ami tömörített az interneten vagy egy e-mail vagy a hasonló, ahelyett, szabványos ASCII, küldhetünk Huffman kódolt üzenetet amely, ha el szeretné küldeni a levelet E, küld csak egy kicsit. Ha azt szeretnénk, hogy küldjön egy A, akkor küld 2 bit, 01, ahelyett 8 bit majd egy másik 8 bit, majd további 8 bitet és így tovább. De van egy megvagy itt. Ez nem elég, hogy csak építeni ezt a fát, majd indítsa küldés Alice Bob A rövidebb bit mintát, egy stringet ASCII, mert Alice is tájékoztatni Bob milyen ha Bob lesz képes olvasni neki tömörített üzenetet? [Hallhatatlan diák válasza] >> Mi ez? [Hallhatatlan diák válasza] >> mi a fa. Vagy még pontosabban, mik azok kódolás, különösen azért, mert ebben a történetben tettünk egy ítélet hívást egy ponton. Ne feledje, hogy mi volt, hogy vegye önkényesen között 2 különböző 20%-os csomópontok? Tehát nem igaz, hogy Bob, a címzett is csak rekonstruálni a fa saját mert lehet, hogy hozza létre a fa alig észrevehetően eltérő Alice. Sőt, Bob, nem is tudom, mi az eredeti üzenet azért, mert az egyetlen dolog, Alice küld neki, persze, a tömörített üzenet. Tehát a fogás, kompressziós, mint ez, hogy igen, Alice menthet egy csomó bit küldésével 1 E-től és a 01 az A, és így tovább, de ő is tájékoztatnia Bob, mi a leképezés között betűk és bitek mert nem lehet egyértelműen hivatkozhat csak ASCII többé, ha éppen nem használja ASCII. Így tudja küldje el neki a fa valahogy - írja le, tárolja a bináris adatok, vagy valami ilyesmi - vagy csak küldj neki egy kis puskát, egy Excel fájlt, amely megmutatja a leképezések. Tehát a tömörítés hatékonysága valóban feltételezi, hogy az üzeneteket, amelyeket Ön küldött elég nagy, legalább közepes méretű, mert ha küld egy szuper rövid üzenet, ha csak szeretné küldeni az üzenetet BAD, ami történik, hogy egy szót tudunk varázslat itt, B-A-D, akkor valószínűleg fogja használni kevesebb bit, de a fogás, ha te is tájékoztatni Bob, mi a fa vagy mi a kódolás, fogsz valószínűleg meghaladják az összes megtakarítás annak, tömörített dolgokat kezdeni. Így is lehet a helyzet, hogy ha megpróbál tömörítő még valami hasonló zip vagy fájl formátumokat lehet, hogy ismerős - elég kicsi kép, még üres fájlok - Néha ezek a fájlok lehet, hogy nagyobb és nem kisebb. De reálisan, ami történik, csak a kis fájlméret, így nem megy, hogy egy gigabyte fájl lesz 2 gigabájt; mi igazán beszélünk bájt vagy csak egy pár kilobyte. Egyes programok, mint a zip elég okos, hogy észre, hogy a "Te fogsz több bit tömörítés ezt." "Hadd ne zavarja tömörítő neked egyáltalán." Tehát ez csak az egyik módja, akkor tömörítése szöveges formátumban. Tudtunk végre ilyesmit C. Például, itt van, hogy talán jelenthet csomópont ezt a fát ha van egy char a szimbólumot, egy úszó értéket a frekvencia, és mint láttuk a mi más adatszerkezeteket, 2 mutatók, 1 balra gyermek, 1 és a jobbra, amelyek közül bármelyik lehet NULL, de ha nem, arra utal, hogy a gyermek és a balra jobbra gyermek. Tehát ez akkor van Huffman kódolás, és ez az egyik módja, hogy tudsz járni tömörítő információkat, és ez minden bizonnyal az egyik könnyen megvalósítható keretében, mondjuk, a múlt heti adatszerkezetek, bár még összetettebb algoritmusokat létezik hogy tehet még kifinomultabb mutáció az adatokat. Van még kérdése majd a fák, bináris fák, vagy kompressziós szöveg? [Hallgató] Van némi kétértelműséget, mint ha a [hallhatatlan] felosztva 01, akkor 011 lenne egyértelmű, ugye? [Hallhatatlan] >> Jó kérdés. Kétértelműséget. Hadd Összefoglalva hivatkozva ezt a képet itt. Mivel a karakterek akkor tömörítés, képviseletei, definíció szerint az algoritmus mindig a levelek, soha nem véletlenül használja ugyanazt a mintát a bitek a előtag több leveleket. Más szóval, te vagy aggódik, úgy hangzik, mint egy kétértelműség miatt amely 001 lehet a kezdete a B vagy a C kezdete, vagy valami ilyesmi. De ez nem lehet a helyzet, mert azt tapasztaljuk, hogy minden az ábécé betűit vagyunk kódoló vannak a leveleket. A kétértelműség csak akkor merül fel, mint abban az esetben a Morse kód, ha például, C valahol a pálya mentén a gyökér a B. [Hallgató] Rendben. Tehát ebben az esetben, mondjuk A-nak 2 levelek. Mondja el >> A-nak - Mondd még egyszer. [Hallgató] Say A már 2 levél, F és G, majd a G - >> Oké. De ez nem lehet. A maga nem lehetett levelek F és G mert e levelek F és G maguk is elhagyja valahol balra B vagy jog E. Tehát definíció kell lenniük levelek. Egyébként igazad van, pontosan, mi már nem oldotta meg a problémát, hogy Morse-kódot szembesül. Jó kérdés. Egyéb kérdés? Rendben van. Ez az elképzelés a bitek, kiderül, hogy már volt ereje végig, hogy már ténylegesen fel nem használt amikor jött a manipulálni ezeket 0s és 1s. Megkérdeztük erről az egyik legkorábbi probléma készletek: azaz, hogyan megy a konvertálása nagybetűs kisbetűssé vagy fordítva? Vagy, pontosabban, az egyik az elsőként psets kérték hány bit van ténylegesen a flip megváltoztatása érdekében A kisbetűssé egy vagy fordítva? Itt egy rövid emlékeztető, hogy mi 65 és 97 néz ki, mint a bináris. És még ha a szóban forgó fajta elhalványult a memória, láthatjuk újra itt, hogy hány bitet kell tükrözött változtatni tőke A kisbetűssé a? Csak egy. Csak különböznek egy helyen, a harmadik kicsit a bal oldalon. Mivel van egy 010, egy kicsit van egy 011. Tehát valahogy meg kell csak, hogy képes legyen flip, hogy a kicsit, és mi lehet majd hasznosítani, vagy kisbetűssé. Megcsináltuk ezt a múltban valójában használ ha a körülmények és ellenőrzés, ha a levél nem a tőke és a tőke A Z, majd kimenetek, mint A - a + 26, vagy valami ilyesmi. Valószínűleg volt egy aritmetikai változás az az ábécé betűit. De mi lenne, ha tudna csak fordítsa az egyetlen bit? Hogy megy a vevő egy byte érdemes bit, így a 8 bitet, mint a 01000001 és a 01100001? Ha már a mintákat a bitek, hogyan megy a változó csak az egyiket? Mi van, ha bemutatjuk, sárga itt a másik minta bit? Ha azt, hogy az egész sárga szöveg 0s, kivéve az egy kicsit, hogy meg akarom változtatni aztán egy új, operátor ismert bitenkénti operátor - bitenkénti abban az értelemben, hogy a csoport az egyes bitek, nem egy teljes byte vagy négy bájt egyszerre. Ez a függőleges vonal ott sárga azt sugallja, hogy mi lenne, ha megteszi a képviseletét tőke A és bitenkénti OR azt a sárga sorozata bit? Más szóval, gondolom, vissza a beszélgetést a logikai kifejezések Scratch majd C. Avagy egy logikai, vagy azt jelenti, hogy igaz legyen, vagy az első dolog, amit meg kell, hogy igaz legyen vagy a második dolog, amit meg kell, hogy igaz legyen, vagy mindkettő, hogy igaz legyen, és azután az így kapott kimenet maga igaz. Ebben az esetben is, mit kapunk, ha veszünk 0 "vagy" ed 0-val? Hamis vagy hamis? Még mindig hamis, ezért a kisbetűs egy marad, mint várták. Mi lenne, ha ehelyett teszünk 1 vagy 0? Ez most is 1, de észre, mi fog történni itt. Ha elkezdjük a tőke A. és mi továbbra is ", vagy" az egyes bitek csinálunk itt, 0 vagy a sárga ad nekünk, mi itt lent? Ez ad nekünk 1. Sőt, tegyük fel, hogy nem tudom, mi a nagybetűs változatát kevés a ténylegesen volt. Menjünk erre. Hadd helyezze ezt vissza ide. Csináljuk ezt újra. 0 vagy 0 0 ad nekem. 1 vagy 0 ad nekem 1. 0 vagy 1 ad nekem 1. 0 vagy 0 0 ad nekem. A következő egy 0, a következő egy 0, a következő egy értéke 0. 1 vagy 0 ad nekem 1. És még akkor is, ha nem tudja előre, hogy mi a kisbetű volt, csupán a "vagy" ING Egy ezzel a mintával bitek, hogy már itt bemutatott sárga, akkor kisbetűs a tőke egy az essek, hogy a kicsit. Úgy használta ezt a kifejezést héttel ezelőtt: essek egy kicsit. Hogyan ténylegesen, hogy algoritmikusan? Ön használja, mi általában úgynevezett maszk sorozata bit, hogy ebben az esetben csak azért történik, hogy néz ki ez a szám itt, és akkor ", vagy" össze ezzel az új C-üzemeltető, Nem | |, akkor használhat egyetlen | és akkor tényleg kap ez a válasz itt, mert miért? Ez az a hely 1s, 2s hely, 4S, 8S, 16S, 32s. Így kiderül, hogy ha egy betűt, és bitenkénti OR azt az egész 32, mert az egész 32, ha megnézzük azt bitek, úgy néz ki, mint ez, ez azt jelenti, akkor megfordítja a kicsit, hogy amit valójában akar. És hasonlóan -, és azt fogjuk megnézni, kódot egy pillanat - Tegyük fel akarunk menni a másik irányba. Hogyan megy a kisbetűs a tőke A? Melyik bit kell változtatni? Ez ugyanaz. Meg akarja változtatni, hogy a harmadik bit egy 1 és a 0. És hogyan álljunk neki csinálod ezt? Hogyan kikapcsolni egy kicsit? Azzal, amit minta bitek tudnánk kikapcsolni egy kicsit? Mi lenne, ha egyfajta fordítsa a maszk? Mivel korábban, mi történik az egész sárga maszk 0s kivéve az egy bit akartunk bekapcsolásához, mi lenne, ha ebben az időben, azt, hogy az egész maszk 1s kivéve a kicsit, hogy szeretnénk kikapcsolni majd mi üzemeltetője? Mi lenne, ha "és a" dolgok? Vessünk egy pillantást. Ha most fordítsa ezt, tegyük fel, hogy megint hozzon létre egy maszkot, ez minden 1s kivéve az egy kicsit, hogy szeretnék kikapcsolni és aztán nem ", vagy" a fehér számok felfelé tetején a sárga számok itt lenn, mi van, ha én inkább "és az" őket? Úgy hívják bitenkénti és. Logikus, ez ugyanaz, mint a logikai és. Ez ad nekem 0 és 1 értéke 0. Tehát hamis és igaz hamis. Igaz, és igaz, igaz. És itt van a mágia: igaz és hamis most hamis, úgyhogy most már ki van kapcsolva, hogy a kicsit. És most, a többi a történet kissé egyszerű. Mivel a többi maszk 1s, nem számít, milyen a számok fehér. Ha a "és a" valamit igaz, akkor nem fog változtatni az értékét. Ha ez igaz, akkor az továbbra is igaz. Ha ez hamis, akkor továbbra is hamis. De a varázslat történik, ha veszel valamit, ami igaz volt és akkor majd ", és" ez hamis. Ennek az a hatása, hogy kikapcsolja bit. Szóval egy kicsit rejtélyes ott. Nézzük ténylegesen nézd meg egy kódot, ami tulajdonképpen megnézi még rejtélyes, de vessünk egy pillantást itt tolower. Ha nézem tolower, megy a tőke A kisbetűssé a, lássuk, hogyan lehet végrehajtani ezt a programot. Itt a legfontosabb, és ez nem történik parancssori argumentumok. Én nyilvánító c karaktert a levelet, hogy a felhasználó megy, hogy írja be Én majd egy ismerős do while ciklus, hogy csak győződjön meg róla, hogy a felhasználó biztosan ad nekem a tőke egy vagy B vagy C. .. Z, ezért adnak nekem valamit az A és Z. És most mit keresek én itt? Én vagyok "vagy" ING ezt 0x20, de ez tulajdonképpen ugyanaz, mint a - és mi jön vissza, ezt egy pillanatra - 32. Tehát újra, 32 ez a minta bitek itt. Miért nem tudjuk ezt? Gondoljunk csak vissza a 0. héten. Ez az a hely 1s, 2s hely, 4S, 8S, 16S, 32s hely. Tehát ez a sárga szám történetesen 32. Én akkor fog írni, mint a char itt bitenkénti "vagy" azt szó szerint a szám 32, és mit kapok vissza? A kisbetűs változatát char. Egy pillanattal ezelőtt, bár én ezt a hangot egy másik bázis jelöléssel. Mit jelent ez? >> [Hallgató] Hexadecimális. [Malan] Ez történik, hogy képviselje hexadecimális. Mi nem beszéltünk hexadecimális, hogy sok minden, de valójában kényelmes, azokban az esetekben, mint ez. Bár úgy néz ki, sokkal összetettebb, és bár úgy néz ki, mint a 20, és nem 32, kiderül, hogy hexadecimális valóban szuper kényelmes jelölés mert minden hexadecimális számjegy után 0x - és ez nem jelent semmit; ez csak az emberi konvenció, hogy azt mondja itt jön egy hexadecimális szám - mindegyik számjeggyel, a 2, majd a 0, maguk is képviseli pontosan 4 bit. Szóval, ha ezt tesszük, hadd nyit meg egy szövegszerkesztőt itt - furcsa autocomplete - ha egy kicsit szövegszerkesztő itt, a szám azt jelenti, 0x20 itt 4 bit, itt van még egy 4 bit. Csináljuk a jobb szélső 4 bit először. 0, ha képviselő, 4 bit, az mi? Szuper könnyű. Csak minden 0s. Tehát 4 bit a 0-t. Hogyan képviseli 2? Már jó ideje nem csináltuk ezt, de ez 0100. Szóval ez a 1s hely, ez a 2s hely, és akkor nem számít, milyen más helyen vannak. Más szóval, a hexadecimális mondhatnánk 0x20, de ha majd úgy gondolja, hogy mi van a 2 és hogyan képviseli bináris, mi van a 0 és hogyan képviseli bináris, a választ e kérdésekre ez és ez volt. Szóval 0x20 történik, hogy képviselje ezt a mintát 8-bit, amely pontosan a maszk, amit akart. Szóval ez az a pillanat csak egy intellektuális gyakorlat, de a valóság az, hogy ez a kód jellemzően gyakrabban írni konstansok ilyen hexadecimális mert akkor a programozó viszonylag könnyen, még ha ez igényel némi papír és ceruza, kitalálni, hogy mit mintázata bitek mert nem lehet csak kifejezni 0s és 1s jellemzően kódot. Nem mehet 00010 és így tovább. Meg kell, hogy vegye decimális vagy hexadecimális vagy oktális, vagy más jelöléseket. A legtöbb ember általában felvenni hexadecimális egyszerűen úgy, hogy minden számjegy 4 bit és meg tudod csinálni ezt a gyors matek. És én hullám kezem toupper, ami majdnem ugyanaz, úgy néz ki, szinte azonos. Toupper történik használata nem a vagy az üzemeltető, hanem ez a fickó, és df. Mit jelent a df képvisel? df? Valaki? >> [Hallgató] 255. 255? Nem 255. Ez lenne ff. Majd hagyjuk ezt, mint egy kis gyakorlat. De ha megy a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 és majd mi lesz utána 9? Mi vagyunk a fajta ki tizedesjegy, de hexadecimális ami utána jön 9? [Hallgató] a. >> Tehát egy a, b, c, d. Tudod kitalálni onnan milyen minta bitek d ténylegesen képvisel. És ha nem a matematika, látni fogjuk, hogy a maszk a végén kapok vissza azonos e. Ez f, minden 1s, és ez a d. Szóval df kijelenti, hogy maszk. Rendben van. És végül, nem hogy a dolgok rendezett szuper, szuper technikai, de tegyük fel akartunk írni egy programot, hogy működik ez. Hadd menjek előre, és a bináris, ami egy program nevű fájlt binary.c. És most hadd futni bináris és adj egy nem-negatív egész szám. Kezdjük egyszerű és írja be a 0-ra. Ez most egy olyan program, amely kiírja egy egész saját bináris ábrázolás. Szóval, ha játszani ezt a játékot újra és írja be a csak 1, kéne egy 32-bites ábrázolása 1. Ha ezt ismét 2, kéne ezt. Ha megteszem 7, kéne egy pár 1s a végén, és így tovább. Kiderült Azért említem ezt, mert a bitenkénti műveletek akkor ténylegesen egy másik dolgot is. Hozhat létre ezeket a maszkokat dinamikusan. Vessen egy pillantást erre egy utolsó részt vettek például bitenkénti műveleteket. Itt az első része a kód, figyelmezteti a felhasználót a száma, és ragaszkodik ahhoz, hogy adsz egy nem-negatív egész szám. Szóval ez a fajta old school cucc. De itt van valami, hogy ez a fajta érdekes. Hogyan megy a nyomtatás egy számot bináris? Először ismételget, amit a mi? Mi a méretének int tipikusan, legalábbis a készülék? >> [Hallgató] 4. Ez 4. Tehát 4 * 8 a 32 - 1 31. Tehát, ha kezdek számolni 31-től, amely képviseli, kiderül, csak fogalmilag, 31 bit, vagy a legmagasabb rendű bit, ami ezt a fickót ide, mivel ez lesz bit 0-ra. Szóval ez kicsit 01 ... 31 bit. Tehát mi ezt a kódot csinál? Figyelmeztetés ez a for ciklus, bár úgy néz ki, rejtélyes, éppen iterációjával 31-től lefelé 0-ra. Ennyi. Így az érdekes rész most kell e 5 sort itt. Figyeljük meg, hogy ebben a sorban vagyok nyilvánító változó nevű maszk hogy összhangban legyen a mi történetünk e sárga számok. És akkor mit keres ez? Ez egy másik bitenkénti üzemben általunk nem látott, nagy valószínűséggel. Ez a bal oldali eltolás operátora. Ez az operátor teszi ezt. Itt van az 1-es szám, és ha tudok bal shift, bal shift, Mit gondolsz, hogy az a hatása, tesz, hogy az egyes 1? Szó szerint változik át. Tehát, ha az 1-es szám, amit már a bal oldalon, és elkezdi az inicializálás i 31-ig, mi az, hogy fog csinálni? Ez fog tartani ez a szám 1 és váltani is 31 helyen ide. És mert ott nyilván nincs más számjegy mögötte, ezek alapértelmezés helyett 0s. Szóval, akkor elindul az 1-es szám, amely természetesen néz ki - és hadd hívjam át itt, a központban. Aztán ahogy váltani dolgokat a baloldalt, ez a fickó lényegében megy így. De amint te, hogy a 0 lesz kitöltött Ha váltani, hogy másodszor is megy így, és egy másik 0 lesz kitöltött Ön váltani újra, majd egy másik 0 lesz kitöltött Szóval, ha te ezt a dolgot az 1 << i 31 helyen, akkor a végén kapok egy maszk vagyis 32 karakter hosszú, a bal szélső melyek közül az egyik egy 1, az összes többi, amelyek egy 0. És kiderült, mint egy félre, változó egy számot a bal oldali, mint ez is véletlenül, és néha kényelmesen, azzal a hatással jár, hogy mit csinál ez a szám? >> [Hallgató] megduplázása azt. Duplázás, mert minden egyes oszlopok - az 1s hely, 2s hely, 4s hely, 8s hely, 16s hely - they're minden megduplázása mint te menj balra. Vagy inkább, ha eltolja a 1s fogsz a végén kétszeres értékét a számot. Akkor a végén csinál érdekes átalakulások számjegyek eltolásával mindent újra ily módon 2 hatványai. Szóval, hogyan is működik ez? Ez akkor ad nekem egy maszkot ennyi 0s, kivéve az 1 pontosan a helyet akarom, , majd ezt a kifejezést, amely ellopták toupper.c, egyszerűen azt mondja hogy a szám n, hogy a felhasználó beírt, "És" azt a maszkot, és mit fogsz kapni? Fogsz kapni egy 1 ha van egy 1, hogy álarcos location, vagy fogsz kapni a 0, ha nem. És mindez program nem hatékony ez egy hurok, és létrehoz egy maszkot, 1 ide, majd egy 1 fölött van, akkor a 1 ide, és használja ezt a bitenkénti AND trükk mondani, van egy 1 bites a felhasználó input itt? Van egy 1 bites a felhasználó input itt? És ha igen, szó szerint nyomtatása 1, else print 0. Megcsináljuk ezt ints csak azért, mert ez az, amiért csináljuk 32 bit helyett 8, de mi vezettünk be, akkor ez a bitenkénti ÉS, ez a bitenkénti OR, és ez a bal oldali eltolás operátora, amelyek nem gyakran szörnyen hasznosnak de kiderült, hogy lehet. Sőt, ha úgy döntesz, hogy ez olyasvalami, mint egy sor Logikai csak azért, hogy képviselje igaz vagy hamis, tegyük fel, hogy akarta nyomon követheti-e vagy sem egy szoba tele 300 diák van jelen, akkor állapítsa meg egy tömb mérete 300 típusú bool, hogy kapsz 300 bools, és beállíthatja az egyes true, ha valaki itt van, és hamis egyébként. Miért van az, hogy a képviselet, hogy az adatszerkezet hatékony? Mi rossz van a tervezés, hogy az adatok struktúrája, egy sor 300 bools? Mi az a bool, sőt, a motorháztető alatt? Ez is valami, lehet, hogy nem ismerős. Kiderült, hogy nincs bool. Ne feledje, hogy a fajta létre, hogy a cs50.h fájl, amely maga is tartalmazza a szabvány bool. C a fajta ostoba, bár amikor a bool. Használ 8 bit, hogy képviselje minden bool, ami teljesen felesleges mert nyilván, hány bit van szüksége, hogy képviselje a bool? Csak 1. Így kiderül, hogy ha már megvan a képessége a bitenkénti operátorok manipulálására egyes bitek még a char, még egyetlen byte, kiderül, akkor csökkentheti a szükséges memória képviseletére valami hülyeséget ilyen részvétel stílusú adatszerkezet tényezővel 8. Ahelyett, hogy a 8 bit, hogy képviselje igaz vagy hamis, akkor szó szerint használja segítségével egyetlen byte minden nyolc tanuló az osztályban és változni fog 0-1 egyes bitek felhasználásával ilyen típusú alacsony szintű trükköket. Ez tényleg véget vetett az energiát. Van bármilyen kérdése van bitenkénti műveleteket? Igen. >> [Hallgató] Van egy kizárólagos vagy üzemeltető? Igen. Van egy kizárólagos vagy üzemben, hogy néz ki, mint ez, ^, a répa jelkép, ami azt jelenti, csak az első dolog, vagy a második dolog, amit lehet 1 a kimenet, hogy egy 1. Van egy nem, ~, ami lehetővé teszi, hogy a 0 invertálásához értéke és az 1 vagy fordítva is. És van még egy jobbra léptetés operátor, >>, amely ellentétes az, amit láttam. Rendben van. Nézzük a dolgokat most, hogy egy magasabb szintre. Azzal kezdtük, hogy beszélni szöveget, majd tömörítse képviselő a szöveget kevesebb számú bitet; beszélgettünk egy kicsit arról, hogy hogyan tudunk most kezdeni manipulálni a dolgokat a bitenkénti szinten. Nézzük most Nagyításhoz vissza 10.000 láb képviseletre A bonyolultabb dolgok, mint a grafika. Itt van egy a Németország lobogója, itt van egy Franciaországban. Ezek lehetnek képviselve fájlformátumban talán tudja - GIF-ek, például. Ha valaha is láttam egy képet az interneten, hogy véget ér. Gif, ez a Graphics Interchange Format. Ez a két zászló van egyfajta átadja magát a kompressziós milyen talán nyilvánvaló oka? >> [Hallhatatlan tanulói válasz] Sok az ismétlés, ugye? Annak érdekében, hogy küldjön Németország lobogója, gondolom, ez mint egy kép a képernyőn vissza a Scratch nap. Lehet, hogy emlékszem, hogy van az egyes képpontok, amelyek alkotják egy képet. Van egy egész sor fekete pontok és a másik egész sor fekete pöttyökkel. Van egy csomó sor fekete pöttyök hogy mi lehetett látni, ha valóban nagyított, nagyon szeretem, amikor nagyított részt Rob arcát Photoshop. Amint megkaptuk egyre mélyebbre és mélyebbre és mélyebbre a kép, Elkezdte látta a pixelation, minden négyzetek komponált szeme ebben az ügyben. Ugyanez a helyzet itt. Ha nagyított egy kicsit, akkor lásd az egyes pontokat. Nos, ez a fajta hulladék bitek. Ha egy harmadik a lobogó fekete és egy harmadik a lobogó sárga és így tovább, miért nem lehet valahogy tömöríteni ezt a zászlót? És még a francia zászló lehet tömörített ellenére, hogy a minta egy kicsit más. Kiderült, hogy a GIF fájl formátum veszteségmentes tömörítési formátum, ami azt jelenti, hogy a kép, mint a német zászló van, tudsz dobni egy csomó a bitek minőség feláldozása nélkül. Ez ellentétben áll valami hasonló JPEG, amellyel a legtöbben valószínűleg jobban ismerik. Facebook fotók és Flickr Fotók és hasonlók szinte mindig mentésre JPEG amikor ők Feltöltött, de JPEG egy veszteséges - veszteséges - format ahol te dobja bit de akkor is dobni minőség. És így ha tömöríteni fotókat Photoshop vagy töltse fel őket a Facebook vagy az azokkal egy igazán szar telefon, tudod, hogy a kép kezd nagyon foltos és pixelated, és ez azért van, mert ez, hogy összenyomja a számítógép vagy telefon szó szerint dobtak információ található. De GIF elképesztő, hogy tudja használni kevesebb bitet, mint azt talán alapértelmezés szerint elvesztése nélkül bármilyen információt. És lényegében úgy teszi a következő. Ahelyett, hogy tárolja a fájl, mint a BMP lenne egy RGB hármas fekete, fekete, fekete, fekete, fekete, fekete, fekete, fekete, fekete, fekete, fekete, fekete, és így tovább, inkább a GIF formátum fogja mondani, hogy "fekete", majd "Ismételjük meg ezt a 100-szor", vagy valami ilyesmi. "Fekete, ismételje meg ezt a 100-szor, fekete, ismételje meg ezt a 100-szor ..." "Sárga, ismételje meg ezt a 100-szor." És ez így emlékszik lényegében a bal szélső pixel majd kódolja valahogy az elképzelést, hogy az ismétlődő pixel újra és újra. Így GIF ezután tömöríteni maguk elvesztése nélkül bármilyen információt. De ha kellett kitalálni, ha ez az algoritmus GIF használat, melyik zászlók, annak ellenére néznek azonos méretű, lesz kisebb, ha menti a lemezre, mint a GIF? >> [Hallgató] Németország. Németország lesz kisebb? Miért? [Hallgató] Mert te ismételd meg sok-sok alkalommal vízszintesen és akkor ismételje meg egy másik alkalommal. >> Pontosan. Mert az emberek, akik feltalálták GIF csak ilyen önkényesen úgy döntött, hogy az ismétlés lesz mobilizálható horizontálisan és nem oldalirányban. Van egy sokkal több ismétlés oldalirányban itt a német zászló, mint a francia zászlót. Tehát ha valóban nyitni egy mappát a merevlemezünkön, amely ezeket a GIF, el lehet látni, hogy a német zászló itt 2 kilobyte-os és a Francia egyik 4 kilobyte. Előfordul, hogy egy véletlen egybeesés, hogy az egyik kétszer a másik, de ez valójában az esetben, ha a francia zászló sokkal nagyobb. Annak ellenére, hogy mi beszélünk grafika, ugyanaz ötleteket lehet alkalmazni Nem dolgok, mint a zászló, de képeket egy kicsit bonyolultabb. Ha veszel egy kép egy almát, biztosan van egy csomó párhuzamos ott, így valahogy emlékszem, hogy az alapértelmezett háttér kék és nem, mivel a jobb oldali kép sugallja, meg kell emlékezni a szín minden egyes pixel ezen a képen. Így tudjuk dobni bit idegenben vannak információk elvesztése nélkül. Az alma még mindig úgy néz ki, mint az imént. Ebben a példában itt, akkor lehet látni, mi történik a filmben. Ezek képviselik old-school film tekercsek, amellyel a felső kép van van egy RV vezetői az elmúlt egy házat, és egy fa. És hogy van hajtja az elmúlt balról jobbra, mi nyilván nem változik? A ház nem megy sehova, és a fa nem megy sehova. Az egyetlen dolog, ami mozog a van ebben az ügyben. Szóval mint Háttér Változatlan sugallja, mit lehet csinálni a filmekben hasonlóképpen csak dobd el információ, amely nem változik a képkockák között. Ezt általában nevezik interframe tömörítés ahol, ha ez a keret úgy néz ki, majdnem azonos az ezt, ne zavarja tárolása a lemezen bármely azonos információkat e köztes képkockák, nézzük csak a kulcs képkockák néha hogy valóban tárolja ezt az információt redundáns mint egy kis józanság megtekintéséhez. Ezzel szemben, egy másik megközelítést tömörítése videó ebben második és alacsonyabb példa itt, ahol ahelyett, áruház 30 kép, miért nem csak tárolja 15 képkocka másodpercenként helyette? Ahelyett, hogy a film milyen szépen folyik, tökéletesen, lehet, hogy néz ki, mint ez a dadogás egy kicsit, egy kis old school, de a nettó hatása az lesz, hogy jóval kevesebb bitet, mint ami egyébként szükséges. Szóval, ha ez hagyja minket? Ez egy kicsit félre, hogy hol máshol lehet menni a tömörítés. További e, hogy egy osztály, mint a CS175 itt. Itt van egy másik példa a video. Ha a méhek az egyetlen dolog, mozgó, akkor tényleg dobja információt e középen keretek mert a virág és az ég és a levelek nem változnak. De nézzük most fontolóra egy utolsó dolog. A következő 5 percig hagyjuk C mögött örökre előadás? Igen. Nem a psets, mégis. Utolsó történet C hőmérsékleten, majd eljutunk a nagyon szexi stuff bevonásával HTML és webes és woo-hoo. Rendben van. Itt vagyunk. Ez a motiváció. Kiderült, hogy egész idő alatt, amikor mi már írt programokat futunk csenget. És csenget, most már azt mondta, mivel az első héten elég sok, úgy forráskód alakítja tárgykód. Beletelik C alakítja 0s és 1s. Már a fajta hazudott neked néhány hétig, mert ez nem annyira egyszerű. Van egy sokkal több folyik a motorháztető alatt, amikor fut a program, mint a csengés. Tény, hogy a folyamat összeállítása a program valóban össze, ahogy azt előhívni Rob videó fordítóprogramok, ezekbe 4 lépésben: előkezelést, összeállítása önmagában, összeszerelés, és összekapcsolása. De az osztályban, és a legtöbb ember a világon jellemzően összefoglalja az összes lépések A csak "fordítás". De ha kezdjük forráskód, mint ez, emlékszem ez talán a legegyszerűbb C program azt írtam eddig, emlékeztetni arra, hogy amikor összeállítják véget ér néz ki, mint ez. De van valójában egy közbenső lépést, és ezek a lépések a következők. Először is ez a dolog legtetején e és a legtöbb program, # Include Mit jelent a # include nem nekünk? Ez elég sok példányban és krém tartalmát stdio.h az én fájlt, hogy miért? Miért érdekel a tartalma stdio.h? Mi van benne az érdeklődés? Printf nyilatkozata, a prototípus, úgy, hogy a fordító, akkor tudja, hogy mire gondolok amikor megemlítem ezt a funkciót printf. Így az 1. lépést összeállításában előre-feldolgozás, ahol a program, mint a zengés vagy néhány segítő program csengés jön beolvassa a kódot, felülről lefelé, balról jobbra, és minden alkalommal, amikor látja a # jelet, majd egy kulcsszó, mint többek között, ellátja a művelet, a másolás és beillesztés ebben az esetben stdio.h be a fájlt. Ez az 1. lépést. Aztán van egy sokkal nagyobb C fájlt, mert a hatalmas másolás, beillesztés feladat ez történt. 2. lépés Most összeállításában. De kiderült fordítás úgy forráskódot, hogy így néz ki és kiderül, hogy valami, ami úgy néz ki, mint ez, amely azok számára ismerős a neve? >> [Hallgató] Assembly. >> Assembly nyelvet. Ez valójában valamit, ha veszel CS61 fogsz merülni részletesebben. Ez csak arról szól, olyan közel, mint eljuthat írás 0s és 1s magad de írás dolgok oly módon, hogy továbbra is teszi legalább egy kis értelme. Ezek a gép utasításait, és ha görgessen a fő funkciója van, észre, hogy itt van ez a push-utasítás, helyezze oktatás, kivonni oktatás, hívás utasítás, és így tovább. Amikor meghallja, hogy a számítógép az Intel Inside, van egy Intel CPU a Mac vagy PC, mit jelent ez? A CPU jön épített cégek, mint az Intel megértéséhez bizonyos utasításokat. Nincs ötlete, mi működik, mint a swap vagy fő önmagukban, de nem tudom, mi nagyon alacsony szintű utasítások, mint például összeadás, kivonás, push, mozgatni, hívja, és így tovább vannak. Tehát, ha fordítani C kódot assembly nyelvre, Ön nagyon felhasználóbarát megjelenésű kód alakítjuk valami úgy néz ki, mint ez, hogy szó szerint mozog bájt vagy 4 byte körül olyan kis egység, és ki a CPU. De végül, mikor csenget kész arra, hogy e képviselet a programunk -ba 0s és 1s, majd a lépés hívott összeszerelés történik, és ez ismét minden történik az egy szempillantás alatt, amikor fut csenget. Kezdjük itt, kiadja a fájlt, mint ez, és akkor átalakítja ezeket 0s és 1s. És ha azt szeretnénk, hogy menjen vissza egy bizonyos ponton, és valóban ez az intézkedés, ha bemegy hello1.c--ez az egyik legelső programok néztük - általában szeretnénk fordítani ezt csenget hello1.c és ez ad nekünk a.out. Ezzel szemben, ha ehelyett, hogy ez a zászló-S, mit kapsz a hello1.s és akkor valóban látni az assembly. Én ezt egy nagyon rövid programot, de ha megy vissza Scramble illetve helyreállítása, vagy bármilyen program, amit írtam, és csak kíváncsiságból szeretné látni, mit néznek ki, mi ténylegesen táplálni a CPU, tudod használni, hogy az-S zászlót csenget. De aztán végül, van még egy megvagy. Itt vannak a 0s és 1s, hogy képviselje a végrehajtása hello, világ. De használt valaki feladata az én program. Így annak ellenére, hogy a folyamat már veszek hello.c, ez lesz a fordított assembly kódot, és akkor lesz összeállítva is 0s és 1s, Csak 0s és 1s amelyek kiadott ezen a ponton az időben azok, amelyek eredményeként az én kódot. De az a személy, aki ezt írta printf, ők állították össze-kód 20 évvel ezelőtt és ez most már telepítve van valahol a készüléket, így valahogy össze kell fésülni az ő 0s és 1s az én 0s és 1s, és ez elvezet minket a 4. és utolsó lépés a fordítás, az úgynevezett összekötő. Tehát a bal oldali van pontosan ugyanaz a kép, mint az előbb: hello.c válik assembly kódot válik 0s és 1s. De emlékszem, hogy a szabványos I / O könyvtár kódomat, és ez azt jelenti, valahol a számítógépen van egy nevű fájlt stdio.c vagy legalábbis a lefordított verziót erről, mert valaki néhány évvel ezelőtt összeállítani stdio.c figyelembe assembly kódot, majd egy csomó 0s és 1s. Ez az, amit ismert, mint a statikus vagy dinamikus könyvtár. Ez néhány fájl ül valahol a készülékben. De végül, van, hogy az én 0s és 1s és az adott személy 0s és 1s és valahogy kapcsolja össze őket, a szó szoros értelmében egyesítik a 0s és 1s egyetlen a.out nevű fájlt vagy hello1 vagy bármi Felhívtam a programot úgy, hogy a végeredmény az összes az 1 és 0, hogy amennyiben alkotják a programot. Szóval egész idő alatt ebben a félévben, ha már használja csenget és még újabban a make ahhoz, hogy fusson csenget, minden ilyen lépést történt valami azonnal, de nagyon tudatosan. És ha továbbra is a számítógép-tudomány, nevezetesen CS61, ez az a réteg, amely akkor is húzza vissza le van beszél a hatékonyság, a biztonság vonatkozásai vannak, és hasonló ezen alacsonyabb szintű részletek. De, hogy mi vagyunk arról, hogy elhagyja C mögött. Menjünk előre, és hogy a mi 5-perces szünet most és mikor jön vissza: az interneten. Rendben van. Mi vissza. Most kezdődik a pillantást nem csak HTML, mert mint látni fogod, HTML maga valójában nagyon egyszerű de tényleg a webes programozás általában hálózatba általában és, hogy minden ilyen technológia találkoznak lehetővé teszi számunkra, hogy hozzon létre sokkal kifinomultabb programok tetején az internet mint eddig voltunk képesek e fekete-fehér ablakok. Sőt, ezen a ponton a félév ellenére töltjük viszonylag kevesebb időt a PHP, HTML, CSS, JavaScript, SQL és több, legtöbb tanuló nem a végén csinál végleges projekteket, amelyek web-alapú mert mint látni fogja, a háttérben most már a C nagyon alkalmazni ezeket a magasabb szintű nyelveken. És ahogy elkezd gondolkodni a végleges projekt, amely, akárcsak Problem Set 0, ahol arra ösztönözték tenni a legtöbb semmi érdeke, hogy Ön Scratch, a végleges projekt a lehetőséget, hogy a megtalált tudás és hozzáértés a C vagy PHP vagy JavaScript vagy hasonló egy körre és hozza létre a maga szoftver a világ látni. És vetőmag Önt ötleteket, tudom, hogy akkor irány ide, projects.cs50.net. Minden évben keresik ötleteket oktatók és oktatói és hallgatói csoportok az egyetemen csak azért, hogy nyújtsák be ötleteket érdekes dolog, hogy meg lehet oldani a számítógépek, használó weboldalak szoftver segítségével. Szóval, ha küzd, hogy dolgozzon ki egy ötlet a saját, minden eszközzel mozoghat az ötletek ott ebben az évben és az utolsó. Teljesen rendben van, hogy kezelni egy projekt, amely már foglalkozott korábban. Láttuk sok apps látva állapotát mosoda campus, sok apps navigációt az étkezőben menü sok apps történő navigálás során katalógus és hasonlók. És valóban, egy jövőbeli előadás és a jövőben szemináriumokon, fogjuk be, hogy néhány nyilvánosan hozzáférhető API-k, mind a kereskedelemben kapható valamint itt elérhető CS50 az egyetemen úgy, hogy az adatokhoz való hozzáférés és hajtsa érdekes dolgokat vele. Tehát inkább a végleges projekt néhány nap, amikor engedje a specifikáció, de most, tudom, hogy tud dolgozni egyedül, vagy egy vagy két barát a legtöbb bármely projekt érdekes az Ön számára. Az internet. Menj előre, és húzza ki a laptop, akkor megy facebook.com az első alkalommal, mivel nem jelentkezett be a közelmúltban, és nyomd meg az Entert. Pontosan mi történik? Ha Enter leütése a számítógépen, egy csomó lépést kezd valami varázslatos történik. Szóval itt a bal oldalon, a web szerver, mint a Facebook van a jobb oldalon, és valahogy te ezzel a nyelv úgynevezett HTTP, Hypertext Transfer Protocol. HTTP nem egy programozási nyelv. Ez inkább egy protokoll. Ez egy sor egyezmények böngészők és webszerverek használni, amikor összenyitható. És hogy ez mit jelent a következő. Ugyanúgy, mint a valós világban, már ezek az egyezmények ahol, ha megfelel néhány ember először, ha nem bánod humoring ide, Lehet, hogy jön hozzád, azt mondják: "Hi, my name is David." >> Szia, David. A nevem Sammy. "Szia, David. Nevem Sammy." Szóval most már csak részt ebben a fajta ostoba emberi jegyzőkönyv ahol már kezdeményezte a protokollt, Sammy válaszolt, mi már kezet, és az ügylet teljes. HTTP nagyon hasonló szellemben. Amikor a böngésző kéri www.facebook.com, amit a böngésző tényleg csinál kiterjeszti a kezét, hogy úgy mondjam, a szerver és ez megküldésével egy üzenetet. És ez az üzenet általában valami ilyesmi kap - mit akarsz? - vigyen a hazai oldalon, ami jellemzően jelöli egy perjel a végén egy URL-t. És csak hogy tudd, hogy milyen nyelven beszélek, én a böngésző fogom mondani hogy én beszélek HTTP 1.1-es verziója, És azt is jó intézkedés, azt fogom mondani, hogy a befogadó, hogy szeretnék a honlapján a facebook.com. Általában egy web böngésző, tudtán kívül van, az emberi, ezt az üzenetet küldi az interneten keresztül, ha egyszerűen írja www.facebook.com, Adja meg, a böngésző. És mit Facebook válaszolni? A választ néhány hasonló kinézetű rejtélyes adatok, hanem sokkal több. Hadd menjek előre, hogy a Facebook honlapján itt. Ez a képernyőn, hogy a legtöbben valószínűleg soha nem látni, ha Maradj bejelentkezve egész idő alatt, de ez valójában saját honlapján. Ha ezt a Chrome-ban, észreveszi, hogy akkor húzza fel ezeket a kis helyi menük. A Chrome, akár Mac OS, Windows, Linux, vagy hasonlók, ha Irányítsd kattintással vagy a bal gombbal, akkor általában felhúz egy menü, hogy néz ki, mint ez, ahol néhány lehetőség várja, melyek közül az egyik Oldal forrásának megtekintése. Azt is általában kap ezekre a dolgokra megy, a Nézet menüt, és dugta körül. Például itt a Nézet, Fejlesztő ugyanaz a dolog. Én megyek előre, és nézd Oldal forrásának megtekintése. Amit látni fogja a HTML, hogy Mark írt, hogy képviselje facebook.com. Ez egy teljes káosz van, de látni fogjuk, hogy ez teszi egy kicsit több értelme előtt hosszú. De van néhány minta itt. Hadd görgessen lefelé a dolgokat, mint ez. Ez nehéz egy emberi olvasni, de észre, hogy itt van ez a minta szögletes zárójelben kulcsszavakkal, mint lehetőséget, olyan kulcsszavakat, mint érték, néhány idézett húrok. Ez az, ahol, amikor aláírta a legelső alkalommal, meghatározott, mi a születési év. Ez a legördülő menüből a születési év valahogy kódolva van ezen a nyelven nevű HTML HyperText Markup Language. Más szóval, ha a böngésző kér egy weboldalt, szól az egyezmény úgynevezett HTTP. De mit facebook.com válaszoltak erre a kérésre? A választ néhány ilyen rejtélyes üzenetek, mint látni fogjuk egy pillanat. De a legtöbb válasz formájában HTML HyperText Markup Language. Ez a tényleges nyelvet, amelyen egy internetes oldalon van írva. És mi az a böngésző tényleg akkor van kézhezvételét valami úgy néz ki, mint ez, olvassa felülről lefelé, balról jobbra, és minden alkalommal, amikor lát egy ilyen szögletes zárójelben majd egy kulcsszó, mint opció, megjeleníti azt leíró nyelv megfelelő módon. Ebben az esetben, akkor megjelenik egy legördülő menü éve. De ismétlem, ez egy teljes rendetlenség nézni. Ez nem azért, mert a Facebook fejlesztők nyilvánulnak 0-5-ös típusú, például. Ez azért van, mert a legtöbb kódot írnak valójában, írott gyönyörûen, is megjegyezte, szépen tagolt, és hasonlók, de természetesen a gépek, számítógépek, böngészők tényleg nem érdekel hogy a kódot jól stílusú. És valóban, ez teljesen felesleges, hogy elérje a Tab gombot valamennyi alkalommal és vessenek megjegyzések végig a kódot, és válassza ki igazán leíró változók neveinek mert ha a böngésző nem érdekel, minden, amit csinál a végén a nap pazarlás bájt. Így kiderült, hogy amit a legtöbb honlapok tennie, annak ellenére, hogy a forráskód facebook.com, A cs50.net és ezek mindegyike más weboldalak az interneten jellemzően jól megírt és jól kommentált, és szépen tagolt és hasonlók, jellemzően mielőtt a weboldal kerül fel az internetre, a kód minified, ahol a HTML és a CSS - valami mást is hamarosan látni - A JavaScript kódot, hamarosan látni tömörített, amely szerint hosszú változók neveit válik X és Y és Z, és minden ami whitespace, ami mindent nézel olvasható ez minden eldobott, mert ha belegondolsz így Facebook kap egy milliárd oldalt üt egy nap - valami őrült ilyesmi - így mi van, ha a programozó csak hogy anális nyomja meg a szóköz egy további alkalommal, csak hogy francia néhány sort még sokkal több? Mi a hatása, ha megőrzi a Facebook, hogy whitespace mind a byte küldenek vissza, hogy az emberek az interneten? Hitting a szóköz, ha ad egy extra byte a fájlban. És ha egy milliárd ember, akkor folytassa le a honlap azon a napon, mennyivel több adatot voltál továbbított az interneten keresztül? Egy gigabyte ok nélkül. És megadták, egy csomó honlapok ez nem olyan skálázható kérdés, de a Facebook, a Google, néhány a legnépszerűbb honlapok van nagy ösztönzést pénzügyileg, hogy a kódot, mint egy rendetlenség annak érdekében, hogy az Ön által használt, mint néhány byte lehető mellett, majd tömörítse segítségével valami ilyesmit zip, egy algoritmus nevű gzip, hogy a böngésző nem automatikusan. De ez szörnyű. Soha nem fogjuk megtudni semmit arról, hogy más emberek honlapok és hogyan tervezzük weboldalak ha van, hogy nézd meg, mint ez. Szóval szerencsére, böngészők, mint a Chrome és az IE és a Firefox ezekben a napokban jellemzően jönnek beépített fejlesztői eszközöket. Valójában, ha lemegyek ide Ellenőrizzük Element, vagy ha elmegyek Mind, Fejlesztő, és menj a Developer Tools kifejezetten, Az ablak alján a képernyő most bukkan fel. Ez egy kicsit ijesztő az első, mert van egy csomó ismeretlen tabok itt, de ha rákattintok Elements egészen a bal alsó sarokban, Chrome nyilvánvalóan elég okos. Tudja, hogyan kell értelmezni az összes ezt a kódot. És mit csinál ez a Chrome megtisztítja az összes Facebook HTML. Bár ott nem whitespace van, nincs behúzás ott, Most veszi észre, hogy tudok kezdeni navigálni ezen a weboldalon annál hierarchikusan. Kiderül, hogy minden weboldal nyelven írt nevű HTML5 kell kezdeni ezzel, E DOCTYPE nyilatkozat, hogy úgy mondjam: Elég világos és szürke ott, de ez az első sort ebben a fájlban, és hogy csak azt mondja a böngésző, hogy "Hé, itt jön néhány HTML5. Itt jön egy internetes oldalon." Az első nyitó zárójel túl történik, hogy ez a dolog, egy nyitott zárójel HTML tag, majd ha merüljön mélyebbre - ezek nyilak teljesen értelmetlen; ők csak a bemutató kedvéért, azok valójában nem a fájlban - észre, hogy belül a Facebook HTML tag, bármi, ami kezdődik a nyitó zárójel majd még egy szót nevezzük tag. Tehát belül a HTML tag nyilvánvalóan egy fej címkét és a body tag. Belül a fej címke most egy egész káosz a Facebook azért, mert van egy csomó metaadatok és egyéb dolgok marketing és a reklám. De ha görgessen le, le, le, le, nézzük meg, hol van. Itt van. Ez egy legalább valamennyire ismerős. A cím a Facebook honlapján, ha valaha is megnézi a lapot a címsorban, a Welcome to Facebook - Bejelentkezés, Regisztráció vagy Tudjon meg többet. Ez az, amit szeretnél látni a Chrome címsorában, és ez hogyan is képviselt kódot. Ha figyelmen kívül minden mást a fejét, a legtöbb belek egy internetes oldal van a szervezetben, , és kiderül, hogy a Facebook-kód fog nézni bonyolultabb mint a legtöbb dolog, amit írok kezdetben csak azért, mert ez már felépített az évek során, de van egy csomó script tag-ek, JavaScript-kód, , ami a honlapon nagyon interaktív: látni státusz frissítéseket azonnal használó nyelvek, mint a JavaScript programot. Van egy úgynevezett div, ami egy részlege az oldal. De mielőtt eljutunk, hogy a részletekre, próbáljuk a kicsinyítéshez és nézd meg egy egyszerűbb változatát Facebook 1,0, hogy úgy mondjam. Itt a hello, world weboldalakat. Azt, hogy a DOCTYPE deklarációt legtetején ami egy kicsit különbözik minden mástól. Semmi mást írunk egy internetes oldalt fog kezdeni a merész. Ismét a történet ugyanaz: hello, vessző, indítsa el így ez merész, majd világ lesz félkövér, és ez azt jelenti, nyomtatásának kikapcsolásához ezt merész. Hadd menjek előre, és mentse a fájlt, menj vissza a Chrome-hoz, én nagyítás csak így látjuk, hogy jobb, és újra, és látni fogod, hogy a világ most már merész. A Web szól hivatkozások, úgyhogy menjünk előre, és ezt: kedvenc weboldalunk, mondjuk, youtube.com. Mentés, újra. Oké. Van egy pár probléma most mellett hideousness a honlapon. 1, biztos vagyok benne, elütöttem Adja meg itt. És tettem. Én nem csak Enter, én is behúzott, gyakorló, amit mi már prédikálni a stílus, de az is igaz, hogy a világ mellett. Miért van ez? Böngészők Csak tegye, amit mond nekik. Nem mondtam el a böngésző, "szünet vonalak itt. Beírása bekezdés szünet itt." Tehát a böngésző, nem számít, ha megüt Return 30-szor, ez még mindig megy, hogy a közvetlenül a világ. Amit igazán kell tennem itt mond valamit, mint a
, helyezzen be egy sortörést. És valóban, a sortörést egyfajta furcsa mert nem igazán lehet elindulni egy másik vonal, aztán csinálj valamit, majd állítsa le mozog egy új vonal. Elég egy atomi művelet. Vagy csináld, vagy nem. Te Enter, vagy nem. Tehát br egy kicsit egy másik tag, és így kell rendezni egyaránt nyitott és zárja le egyszerre. A szintaxis e ez. Technikailag, akkor valamit csinálni, mint ez néhány változat a HTML, de ez csak a hülye, mert nincs ok indításához és leállításához valamit ha ahelyett, mindezt egyszerre. Ismerd fel, hogy HTML5 nem feltétlenül igénylik ezt a perjel, így látni fogja tankönyvek és online források, amelyek nem rendelkeznek meg, de jó intézkedés nézzük gyakorolni a szimmetria, hogy láttunk eddig. Ez azt jelenti, hogy a címke egyszerre nyitott és zárt. És most hadd menteni a fájlt, menjen vissza ide. Oké, ez kezd jobban néz ki, kivéve a Web tudom a fajta kattintható, és még youtube itt úgy tűnik, nem vezet semmire. Azért, mert annak ellenére, hogy úgy néz ki, mint egy link, a böngésző nem tudja, hogy önmagában, így azt kell mondani, a böngésző, hogy ez a link. Az, hogy ezt az, hogy egy horgony címkét: és hadd mozog, hogy ez egy új sort csak azért ez egy kicsit olvashatóbb, és én összezsugorodik a betűméretet. Én vagyok kész még? No. Ott lesz e kettősség. Ez a címke, a horgony tag, valóban vesz egy attribútum, amely módosítja a viselkedését, és az értékét a tulajdonság nyilvánvalóan a YouTube URL-t. De észre a kettősség az, hogy csak azért, mert ez az URL-címet fogsz, ez nem jelenti azt, hogy kell, hogy legyen a szó, hogy te, és kiemeli, hogy egy link. Inkább, hogy lehet valami, mint ez. Tehát azt kell mondanom, hogy hagyja abba ezt a szót egy hivatkozásra használatával bezár horgony tag. Megjegyzés Én ezt nem csinálom. 1, ez csak egy hulladék az idő mindenki, és ez nem szükséges. Bezárásához tag, akkor csak említi a nevét, a tag újra. Nem említi sem az attribútumokat. Szóval menteni, hogy menjen vissza. Oké, íme, most már kék és hivatkozással. Ha rákattint, én tényleg nem megy a YouTube-ra. Így, bár a weboldal nem az interneten, ez legalább HTML, és ha hagyjuk, hogy a Internet felzárkózni, mi lenne valójában a végén itt youtube.com. És mehetek vissza, és itt a weboldalon. De észre ezt. Ha valaha is ütött spam vagy adathalász támadás, Most megvan a képessége után mindössze öt percet, hogy ugyanezt tegyék. Mi megy itt, és nem valami ilyesmit www.badguy.com vagy mi a vázlatos weboldal, és akkor lehet mondani, ellenőrizheti a PayPal számla. [Nevetés] És most ez fog menni badguy.com, amit nem fogok kattintani mert fogalmam sincs, hová vezet. [Nevetés] De most megvan a képessége, hogy valóban a végén ott. Szóval tényleg csak most kezdik karcolja meg a felületét. Mi nem programozási per se; írunk jelölőnyelv. De amint azt egészítik ki a szókincs HTML, fogunk bevezetni PHP, a tényleges programozási nyelv amely lehetővé teszi számunkra, hogy létrehoz HTML automatikusan generál CSS automatikusan annak érdekében, hogy el tudjuk kezdeni szerdán végrehajtására, mondjuk, saját kereső és így tovább. De még az, hogy egy pár napig. Találkozunk majd. [CS50.TV]