[Powered by Google Translate] [Nädal 7] [David J. Malan - Harvardi Ülikool] [See on CS50. - CS50.TV] Hea küll. Tere tulemast tagasi. See on CS50, ja see on alguse 7. nädalal. Paari väikest teated: Pset5 on nüüd käimas või kohe peab olema, ja lubage mul öelda, ausalt öeldes, see on tavaliselt ühed keerukamate muidugi probleem komplekti, seega lubage mul mainida seda nüüd nii et sel nädalal rohkem kui kunagi sa ei oota kuni, ütleme, kolmapäeva õhtul või neljapäeva õhtul sukelduda sisse See on kindlasti huvitav pset. Me arvame, et see on lõbus. Kui te tegelikult saada see täielikult õige ja saab seejärel väljakutse nn Big Board, sul on võimalus nutikusega mõned muidugi töötajad ja mõned oma klassikaaslastega. Mis Big juhatus on kui sul on oma õigekirja kontrollija tööd, Teil on võimalik minna cs50.net pärast töötab käsk, puhtalt valima, ja siis kui palju aega ja RAM'i ja rohkem et olete kasutanud oma rakendamise eksponeeritakse siin muidugi koduleheküljelt. Märkad, et terve hunnik need inimesed siin on loetletud töötajate kuna nädalavahetusel, töötajad arvasid, et oleks lõbus püüavad trumbata üksteist. Nii mõistame, et eesmärk siin on mitte võitma personal. Isegi mina olen ainult siin number 13. Puhtalt valima, kuid see on võimalus näha, kuidas väike RAM ja kui vähe CPU sekundit saate vis-à-vis mõned oma klassikaaslastega. Ja ma tunnistama, et Kevin Michael Schmid, praegu number 1 positsiooni ühe TFS, see on rakendamise, mida me nimetame ole võimalik arvestades, et ta on, kasutades peaaegu 0 RAM ja peaaegu 0 sekundit laadimiseks. Nii et me hoolitseme Kevin offline. [Naer] On teatud oskusi, et Kevin paneb proovile siin. Üks asi, me arvasime me tahaks teha liiga on nüüd CS50x on nädal pooleli ja te olete nii palju osa sellest katsest kui need õpilased on. Me oleme palunud neid osana oma pset0, mis oli samuti esitada Scratch projekti neid huvitavad - mäng, interaktiivne kunstiteos, animatsioon, või nagu - 1 - kuni 2-minutilise video, kui nad tahaksid, öeldes tere tulemast maailma ja kes nad tegelikult on. Ma mõtlesin, et ma jagan teiega paar videod, mis on esitatud seni sest meie jaoks töötajate kohta vähemalt, see tõesti on põnev ja inspireeriv näha need inimesed üle kogu maailma - riigis üle kogu maailma - tuning on, kõik asjad, et arvutiteadus muidugi Internetis kas sellepärast, et nad soovivad jätkata oma õpinguid, nad tahavad võtta oma karjääri uues suunas, nad tahavad, et täita lüngad oma teadmisi, nii mõned samad põhjused, mis teiega võib-olla on siin. Nii et ma annan teile ühe sellise õpilane siin. Sa võiksid tõsta maht natuke. Siin on üks meie üliõpilase 1-minutilise sõlmimiseks. Tere, maailm. Olen üliõpilane tööstustehnika siin: Malaga, Hispaania. Olen põnevil selle online muidugi, sest ma armastan arvutiteadus, ma tõesti, ja ma tõesti hindan seda, et ma saan seda uurima. Ja asjaolu, et ma saan õppida sama kõik kutid teha kuid selle asemel, et Harvard olen Malaga, kuidas awesome see on? Noh, ma olen Fernando, ja see on CS50. Näeme. [Naer] Teine klipp me meeldib, leiad, et see härrasmees inglise keel ei ole nii tugev. Paistab, et ta oli see masin tõlgitud, nii tõlkeid ise on natuke puudulik, kuid see oli üks meie lemmikud siiani hästi. [♪ ♪] Tere, maailm. [Räägib Jaapani] [Pean tervitama Jaapani sest mu inglise keel on väga usaldusväärne.] [Ma olen andnud sõnumi, et sind linna Gifu, Jaapan.] [Võin olla õpilane esimest korda 20 aasta jooksul, nagu näha.] [Ma olen väga tänulik, et Harvardi ülikooli, kes andis mulle võimaluse ja EDX.] [Golf on kitarr ja minu lemmik asi töötab.] [Naer] [♪ ♪] [Miks sa arvad, et ma üritasin osaleda cs50x.] [Harvardi Ülikool, see on minu igatsust.] [Eriti kui ma olen kauge olemasolu elas Jaapanis.] [Ma tahtsin proovida kohe teada sellisest EDX millal.] [Kas sa ei arva, et sa ei ole seotud vanusega õppe I] [Cs50 on minu igatsust. Minu nimi on Kazu, ja see on cs50.] [♪ ♪] [aplaus ja cheering] Teine lemmik meie oli see väide siin keegi. [♪ ♪] [Malan] Google, kui te ei tunne seda Meem. Ja siis lõpuks paar teised, et sai postitatud, et ehk võidab jumalik auhinna. [Õpilased] Aww! >> [Malan] Me peame kuulama. See on lühike, nii et kuula hoolikalt. [Naine kõneleja] Mis su nimi on? >> Louie. [Naine kõneleja] Mis see on? >> [Itsitab] CS50. [Naer] [Malan] Ta tegi kaks võtab, kuigi. Hakkab pihta, viimane. Minu nimi on Louie, ja see on CS50. [Naer] See on siis CS50x. Tänan kõiki neid teid, jälgides mööda kodus kes on partaking siiani. Täna lõpetame oma arutelu andmestruktuure vähemalt mõned kõige põhilisem, ja siis me jätkame vestlust HTML ja veebi programmeerimine. Tõepoolest, me oleme veetnud viimased mõned seitsme nädala vaadates põhialuste programmeerimine - algoritmid, andmestruktuurid, jms - ja C, kui olete kogenud seni, ei ole tingimata kõige kättesaadavamaks keelte kellega rakendada mõningaid neist teemadest. Ja nii algab sel nädalal ja järgmisel nädalal ja siis järgmine, me lõpuks suutma üleminek C, mis on üldiselt tuntud kui üsna madala keeles, et asjad kõrgemale tasemele, nende seas PHP, JavaScript, jms, mis me näeme tuginevad samadele õppetunnid, mida me oleme õppinud viimase paari nädala jooksul, kuid leiad, et kuulutab asjad massiivid ja hash tabeleid ja otsing ja sorteerimine muutunud nii palju lihtsam, sest keelte ise hakkame kasutades muutub võimsamaks. Aga kõigepealt kohaldamise puud. See on väga levinud nendel päevadel pead suruma teavet. Mis kontekstis oleks soovite tihendada mingi digitaalne andmed? Jah. >> [Üliõpilane] Kui teil on vaja saata see üle veebi. Jah, kui soovite saata midagi üle veebi. Kui soovite alla laadida suur fail, see on ideaalne, kui keegi teises otsas on kokkusurutud, et faili kasutades zip formaadis või midagi sellist nii, et saadate vähem bitti kui muidu edastata. Niisiis, kuidas sa suruma andmed? See kõik taandub kasutades vähem bitti kui nõutakse vaikimisi. Aga see on selline kummaline asi, sest arvan, et tagasi nädalatel 0 ja 1 kui me rääkisime ASCII ja Binary ja me rääkisime ASCII eriti kui on 8 bitti esindama tähestiku nii et kiri on esindatud 65, väiketähtedeks on number 97, ja siiski sa esindad 65 või 97 te kasutate 7 või 8 bitti. Aga saak on, et seal on mõned tähed inglise tähestik et ei ole nii populaarne kui teised. Z ei ole nii populaarne, Q ei ole nii populaarne, kuid A ja E on super populaarne. Ja veel kõik need tähed, vaikimisi maailma kasutab sama bittide arv, vaid 8. Nii et kas ei oleks olnud targemaks kui selle asemel 8 bitti iga täht, isegi kõige harva kasutada nagu Q ja Z, Mis siis, kui me kasutasime vähem bitti ja E ja S ja kõige populaarsem tähed ja kasutada rohkem bitti vähem populaarne tähed, asja mõte on selles olgem optimeerida ühise juhul mis on teema, infotehnoloogia, püüdes optimeerida, mida juhtub kõige ja kulutada veidi rohkem aega, natuke rohkem ruumi asjadele, jah, võib juhtuda kuid mitte tingimata nii tihti. Võtame ühe näite. Oletame, et me tahame kodeerida teavet üsna tõhusalt. Te olete üles kasvanud teades natuke midagi Morse koodi, ja koefitsiendid sa ei tea tegelikku koodi, aga sa võiks meenutada, et see on vähemalt see seeria täpid ja kriipsud. See on väga tõhus kodeerimine, ja teate, et kõige populaarsem täht - näiteks E - kasutab lühikese helisignaali. Morse kood on kõike piiks-piiks-piiks-piiks-piiks-piiks ja hoides toonid kas lühikeseks ajaks või pikemaks ajaks. E, kui tähistatakse dot, on super lühike helisignaal, vaid piiks, ja mis esindavad E. Seevastu T oleks enam piiksu, nagu piiks [pikendab heli], ja mis kujutaks T. Aga see on ikka päris lühike, sest vastupidi, kui te vaatate Z väljendada Z te läheks piiks, piiks [pikem heli], piiks, piiks [lühem heli]. Nii see on pikem, sest see on vähem levinud. Aga gotcha on selles, et Morse kood on natuke vigane aastal, et see ei ole kohe decodable. Näiteks oletame, et sa kuuled mõnel lõpuks juhe piiks [lühike] piiks [pikk]. Millist sõnumit ei ma lihtsalt saada? Dot ja sidekriips. Mida see koosneb? [Üliõpilane] A. >> [Malan] Võib-olla. Samuti võib olla E ja T. Teisisõnu, morset, kuigi see tasakaalustab selle põhimõtte optimaalne nurk juhul see ei saa ümber kohe decodability. See tähendab, et inimese, kes on kuulmine või saavad need täpid ja kriipsud peab kuidagi aru saada, kus katkestused on tähtede vahel, sest kui te ei tea, kus need katkestused on, siis võib segadusse jaoks ET või vastupidi. Mida võiks teha? Morse koodi võid lihtsalt paus vahel iga tähti. Aga pausid on selline vastuolus kogu mõte kiirendada asju üles. Mis siis, kui selle asemel me tulid kood, kus ei olnud see halb olukord kus E on eesliide, näiteks A - teisisõnu, kui me võiksime veenduda, et mustrid on ikka lühike populaarne tähed pikk vähem populaarne tähti, kuid seal ei ole võimalik segadus? Mees nimega Huffman aastat tagasi leiutas selle kava nimega Huffman kodeerimine et tegelikult tasakaalustab üks andmestruktuurid oleme kulutanud palju aega räägime Möödunud nädalal, et puud, kahendpuuks konkreetselt - kahendpuu mõttes, et ei ole rohkem kui 2 last. See on võibolla vasak laps, võibolla õige laps, ja ongi kõik. Olgu, oletame, lihtsalt huvides arutelu, et keegi tahab saata sõnumi mis näeb välja selline. See on täielik jama, kuid see koosneb Nagu, Bs, CS, DS, ja Es. Ja kui sa tegelikult loota kuni kõik Nagu, Bs, CS, DS, ja Es ja siis jagage koguarv tähed, see väike skeem siin ütleb, et 45% kirjadest on Ee, 20% on sama, 10% Bs, ja nii edasi. Nii et teiste sõnadega, võib eeldada, et jutumärkides stringi seal on vaid mõned sõnum, mida soovite saata. See juhtub olema jama lihtsalt nii saame kasutada nii vähe tähti kui võimalik, aga see on tõesti nii, et E on endiselt kõige populaarsem, ja B ja C on vähemalt populaarne, vähemalt neist 5 tähestiku. Niisiis, kuidas me saame minna tulemas kodeerimine, kahendkodeerimisvormingus, muster 0. ja 1s iga nimetatud tähed nii et E on lühike muster ja võibolla B ja C on veidi pikem mustrid, jälle mõte on selles, et tahame kasutada vähem bitti enamiku ajast ja rohkem bitte ainult üks kord samal ajal. Vastavalt Huffman kodeerimine, saate luua metsa puud. Seal on omamoodi lugu liin siin, mis hõlmab puud ja ka ülesehitamisel neid. Alustame. Pakun, et hakkate seda metsa, nii rääkida, 5. puud, millest igaüks on päris loll puu. Puu koosneb vaid ühe sõlme, mis esindab siin ringi. Nii et kõik need asjad võivad olla C struct ja sees C struct võib olla ujuki esindavad sagedus loota ja siis võibolla char esindavad kirja. Nii et mõtle need sõlmed nagu ainult iga vana C struct, kuid nüüd, kõrgemal tasemel. See on metsa 5 puud, iga, kes on ainult ühe sõlme. Mis Huffman kavandatud on, et hakkame ühendada need puud mis on väikseim sagedus loeb sisse veidi suurem puud ühendades neid uusi Juursõlme. Nii hulgas tähti siin, märkate, et mugavuse Olen järjestatud neid vasakult paremale, kuigi see pole tingimata vajalik, ning teave, et väikseim sõlmede Praegu 10% ja 10%. Nii Huffman ettepanek, et me liita need 2 väikseim sõlmede uude puu võetakse kasutusele uus vanem sõlme ja siis anda, et vanem vasakul laps ja õigus lapse kus B on omavoliliselt vasakule ja C on omavoliliselt õigus. Ja siis Huffman veelgi ettepanek, et olgem nüüd vaid mõelda vasakule laps ühes neist puud alati nii esindab 0 ja õigus laps alati nii esindab number 1. See ei ole tähtis, kui sa flip neid nii kaua, kui sa oled järjekindel. Nii et nüüd on meil neli puud selles metsas. Ja ma ütlen, neli, sest nüüd puu vasakul - ja see ei ole nii palju puu selles mõttes, et ta kasvab sel viisil, see on rohkem nagu sugupuu, kus nüüd 0.2 on omamoodi vanem kaks last - märkate, et sellel vanemal oleme tõmmatud 0.2. Lisasime sagedus loeb kaks last ja antud uus sõlm kogusumma. Nüüd me lihtsalt korrata seda protsessi. Leia kaks väikseimat sõlmede ja siis nendega liituda uude puu ja seejärel korrake protsessi veelgi. Praegu on meil vähe kandidaate, 20%, 15% ja teises 20%. Sel juhul on meil murda lips. Me saame seda teha suvaliselt. Me peaksime lihtsalt tee seda järjepidevalt. Sel juhul ma omavoliliselt minna koos üks vasakul, ja ma nüüd ühendada 20% ja 15% mulle uus ema kutsus 35%, kelle vasak laps on 0, kelle õigus laps on 1, ja nüüd on meil vaid kolm puud metsas. Saate ehk näha, kuhu see viib. Kui me kordame seda veel paar korda, me lähed on vaid üks suurem puu, kusjuures kõik servad on märgistatud 0. ja 1s. Teeme seda uuesti. 35% on see, et puu juur. 20% ja 45%, nii et me ei kavatse ühineda 35% ja 20%. Nüüd on meil see puu siin. Lisame need koos, meil on 55%. Nüüd on ainult kaks puud metsas. Me teeme seda viimast korda ja loodetavasti matemaatiliselt kõik sagedused liita sest nad peaksid, sest me arvutada neid saada-go lisada kuni 100%. Ja nüüd on meil üks puu. Nii et see on Huffman kodeerimine puu. See liik võttis aega, et saada seal verbaalselt, kuid reaalsus on see, mille jaoks silmus või rekursiivne funktsioon, siis võiks ehitada see asi üles päris kiiresti. Nii et nüüd on meil üks uus sõlm, ja kõik need sisemised sõlmed on malloc'd, eeldatavasti mööda teed. Nüüd ülaosas see puu on meil 100%, kuid nüüd märkate meil tee Sellest uuest vana-vana-vana-vanavanemat, et kõik vana-vana-vana-lapselapsed kõik viis põhjas, et kõik lehed. Mis me teeme nüüd on ettepanek, et selleks, et esindada kirjatäht E, me lihtsalt kasutada number 1. Miks? Sest kui me sõelub selle puu viimasest juure alla leaf tuntud E, me järgime vaid üks äär, parem serv, ja see on märgistatud muidugi ülevalt paremalt 1. Nii et kaudselt siia Huffman oli, et E kodeering binaarne peab lihtsalt olema 1. Ja see on päris kuradi efektiivne. Kas tõesti ei saa midagi väiksem. Seevastu saab olema esindatud, kui te järgite loogika, millise mustriga bittide asemel? 01. Nii et saada, hakkame keskmes ja läheme vasakule ja siis me minna paremale, mis tähendab, et me seejärel 0 ja siis 1. Nii et me esindab kirja mustriga 0 ja 1. Ja nüüd märkate meil juba vara kohe decodability et meil ei oleks Morse koodi. Kuigi mõlemad mudelid on üsna lühike - E on 1 bitt, on 2 bitti - märgata, et nad ei saa segi ajada üks või teine, sest kui sa näed on 1 ta ju olema E, kui näed 0, siis 1 see on ilmselt ju olema A. Samamoodi mis on D? 001. Mis on C? 0001. Ja mis on B? 0000. Ja jälle, sest kõik tähed me hoolime on kell lehed ja ükski neist pole selline vahendajaid tee tüvest lehed, pole mingit ohtu conflating 2 tähte "erinevad kodeeringud sest kõik need natuke mustrid on determineeritud. 0000 alati B. Pole mingit sõlme kusagil vahepeal, et võite segadusse üks täht teisega. Mis siis kaudselt siin? Kõige populaarsem täht - antud juhul E - on saanud lühikese kodeerimine, On saanud järgmise lühim kodeerimine, ja B ja C, mida me juba teadsime saada-minna olid omamoodi kõige vähem populaarne 10% sagedus iga, on nad saanud pikima kodeeringus. Ja mis see tähendab nüüd seda, et kui te soovite saata sõnum, mis on tihendatud üle interneti või e-posti vms, selle asemel et kasutada standard ASCII, võite saata Huffman kodeeritud sõnum kusjuures kui soovid saata kirja E, saadad lihtsalt ühe natuke. Kui soovite saata, saadate 2 bitti, 01, saatmise asemel 8 bitti järgneb teine ​​8 bitti, millele järgneb veel 8 bitti ja nii edasi. Aga seal on gotcha siin. See ei ole piisav, et lihtsalt ehitada see puu ja siis saatma hakata, Alice Bobile lühem natuke mustrit, stringi ASCII, sest Alice on ka teavitada Bob mida kui Bob saab olema võimalik lugeda tema kokkusurutud sõnum? [Kuuldamatu õpilase vastus] >> Mis see on? [Kuuldamatu õpilase vastus] >> Millise puu on. Või veelgi täpsemalt, mida need koodid on, eriti kuna sel lugu tegime otsuse kõne üks punkt. Pea meeles, et meil oli valida meelevaldselt vahel 2 erinevat 20% sõlmede? Nii see ei ole nii, et Bob, saaja, saab lihtsalt taastada puu omal sest äkki ta loob puu kunagi nii veidi erinevalt Alice. Lisaks Bob isegi ei tea, mida algne sõnum on sest ainus asi, Alice saadab teda muidugi on kokkusurutud sõnum. Nii et saak koos pakkimise, nagu see on, et jah, Alice on võimalik salvestada kogu palju bitti saates 1 E ja 01 jaoks ja nii edasi, aga ta on ka teavitada Bob mida kaardistamine on tähtede vahel ja bitti sest nad ei suuda selgelt tugineda ainult ASCII enam kui me ei kasuta ASCII. Nii ta saab kas saata ta puu kuidagi - kirjutage see, salvestada binaarandmeid või midagi sellist - või lihtsalt saata talle vähe petma lehte, Exceli faili, mis näitab kaardistamisel. Nii tõhusust compression tõesti eeldab, et sõnumeid saadate on päris suur, vähemalt keskmise suurusega, sest kui saadate super lühisõnumi, kui tahad lihtsalt, et saata sõnum BAD, mis juhtub olema sõna saame kirjutada siin, B-A-D, sa oled ilmselt ei kavatse kasutada vähem bitti, kuid saak on kui sul on samuti teavitada Bob mida on puul või mida need koodid on, sa lähed ilmselt ületama kõik säästud võttes suru asjad algavad. Nii et see võib tegelikult olla nii, et kui sa püüad kokkusurumise isegi midagi zip või failivorminguid võite olla tuttav - päris väikesed failid, isegi tühja faili - mõnikord need failid võivad saada suurem ja mitte väiksem. Aga reaalselt, et juhtub ainult väike faili suurus, nii ta ei kavatse teha gigabaidise faili on 2 gigabaiti; me tõesti räägime baiti või lihtsalt paar kilobaiti. Mõned programmid nagu zip on piisavalt targad, et mõista, et "Sa lähed kulutada rohkem bitte kokkusurumise seda." "Las ma ei viitsinud kokkusurumise see sinu jaoks üldse." Nii et see on lihtsalt üks viis siis kokkusurumise tekstina. Võiksime rakendada midagi sellist C. Näiteks, siin on, kuidas me võiksime esindada sõlme see puu kus meil on char jaoks sümbol, ujuv raha sagedus, ja nagu me oleme näinud meie teiste andmestruktuuride, 2 suunanäitajaks, 1 vasakule laps, 1 paremale, mida mõlemat ei saa olla NULL, aga kui mitte, siis see viitab vasakult laps ja õigus lapse. Nii et see on siis Huffman kodeerimine, ja see on üks viis, et võid minna umbes kokkusurumise teavet, ja see on kindlasti üks kõige lihtne rakendada kontekstis, ütleme, eelmisel nädalal andmestruktuure kuigi isegi keerukamaid algoritme olemas mida saab teha veelgi keerukamaid mutatsioonid oma andmeid. Kõik küsimused siis puud, kahendpuuks või kokkusurumine teksti? [Üliõpilane] Kas mõningat segadust, nagu siis, kui [kuuldamatu] jaotus 01, siis 011 oleks üheselt mõistetav, eks? [Kuuldamatu] >> Hea küsimus. Ebaselgus. Võtan kokku viidates seda pilti siin. Kuna tegelased olete kokkusurumise esindused, määratluse kohaselt on see algoritm alati lehed, sa ei saa iial kogemata kasutada sama mustri bitti eesliide mitu tähte. Nii et teiste sõnadega, sa oled mures, et see kõlab nagu, ebaselgus tulenevad kusjuures 001 võiks olla algus B või algus C või midagi sellist. Aga see ei saa nii olla, sest teate, et kõik tähestiku tähti me kodeerivad oled lehed. Ebaselgus võib tekkida ainult nagu juhul, morse kui näiteks C oli kusagil mööda teed juurest B. [Üliõpilane] Õigus. Nii et sel juhul öelda on 2 lehte. >> Ütle on - Ütle seda uuesti. [Üliõpilane] Ütle on 2 lehte, F ja G, siis G - >> Okei. Aga see ei saa. Ise ei saanud lehed F ja G, sest need kirjad F ja G oleks ise olla jätab kuhugi vasakule B või paremal E. Nii definitsiooni järgi nad peavad olema lehed. Muidu sa oled täpselt õige, me pole lahendanud probleemi, et morset nägu. Hea küsimus. Muud küsimused? Hea küll. See mõiste bitti, selgub oleme olnud võimu kogu aeg, et me oleme tegelikult ei kasutata kui ta tuli manipuleerides neid 0. ja 1s. Küsisime selle kohta üks esimesel probleem komplekti: nimelt, kuidas sa minna konverteeriva Suur-ja väiketähtede või vastupidi? Või konkreetsemalt, üks nendest esimestest psets palus mitu bitti sa tegelikult klapp, et muuta väiketähtedeks või vastupidi? Siin on kiire meeldetuletus sellest, mis 65 ja 97 näevad välja nagu binaarne. Ja isegi kui see küsimus on omamoodi pleekinud oma mälu, näete jälle siin, et mitu bitti tuleb keerata muuta kapitali väiketähtedeks? Lihtsalt üks. Nad ainult erinevad vaid ühes kohas, kolmas natuke vasakule. Arvestades on 010, vähe on 011. Nii et kuidagi peame lihtsalt suutma klapp, et natuke, ja siis saame ära või väiketähti. Me oleme seda teinud minevikus tegelikult kasutades, kui tingimused ja kontrollida, kas kiri on vahel kapitali ja kapitali Z siis väljundid nagu - + 26 või midagi sellist. Sa ilmselt ei aritmeetika muutus tähestiku. Aga kui me võiks lihtsalt klapp, et ühe natuke? Kuidas sa võisid minna umbes võttes üks bait on väärt bitti, seega 8 bitti nagu 01000001 ja 01100001? Kui sul oleks need mustrid bitti, kuidas me saame minna umbes muuta vaid üks neist? Mis siis, kui me võtame kasutusele kollase siin teiste muster bitti? Kui ma teen terve kollane nöör 0s välja arvatud üks natuke, et ma tahan muuta ja siis ma tutvustan uus operaator tuntud BitWise operaator - BitWise selles mõttes, et see toimib üksikute bittide, mitte kogu bait või neli baiti korraga. See püstkriips seal kollane näitab, et mis siis, kui me võtame esindatuse kapitali ja BitWise või see kollase bittide jada? Teisisõnu, mõtlen tagasi meie arutelu Loogiline väljendeid Scratch ja seejärel C. Doing Boole'i ​​või tähendab, et see on tõsi, kas esimene asi on, et olla tõsi või teine ​​asi on, et olla tõsi või nad mõlemad on, et olla tõsi, ja siis Tulemuses on ise tõsi. Selles asjas, mida me saame, kui me võtame 0 "või" ed 0? Vale või vale? See on ikka vale, nii väiksed jääb ootuspäraselt. Mis siis, kui selle asemel teeme 1 või 0? See nüüd jääb 1, kuid pane tähele, mis juhtub kohe siia. Kui hakkame koos kapitali ja me jätkame "või" selle üksikute bittide nagu me siin teeme, 0 või kollane annab meile, mida siin all? See annab meile 1. Tegelikult arvan, et me ei tea, mida suur versioon vähe tegelikult oli. Lähme teeme seda. Lubage mul seda liigutada tagasi siia. Teeme seda uuesti. 0 või 0 annab mulle 0. 1 või 0 annab mulle 1. 0 või 1 annab mulle 1. 0 või 0 annab mulle 0. Järgmise üks on 0, järgmisel üks on 0, järgmisel üks on 0. 1 või 0 annab mulle 1. Ja nii et isegi kui me ei tea ette, mida väiketähtedeks oli, lihtsalt "või" mine selle mustriga bittide et me oleme siin esitatud kollaselt, saate väiketähtedeks kapitali poolt flipping et natuke. Me kasutasime seda väljendit nädalat tagasi: flipping natuke. Kuidas tegelikult teha, et programmiliselt? Sa kasutavad, mida üldiselt nimetatakse mask, bittide jada, et antud juhul just nii juhtub nägema seda numbrit siin, ja siis "või" see koos selle uue C operaator, ei | |, saate ühe | ja sa tegelikult saad selle vastuse siia, sest miks? See on 1s koht, 2s koht, 4s, 8s, 16s, 32s. Nii tuleb välja, et kui te võtate suure tähega ja BitWise VÕI seda täisarv 32, sest täisarv 32, kui te vaatate seda bitti, näeb välja selline, see tähendab, et saate sirvida natuke, mida sa tegelikult tahad. Ja samamoodi - ja me vaatame koodi hetk - arvan me tahame minna teises suunas. Kuidas minna alates väiketähti kapitalile? Mis natuke on vaja muuta? See on seesama. Me tahame muuta, et kolmandad natuke 1 kuni 0. Ja kuidas võiks me minna seda teed? Kuidas lülitada natuke? Millega muster bitti võiksime välja lülitada veidi? Mis siis, kui me omamoodi invertsuhkur mask? Kui varem tegime kogu kollane mask 0s välja arvatud üks natuke tahtsime sisse lülitada, Mis siis, kui seekord, teeme kogu mask 1s välja arvatud natuke, et me tahame välja lülitada ja siis kasuta mida operaator? Mis siis, kui me "ja" asjad? Võtame pilk. Kui me nüüd flip sellele, arvan, et jälle ma luua mask, mis on kõik 1s välja arvatud üks natuke, et ma tahan välja lülitada ja siis selle asemel "või" valge numbrid üles üles kollase numbrid siia alla, Aga kui ma selle asemel "ja" neid koos? Seda nimetatakse BitWise ja. Loogiliselt on see sama asi nagu Boole'i ​​ja. See annab mulle 0 & 1 on 0. Nii vale ja õige on vale. Tõeline ja õige on tõsi. Ja siin on magic: Õige ja vale on nüüd vale, mistõttu oleme välja lülitatud, et natuke. Ja nüüd ülejäänud lugu on üsna lihtne. Sest ülejäänud mask on 1s, see ei ole oluline milliseid numbreid on valge. Kui "ja" midagi tõsi, sa ei kavatse muuta oma väärtusest. Kui see on tõsi, jääb see tõsi. Kui see oli vale, jääb see vale. Aga magic juhtub, kui te võtate midagi, mis oli õige ja sa siis "ja" see ka vale. Selle mõjul välja lülitamata, et natuke. Nii vähe segasena seal. Olgem tegelikult vaadata natuke koodi, mis võib tegelikult vaadata isegi rohkem segasena, aga võtame pilk siin tolower. Kui ma vaatan tolower, läheb kapital väiketähtedeks, Vaatame, kuidas me võiksime rakendada seda programmi. Siin on peamine, ja see ei võta mingeid käsurea argumente. Ma kuulutatakse iseloomu C kirjas, et kasutaja saab tüübi sisse Ma siis kasuta tuttav ei samas loop lihtsalt veendumaks, et kasutaja kindlasti annab mulle kapitali või B või C. .. Z, nii et nad mulle midagi vahel ja Z. Ja nüüd, mida ma siin teen? Ma olen "või" mine seda 0x20, aga see on tegelikult sama - ja me tuleme tagasi selle juurde hetke - 32. Nii et taas, 32 on see muster bitine siin. Miks me seda tead? Lihtsalt arvan, et tagasi nädal 0. See on 1s koht, 2s koht, 4s, 8s, 16s, 32s koht. Nii et see kollane number juhtub olema 32. Võin siis võta kirja nagu char siin, BitWise "või" see sõna-sõnalt number 32, ja mida ma tagasi tulen? Väiketähed versiooni, et char. Hetk tagasi, kuigi ma väljendas seda erinevatel alustel märke. Mida see koosneb? >> [Üliõpilane] Hexadecimal. [Malan] See juhtub esindama kuueteistkümnendsüsteemis. Me ei rääkinud kuueteistkümnendsüsteemis kõik, et palju, aga see on tegelikult mugav sellistel juhtudel. Kuigi tundub keerulisem ja kuigi see näeb välja nagu 20 ja ei 32, Selgub, et kuueteistkümnendsüsteemis on tegelikult super mugav märke sest kuueteistkümnendsüsteemis iga number pärast 0x - ja see ei tähenda midagi; see on lihtsalt inimeste konventsioon, mis ütleb siin tuleb kuueteistkümnendarvuna - kõik need numbrid, 2 ja siis 0, ise saab esindajad täpselt 4 bitti. Nii et kui me seda teeme, lubage mul avada tekstiredaktor siin - imelik automaatteksti - kui me teeme natuke tekstiredaktor siin, number 0x20 tähendab siin on 4 bitti, siin on teine ​​4 bitti. Teeme parempoolsem 4 bitti esimesena. 0, kui esindatud on 4 bitti on mis? Super lihtne. Lihtsalt kõik 0.. Nii et 4 bitti kui 0.. Kuidas te esindate 2? See on olnud mõnda aega, kuna me tegime seda, aga see on 0100. Nii et see on 1s koht, see on 2s koht, ja siis ei ole oluline, mida teised kohad on. Teisisõnu, kuueteistkümnend võite öelda, 0x20, aga kui sa siis mõelda, mida on 2 ja kuidas seda esindatud binaarne, Milline on 0 ja kuidas seda esindatud binaarne, Vastused nendele küsimustele on selle ja selle puhul. Nii 0x20 juhtub esindama see muster 8 bitti, mis on just mask, mis me tahtsime. Nii et see on praegu lihtsalt intellektuaalset harjutust, kuid reaalsus on kodeeritud see on tavaliselt rohkem levinud kirjutada konstandid nagu see kuueteistkümnendsüsteemis sest siis programmeerija saab suhteliselt kergesti, isegi kui see eeldab mõningaid paber ja pliiats, nuputada, mida see muster bitti on sest sa ei saa lihtsalt väljendada 0. ja 1s tavaliselt kood. Sa ei saa minna 00010 ja nii edasi. Sa pead valima koma või kuueteistkümnendsüsteemis või kaheksand või muud märkused. Enamus inimesi kipuvad valima kuueteistkümnendsüsteemis lihtsalt nii, et iga number esindab 4 bitti ja seda saab teha kiire matemaatika. Ja ma siputan kätt toupper, mis on peaaegu sama, see näeb välja peaaegu identsed. Toupper juhtub kasutada ei või operaator, vaid see kutt ja df. Mis df koosneb? df? Igaüks? >> [Üliõpilane] 255. 255? Ei 255. See oleks jj. Me jätame selle ühe vähese kasutamise. Aga kui sa lähed 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ja siis mida on pärast 9? Oleme omamoodi välja murdarvud, kuid kuueteistkümnendsüsteemis mis tuleb peale 9? [Üliõpilane]. >> Niisiis, b, c, d. Saate aru sealt mida muster bitti d tegelikult kujutab. Ja kui me ei matemaatikat, siis me näeme, et mask sa lõpuks saada tagasi on identne sellele. See on f, kõik 1s, ja see on d. Nii df näitab, et mask. Hea küll. Ja lõpuks, mitte teha asju heli super, super tehnika, kuid arvan, et me tahtsime kirjutada programm, mis seda teeb. Lubage mul minna ja teha binaarne, mis on programmi faili nimega binary.c. Ja nüüd ma jooksma binaarne ja anna mulle mittenegatiivne täisarv. Alustame lihtne ja kirjuta 0. See nüüd on programm, mis trükib välja täisarv oma kahendkujul. Nii et kui ma mängin seda mängu uuesti ja kirjuta lihtsalt 1, ma peaks saama 32-bitise esindamine 1. Kui ma seda veelkord 2, ma saan aru. Kui ma teen 7, ma peaks saama mõne 1s lõpus ja nii edasi. Selgub, ma mainin seda, sest koos BitWise toimingud tegelikult võite seda teha veel üks asi samuti. Saate luua need maskid dünaamiliselt. Heitke pilk see üks viimane näide on seotud BitWise operatsioone. Siin on esimene osa koodist, kiire kasutaja jaoks number, ja see nõuab, et sa annad mulle mittenegatiivne täisarv. Nii et omamoodi vana kooli värk. Aga siin on midagi, mis on omamoodi huvitav. Kuidas minna trükkimine number binaarne? Ma esimest itereerima sellest, mida, mida? Mis suurus int tavaliselt vähemalt seadet? >> [Üliõpilane] 4. See on 4. Nii et 4 * 8 on 32-1 on 31. Nii et kui ma hakkan lugema alates 31. mis tähistab, selgub, lihtsalt kontseptuaalselt, 31. bitine või kõrgeima järjekorras natuke, mis see kutt siin, arvestades, et see saab olema bitt 0. Nii et see on natuke 01 ... natuke 31. Mis siis on see kood teeb? Teade selle jaoks silmus, kuigi tundub segasena, on lihtsalt itereerimise 31 alla 0. Nii see on. Nii huvitav osa nüüd peavad need 5 rida siin. Pange tähele, et seda joont ma kuulutab muutuja nimega mask olema kooskõlas meie lugu need kollased numbrid. Ja mis siis on see teed? See on veel üks BitWise operaator me pole varem näinud, kõige tõenäolisem. See on vasakule nihe operaator. See ettevõtja teeb seda. Siin on number 1, ja kui sa i vasakule nihe, vasakule nihe, Mis sa arvad, et tulemuseks on teed, et üksikute 1? Sõna otseses mõttes nihkub see üle. Nii et kui number 1 on see, mida teil on vasakul ja hakkate initsialiseerimisel I 31, Mis see on teha kavatsed? See vőtab see number 1 ja suunata see 31 kohas üle siin. Ja kuna seal on ilmselt ühtegi teist numbrit taga, need on vaikimisi asendada 0.. Nii saad hakata läbi ja number 1, mis muidugi näeb välja selline - ja las ma joonistan selle siia keskele. Ja siis kui sa minema asju vasakule, see kutt sisuliselt läheb sel viisil. Aga niipea kui sa seda tegid, 0 saab täis sisse Kui nihutad teist korda, see läheb nii ja teine ​​0 saab täis sisse Sa minema seda uuesti ja siis teine ​​0 saab täis sisse Nii et kui sa seda asja 1 << i 31 kohas, siis lõpuks saada mask mis on 32 tähemärki pikk, kõige vasakpoolsema millest üks on 1, kõik ülejäänud, mis on 0. Ja selgub, kui kõrvale, suunates arv vasakule niimoodi ka juhuslikult, ja mõnikord mugavalt mõjul seda, mida selle numbri? >> [Üliõpilane] Kahekordne ta. Kahekordne sest igasse veergu - 1s koht, 2s koht, 4s koht, 8s koht, 16s koht - Nad on kõik kahekordistamist lähete vasakule. Või pigem, kui nihutad 1s sa lähed lõpuks kahekordistada väärtus number. Saate lõpuks teeme huvitavaid ümberkujundamise numbrit suunates kõik üle sel viisil 2 astmed. Niisiis, kuidas see toimib? See siis annab mulle mask, mis on kõik 0s va 1 täpselt paigas ma tahan seda, ja siis see väljend, mis on varastatud toupper.c, lihtsalt öeldes võtma arv n, et kasutaja sisestatud, "Ja" seda, et mask, ja mida sa hakka? Sa lähed, et saada 1, kui seal on 1, et maskides asukoht, või sa lähed, et saada 0, kui seal ei ole. Ja nii kõik see programm ei tegelikult on tal silmus, ja see loob mask 1 üle siin, siis 1 üle siin, siis 1 üle siin, ja ta kasutab seda BitWise ja trikk öelda, kas on 1 bitt on kasutaja sisendit siin? Kas 1 bitt on kasutaja sisendit siin? Ja kui, siis sõna otseses mõttes printida 1, teine ​​printida 0. Me teeme seda ints lihtsalt sellepärast, et miks me teeme 32 bitti 8 asemel, kuid mida me oleme kasutusele siis on see BitWise ja see BitWise VÕI ja see vasakule nihe operaator, mis ei ole sageli kohutavalt abivalmis, aga tuleb välja, nad võivad olla. Tegelikult, kui sa olid esindab midagi sellist massiivi tõeväärtused lihtsalt esindama õige või vale, oletame, et sa tahad jälgida, kas tuba täis 300 üliõpilast on olemas, sa võiksid kuulutada massiivi suurus 300 tüüpi bool nii et saad 300 bools, ja saate iga tõeseks, kui keegi on siin ja vale teisiti. Miks see esindatus et andmestruktuur ebaefektiivne? Mis on halba disaini, et andmestruktuur, array 300 bools? Mis on bool, tegelikult all kapuuts? Ka see on midagi, mis ei pruugi olla tuttav. Tuleb välja, ei ole bool. Pea meeles, me justkui loodud, et koos cs50.h faili mis ise sisaldab standard bool. C on mingi loll, aga kui tegemist on bool. Ta kasutab 8 bitti esindama iga bool, mis on täiesti raiskav sest ilmselgelt, mitu bitti sa pead esindama bool? Just 1. Nii tuleb välja, et kui te nüüd võime koos BitWise ettevõtjad manipuleerida üksikute bittide isegi char isegi ühe baidi, Selgub võid vähendada mälu vaja esitada midagi rumalat niimoodi käimine stiilis andmestruktuur koefitsiendiga 8.. Selle asemel kasutatakse 8 bitti esindama õige või vale, võid sõna otseses mõttes kasutada ühte kasutades ühe baidi jaoks iga kaheksa õpilased klassis ja lülitades 0-1 üksikute bittide abil selliseid madala trikke. See tõesti lõpetada energiat. Kas on mingeid küsimusi BitWise operatsioone? Jah. >> [Üliõpilane] Kas ainu-või operaatori? Jah. Seal on eksklusiivne või ettevõtja mis näeb välja selline, ^, porgand sümbol, mis tähendab ainult esimene asi või teine ​​asi võib olla 1, väljund 1. On ka mitte, ~, mis võimaldab teil invertsuhkrut 0 kuni 1 või ka vastupidi. Ja seal on ka õigus vahetuse operaator, >>, mis on vastupidine, mida me nägime. Hea küll. Võtame asju nüüd kõrgemal tasemel. Alustasime räägime teksti ja siis pakkimata ja teksti esindavaid vähemate numbrite bittide; me rääkisime natuke, kuidas me saame nüüd alustada manipuleerides asju BitWise tasandil. Lähme nüüd suumida varundada 10000 jalga esindamise Keerukamate asjad graafika. Siin on meil Saksamaa lipu, siin on meil üks Prantsusmaal. Need võivad olla esindatud failivorminguid te võite teada - GIF, näiteks. Kui sa oled kunagi näinud pilti veebis, mis lõpeb. Gif, see on Graphics Interchange Format. Need kaks lippu siin omamoodi võimalda surve mida võib-olla ilmne põhjus? >> [Kuuldamatu õpilase vastus] Seal on palju kordusi, eks? Selleks, et saata Saksamaa lipp, mõtlen seda kui pilt ekraanil Tagasi oma Scratch päeva. Võite meenutada, et seal on individuaalne piksleid või punkte, mis moodustavad pildi. Seal on terve rida mustad täpid ja teise terve rida mustad täpid. Seal on hunnik ridu mustade täppide et me ei näe, kui me tõesti suumitud, Sarnaselt, kui me suurendada sisse Rob nägu Photoshop. Niipea, kui saime üha sügavamale ja sügavamale pilt, sa hakkas nägema pixelation, kõik ruudud, kuhu oma silmaga sel juhul. Sama asi siin. Kui me suumitud üsna vähe, siis oleks näha üksikud täpid. Noh, see on selline raiskamine bitti. Kui kolmandik lipp on must ja kolmandik lipp on kollane ja nii edasi, miks ei saa me kuidagi suruma see lipp? Ja isegi Prantsuse lipu võiks suru kuigi muster on natuke erinev. Selgub, GIF-vormingus kadudeta pakkimise formaat, mis tähendab, et saate võtta pilt nagu Saksa lipu siin, saab visata palju oma bitti ohverdamata kvaliteeti. See on kontrastiks midagi JPEG, millega enamik meist on ilmselt rohkem tuttavad. Facebook fotod ja Flickr fotod jms on peaaegu alati salvestatakse JPEG, kui nad üles, kuid JPEG on kadudega - kadudega - formaadis, kus sa ei visata bitti aga sa ka visata kvaliteet. Ja kui sa suruma fotod Photoshop või laadida need üles Facebook või võtta neid tõesti jube telefon, sa tead, et pilt hakkab saama väga laigulised ja pixelated, ja see on, sest see on tihendatud arvuti või telefon sõna otseses mõttes viskamine teavet kaugusel. Aga GIF on hämmastav, et seda saab kasutada vähem bitti kui see võib vaikimisi kaotamata andmeid. Ja ta sisuliselt teeb seda järgmiselt. Selle asemel, kauplus faili nagu BMP oleks RGB kolmekordne must, must, must, must, must, must, must, must, must, must, must, must ja nii edasi, pigem, GIF formaadis on öelda, "Must" ja siis, "Korrake seda 100 korda," või midagi sellist. "Must, korrake seda 100 korda, must, korrake seda 100 korda ..." "Kollane, korrake seda 100 korda." Ja nii see mäletab sisuliselt kõige vasakpoolsema pixel ja siis kodeerib kuidagi mõiste kordamast, et piksel ikka ja jälle. Nii GIF saab surutakse ennast kaotamata andmeid. Aga kui sul oleks arvata, kui see on algoritm, mis GIF kasutamist, mis need lipud, kuigi nad näevad välja ühesugused, suurus, saab olema väiksem kui salvestatud plaat GIF? >> [Üliõpilane] Saksamaa. Saksamaa saab olema väiksem? Miks? [Üliõpilane] Sest sa seda korrata palju kordi horisontaalselt ja siis kordan veel kord. >> Täpselt. Sest inimesed, kes leiutas GIF lihtsalt selline omavoliliselt otsustanud et kordamine võimendatakse horisontaalselt ja mitte külgsuunas. Seal on palju rohkem kordusi külgsuunas siin Saksa lipu kui Prantsuse lipu all. Nii et kui me tegelikult avada kausta minu kõvakettale, mis on need GIF, tegelikult võite näha, et Saksa lipu siin on 2 kilobaiti ja Prantsuse üks on 4 kilobaiti. See juhtub olema juhus, et üks on kaks korda teine, aga see on tegelikult nii, et Prantsuse lipp on palju suurem. Isegi kui me räägime siin graafika, sama ideed saab rakendada ei asju nagu lipud kuid pilte, mis on veidi keerulisem. Kui te võtate pildi õun, kindlasti on ka palju dubleerimist seal, et me saaks kuidagi unustada, et vaikimisi taust on sinine ja mitte, nagu parempoolsel pildil näitab, pea meeles värvi iga piksel sellel pildil. Nii et me ei viska bitti ära seal kaotamata andmeid. Apple paistab endiselt sama. Selles näites siin, võite näha, mis juhtub filmis. Need esindavad vana kooli filmi rullid, mille ülemises pilt seal teil on RV sõidu viimase maja ja puu. Ja et van juhib viimase vasakult paremale, mis on ilmselt ei muutu? Maja ei lähe kuhugi, ja et puu ei lähe kuhugi. Ainuke asi, mis liigub on van käesolevas asjas. Nii nagu taust muutu ütleb, mida saate teha filme on samamoodi lihtsalt ära visata teavet, mis ei muutu raamide vahel. See on üldiselt tuntud kui Interframe kompressiooni kusjuures kui see raam näeb välja peaaegu identne selle ühe, ärme vaeva salvestamine kettale mõni identseid andmeid Nende vahe raamid, olgem kasutada ainult võti raamid kord samal ajal et tegelikult selle teabe säilitamise liigselt niisama vähe meelerahu vaadata. Seevastu teine ​​lähenemine kokkusurumise video on see teine ​​ja madalam näiteks siin, kus mitte poest 30 kaadrit, miks sa ei salvestada 15 kaadrit teise asemel? Selle asemel, et filmi sellist voolab ilusti, täiesti, See võib tunduda see on kogelemine natuke, vähe vana kooli, kuid netomõju on kasutada palju vähem bitti kui muidu oleks vajalik. Nii et kui see siis jäta meid? See oli natuke kõrvale, kus muidu võid minna koos kompressiooni. Lisateavet, et võtta klassi nagu CS175 siin. Siin on veel üks näide jooksul video. Kui mesilane on ainus asi liigub, saab tõesti visata teavet nende keskel raamid sest lill ja taevas ja lehed ei muutu. Kuid olgem nüüd kaaluda veel ühte asja. Järgmise 5 minutit jätame C taga igaveseks loeng? Jah. Mitte psets, kuigi. Viimane lugu C ja seejärel saame väga seksikas värk kaasates HTML ja veebi ja woo-hoo. Hea küll. Läheb lahti. See on motivatsiooni. Tuleb välja, kõik see aeg, kui meil on kirjalikult programmid võtame rõkkama. Ja rõkkama, oleme öelnud, sest esimesel nädalal päris palju, võtab lähtekoodi ja teisendada selle objekti kood. See võtab C ja teisendada selle 0. ja 1s. Olen selline valetanud teile paar nädalat, sest see ei ole päris nii lihtne. Seal on palju enamat, all kapuuts kui te käivitate programmi nagu rõkkama. Tegelikult koostamise protsess programm võib tõesti kokku, kui võite mäletate Rob video koostajad, neisse 4 sammu: eeltöötlust, koostamiseks ise, kokkupanek, ja siduda. Aga meil klassis ning enamik inimesi maailmas tavaliselt kokku kõik need sammud kui lihtsalt "koostamisel." Aga kui hakkame koos lähtekoodi niimoodi, meenutavad seda on ilmselt kõige lihtsam C programmi oleme kirjutanud seni, meenutan, et kui koostatakse see jõuab otsin nagu see. Aga seal on tegelikult vaheetapp, ja need sammud on järgmised. Esiteks seal on see asi tipus seda ja enamik meie programmide, # Include Mis # include teha meie jaoks? Ta päris palju koopiaid ja pastad sisu stdio.h minu faili nii, et miks? Miks ma hoolin sisu stdio.h? Mis seal huvitavat? Printf deklaratsioon, selle prototüübi et kompilaator siis teab mida ma mõtlen kui ma mainin seda funktsiooni printf. Nii samm 1 koostamisel on eeltöötlust, mille programmi nagu rõkkama või mõni abiprogramm et rõkkama kaasas loeb koodi ülevalt alla, vasakult paremale ja igal ajal oma äranägemise # sümbol järgneb võtmesõna nagu sisaldavad ta teostab kõnealust operatsiooni, kopeerides ja kleepides antud juhul stdio.h oma faili. See on 1. etapis. Siis on palju suurem C fail sest suur koopia, kleebi töö, mis just juhtus. Samm 2 nüüd valmimas. Aga selgub koostamisel võtab lähtekoodi mis näeb välja selline ja muudab see midagi, mis näeb välja selline, mis neile tuttav nimi on? >> [Üliõpilane] assamblee. >> Assembly. See on tegelikult midagi, kui te võtate CS61 sa sukelduda üksikasjalikumalt. See on lihtsalt nii lähedal kui saad kirjalikult 0. ja 1s ise kuid kirjalikult asjad nii, et ikka teeb vähemalt natuke mõistust. Need on masin juhiseid, ja kui me kerige põhiülesanne siin, märgata, et seal on see push juhendamise, liikuda juhendamine, lahutada juhendamise, helistada juhendamise, ja nii edasi. Kui kuulete, et teie arvutis on Intel inside, teil on Intel CPU Mac või PC, mida see tähendab? CPU kuulub ehitatud ettevõtted nagu Intel mõista teatud juhiseid. Nad ei tea, mida funktsioone nagu swap on või peamine on iseenesest kuid nad ei tea, mida väga madala juhiseid nagu liita, lahutada, lükkama, liikuda, helistage jne on. Nii et kui sa kompileerida C kood kokkupanek keeles oma väga kasutajasõbralik ilmega kood on ümber midagi, mis näeb välja selline, mis sõna otseses mõttes liigub baiti või 4 baiti ringi nagu väikesed üksused ja sealt protsessorit. Aga lõpuks, kui rõkkama on valmis võtma selle esindamine oma programmi 0. ja 1s, siis samm kutsus kokkupanek juhtub, ja see jälle kõik juhtub silmapilgu sõites rõkkama. Alustame siin, see väljundid faili meeldib see, ja siis see muudab ta nende 0. ja 1s. Ja kui sa tahad minna tagasi mingil hetkel ja tegelikult näeme seda tegevust, kui ma minema hello1.c--see on üks esimesi programme me vaatasime - tavaliselt me ​​koguda seda rõkkama hello1.c ja see annaks meile a.out. Kui aga teie asemel anda see-S lipu, mis sa saad, on hello1.s ja saate tegelikult vt kokkupanek keeles. Ma teen seda väga lühikese programmi, kuid kui te lähete tagasi rüselus või taastamine või programmi olete kirjutanud ja lihtsalt uudishimust tahate näha, mida see tegelikult välja näeb, mis tegelikult söödetaks CPU, mida saab kasutada, et-S lipu koos rõkkama. Aga siis lõpuks, seal on veel üks gotcha. Siin on 0. ja 1s, mis esindavad mu rakendamise hello, world. Aga ma kasutasin kellegi teise funktsiooni mu programmi. Nii et kuigi protsess on olnud võtan hello.c, ta saab kompileeritud koost koodi, ja siis saab kokku 0. ja 1s, ainult 0. ja 1s, mis on väljastada siinkohal aeg on need, mis tulenevad minu koodi. Aga inimene, kes kirjutas printf, nad koostanud oma koodi 20 aastat tagasi ja see on nüüd paigaldatud kusagil aparaat, nii me kuidagi on ühendada tema 0. ja 1s mu 0. ja 1s, ja mis toob meid 4. ja viimane samm koostamise, tuntud siduda. Nii vasakul servas on meil täpselt sama pilt enne: hello.c muutub montaaž kood muutub 0. ja 1s. Aga mäletate, et kasutada standard I / O teek minu kood, ja see tähendab kusagil arvuti seal on fail nimega stdio.c või vähemalt koostatud versioon sellest, sest keegi mõned aastad tagasi koostatud stdio.c arvesse koost koodi ja siis terve hunnik 0. ja 1s. See on see, mida on tuntud kui staatiline või dünaamiline raamatukogu. See on mingi fail istub kusagil aparaat. Aga lõpuks, ma pean võtma minu 0. ja 1s ja selle isiku 0. ja 1s ja kuidagi siduda need kokku, sõna otseses mõttes kombineerida 0. ja 1s ühte faili nimega a.out või hello1 või mis iganes ma helistasin oma programmi nii et lõpptulemus on kõik 1s ja 0. et tuleks koostada oma tööprogrammi. Nii et kõik see aeg sel semestril kui olete kasutanud rõkkama ja veelgi hiljuti töötab teha, et käivitada rõkkama, Kõik need sammud on toimumas omamoodi silmapilkselt kuid väga teadlikult. Ja kui sa jätkata infotehnoloogia, nimelt CS61, See on kiht, et sa jätkuvalt koor tagasi maha seal räägime tõhususe, mõju julgeolekule, ning nagu need väiksemad detailid. Kuid seda, et me oleme umbes lahkuda C taga. Lähme edasi ja võtame 5-minutilise pausi nüüd, ja kui me tagasi tuleme: Internet. Hea küll. Me oleme tagasi. Nüüd hakkame meie pilk mitte ainult HTML, sest nagu sa näed, HTML ise on tegelikult päris lihtne kuid tegelikult on veebi programmeerimine üldisemalt võrgustiku üldisemalt ja kuidas kõik need tehnoloogiad tulevad kokku mis võimaldab meil luua palju keerukamaid programme atop Internet kui siiani oleme suutnud nendes must ja valge aknad. Tõepoolest, selles punktis semestri kuigi me kulutame suhteliselt vähem aega PHP, HTML, CSS, JavaScript, SQL ja palju muud, enamik õpilasi tegema lõpuks teeme lõpliku projekte, mis on veebipõhine sest nagu näete, tausta nüüd on teil C on väga palju, mida nende kõrgema taseme keeled. Ja kui hakkate mõtlema oma lõpliku projekti, mis meelega Ülesanded 0, kus sa olid julgustas teha kõige midagi teile huvi pakkuda Scratch, Lõplik projekt on teie võimalus võtta oma taasleitud teadmisi ja Savvy C või PHP või JavaScripti vms läbi spin ja luua oma enda tükk tarkvara maailma näha. Ja seemne teile ideid, tean, et saate pea siin projects.cs50.net. Igal aastal me küsida ideid teaduskondadele ja personalile ja üliõpilastele ülikoolilinnakus lihtsalt esitada oma ideid huvitavaid asju, mida saaks lahendada arvuteid kasutada kasutades selleks veebisaite, kasutades tarkvara. Nii et kui sa oled hädas tulla idee oma, kõigi vahenditega kerida ideid seal sel aastal ja viimane. See on täiesti okei lahendada projektiga, mis on põhjalikult käsitletud enne. Me oleme näinud palju apps näha staatuse pesu loengusse, palju apps navigeerimiseks söögisaal menüü palju apps navigeerimiseks muidugi kataloogi jms. Ja tõepoolest, tulevikus loeng ja tulevikus seminarid, tutvustame teile mõningaid üldkasutatavaid API, nii müügil samuti siin saadaval CS50 ülikoolilinnakus nii et teil on juurdepääs andmetele ja saab siis teha huvitavaid asju koos sellega. Nii et rohkem lõplik projektide paar päeva, kui me spetsifikatsioon, kuid nüüd teame, et saate töötada üksi või koos ühe või kahe sõbraga aasta kõige tahes projekt teile huvi pakkuda. Interneti. Sa minna ja tõmmake oma sülearvuti, siis minge facebook.com esimest korda, ei sisselogimist hiljuti, ja vajuta Enter. Mis täpselt juhtub? Kui te Enter arvutis, terve hunnik samme alustada omamoodi võluväel juhtub. Nii et sa siin vasakul, veebiserver nagu Facebook on siin paremal, ja millegipärast te kasutate seda keelt nimetatakse HTTP Hypertext Transfer Protocol. HTTP ei ole programmeerimiskeelt. See on rohkem protokoll. On rida konventsioone, mis brausereid ja veebiserverite kasutada, kui ühendussektsioonist. Ja mida see tähendab, on järgmine. Sarnaselt reaalses maailmas, meil on need konventsioonid kus, kui te vastama teatud inimlik esimest korda, kui sa ei pahanda humoring mind siin, Ma võin tulla teile öelda: "Tere, minu nimi on David." >> Tere, David. Minu nimi on Sammy. "Tere, David. Mu nimi on Sammy." Nüüd oleme lihtsalt tegelenud selline rumal inimene protokoll kus ma olen algatatud protokoll, Sammy on vastanud, oleme raputanud käed, ja tehing on lõpetatud. HTTP on väga sarnase sisuga. Kui teie veebibrauser nõuab www.facebook.com, mida teie brauser on tõesti teeme laiendab oma käsi, nii et rääkida, server ja see on saatmist sõnumi. Ja see sõnum on tavaliselt midagi saada - mida sa tahad? - mind kodulehekülg, mis on tavaliselt tähistatakse kaldjoon lõpus link. Ja lihtsalt, et sa tead, mida keel Ma räägin, ma brauser ütlen teile et ma räägin HTTP versioon 1.1, Ja ka hea meede, ma ütlen teile, et vastuvõttev et ma tahan koduleheküljel on facebook.com. Tavaliselt veebibrauser, unbeknownst teile, inimeste, saadab selle teate üle Interneti kui sa lihtsalt kirjuta www.facebook.com, Sisesta, oma brauserisse. Ja mida see Facebook reageerida? See vastab mõne sarnase välimusega segasena andmed, vaid ka palju muud. Lubage mul minna Facebook kodulehekülg siin. See on ekraani, et enamik meist ilmselt ei näe, kui sa alati sisse logitud olla kogu aeg, kuid see on tõepoolest oma kodulehekülg. Kui me seda Chrome, märkate, et saate tõmba neid vähe kontekstimenüüst. Kasutades Chrome, kas Mac OS, Windows, Linux vms, kui teil kontrollida kliki või vasakule nuppu, saate tavaliselt tõmba menüü mis näeb välja selline, kus mõned võimalused ootavad, millest üks on View Page Source. Võite ka tavaliselt saada neid asju, minnes menüü Vaade ja poking ümber. Näiteks siin all Vaata, arendaja on sama asi. Ma lähen edasi minna ja vaadata View Page Source. Mida te näete on HTML et Mark on kirjutanud esindama facebook.com. See on täielik jama siin, aga me näeme, et see muudab veidi rohkem mõistust enne pikk. Kuid on ka mõned mustrid siin. Lubage mul kerige selliseid asju. See on raske inimõiguste lugeda, kuid märkad, et seal on see muster nurga sulgudes märksõnadega nagu võimalus märksõnad nagu väärtus, mõned jutumärke. See on koht, kus, millal olete loonud väga esmakordselt, täpsustatud, milline on sinu sünniaasta on. See rippmenüüst sünni aasta on kuidagi kodeeritud siin selles keeles nimetatakse HTML, HyperText Markup Language. Teisisõnu, kui teie brauser palub veebilehe, see räägib selle konventsiooni nn HTTP. Aga mida see facebook.com sellele soovile koos? See reageerib kusjuures mõned neist salasõnumeid, nagu me näeme praegu. Aga kõige selle vastus on kujul HTML, HyperText Markup Language. See on tegelik keel, milles veebileht on kirjutatud. Ja mida veebibrauser tõesti on siis, olles saanud midagi, mis näeb välja selline, loeb see ülevalt alla, vasakult paremale ja igal ajal oma äranägemise ühte neist nurga sulgudes järgneb võtmesõna nagu variant, see näitab, et märgistuskeel sobival viisil. Sel juhul oleks näidata rippmenüüst aastaid. Aga jälle, see on täielik jama vaadata. Seda mitte sellepärast, Facebook arendajad avalduvad 0 5 stiili, näiteks. Seda seetõttu, et enamik koodi, et nad kirjutavad on tegelikult kirjutatud ilusti, hästi kommenteeris, kenasti liigestatud, jms, kuid loomulikult masinad, arvutid, brauserid tõesti ei huvita kas teie kood on hästi sisustatud. Ja tegelikult, see on täiesti raiskav lüüa TAB klahvi kõik need ajad ja panna märkusi kõik kogu oma koodi ja valida tõesti kirjeldav muutuja nimed sest kui brauser ei huvita, kõik teed lõpus päeval raiskab baiti. Nii selgub, mida enamik veebilehed ei ole kuigi lähtekoodi facebook.com, jaoks cs50.net ja kõik need teised veebisaite Internetis tavaliselt hästi kirjutatud ja hästi kommenteeritud ja kenasti liigestatud jms, tavaliselt enne veebilehe pannakse peale Internet, kood minified, kusjuures HTML ja CSS - midagi me varsti näeme - JavaScripti koodi me varsti näha, surutakse, kusjuures pikk muutujate nimed muutuvad X ja Y ja Z, ja kõik see tühik, mis teeb kõike vaadata nii loetav on kõik ära visata, sest kui sa mõtle selle peale niimoodi, Facebook saab miljardit lehe tabamust päev - midagi hullu niimoodi - mis siis, kui programmeerija lihtsalt olla anal vajuta tühikut üks ekstra aega lihtsalt taane mõned koodirida kunagi nii palju? Mis tähendas, kui Facebook säilitab et tühik kõigis baiti nad tagasi saatma inimesi internetis? Lööb tühikut kord annab sulle ekstra bait oma faili. Ja kui miljardit inimest siis minna alla kodulehekülg sel päeval, kui palju andmeid on teil edastada üle interneti? Gigabyte mingit põhjust. Ja antud, palju veebisaite see ei ole selline skaalautuvia küsimus, kuid Facebook, Google, mõned kõige populaarsem veebilehed seal on suur stiimul rahaliselt teha oma koodi välimus jama nii et sa kasutad nagu mõned baidid võimalikult lisaks siis pakkimata kasutades midagi zip, algoritm nimega gzip, et brauser ei automaatselt. Aga see on kohutav. Me ei saa iial teada midagi teiste inimeste veebilehtedel ja kuidas kujundada veebilehti kui me peame vaatama seda niimoodi. Nii et õnneks brauserid nagu Chrome ja IE ja Firefox nendel päevadel tavaliselt tulevad koos sisseehitatud arendaja tööriistu. Tegelikult, kui ma lähen siia alla kontrollima Element või kui ma lähen Vaata, arendaja, ja minna Developer Tools selgesõnaliselt, Selle akna allosas minu ekraanil nüüd hüppab. See on veidi hirmutavalt esimesel, sest seal on palju tundmatuid kaarte siin, aga kui ma vajutan Elements kõik viis allosas vasakul, Chrome on ilmselt üsna tark. Ta teab, kuidas tõlgendada kõiki selle koodi. Ja mis siis Chrome ei ole see puhastab kõik Facebooki HTML. Kuigi seal ei ole tühik seal, seal ei ole taandus seal, nüüd teade, et võin hakata navigate käesoleva veebilehe enam hierarhiliselt. Selgub, et igal veebilehel kirjutatud keeles nimetatakse HTML5 peaks algama selle, Selle DOCTYPE deklaratsiooni, kui nii võib öelda: See on selline kerge ja hall seal, kuid see on kõige esimene rida koodi selle faili, ja et lihtsalt ütleb brauser, "Hei, siin on mõned HTML5. Siit tuleb veebilehele." Esimene vasak sulg kaugemale juhtub olema see asi, sulg HTML teegid, ja siis kui ma sukelduda sügavamale - need nooled on täiesti mõttetu; nad on lihtsalt esitamiseks pärast, nad ei ole tegelikult toimikusse - märgata, et sees Facebook HTML teegid, midagi, mis algab sulg ja siis on sõna nimetatakse tag. Nii sees HTML teegid on ilmselt pea tag ja body. Toas juhi tag nüüd on kogu selle jama jaoks Facebook sest neil on palju metaandmed ja muid asju turunduse ja reklaami. Aga kui me liikuge alla, alla, alla, alla, vaatame, kus see on. Siin see on. See üks on vähemalt mõnevõrra tuttav. Pealkiri Facebook kodulehekülg, kui sa kunagi vaadata vahekaardil oma tiitliribal on oodatud Facebook - logi sisse, Registreeru või Lähemalt. Seda sa näeksid Chrome'i tiitliribal ja see on, kuidas see on esindatud kood. Kui me ignoreerida kõike muud head, enamik julgust veebileht on keha, ja tuleb välja, et Facebook kood läheb otsima keerukamaid kui enamik asju me kirjutame esialgu lihtsalt, sest see on üles ehitatud aastate jooksul, kuid seal on terve hulk script sildid, JavaScripti koodi, mis muudab veebilehel väga interaktiivne: nähes staatuse uuendusi silmapilkselt kasutades keeltes nagu JavaScript. On midagi, mida nimetatakse div, mis on jaotus lehel. Aga enne kui me selle detail, proovime välja suumimiseks ja vaata lihtsama versiooni Facebook 1.0, nii rääkida. Siin on hello, world veebilehti. See on, et DOCTYPE deklaratsiooni tipus mis on veidi erinev ülejäänust. Midagi muud me kirjutada veebilehe kavatseb alustada koos julge. Jällegi, lugu on sama: tere, koma hakata selle julge, siis maailm muutub rasvaselt trükitud, ja see tähendab Peatage printimine see paksus kirjas. Lubage mul minna ja päästa oma fail, mine tagasi Chrome, ma suumida just nii me näeme seda parem, ja reload, ja sa näed, et maailm on nüüd paksus kirjas. Web on kõik umbes hüperlinke, nii lähme edasi ja teha seda: minu lemmik veebileht on, oletame, youtube.com. Salvesta laadida. Okei. On paar probleeme nüüd peale võikus kodulehel. 1, Ma olen päris kindel, et ma Enter siin. Ja ma tegin. Ma mitte ainult Enter ma ka liigestatud, harjutamise mida me oleme jutlustab umbes stiilis, kuid minu on õige kõrval maailma. Miks see nii on? Brauserid ainult seda, mida sa ütled neile, mida teha. Ma ei öelnud brauser, "Break read siin. Sisesta lõikes murda siin." Nii brauser, see ei ole oluline, kui ma tabanud Tagasi 30 korda, see on ikka panevad mu kõrval maailma. Mida ma tõesti pead tegema siin on öelda midagi
, Reavahe sisestamiseks. Ja tegelikult, reavahe on selline imelik asi sest te ei saa tõesti hakkama liikuma teise rea, siis midagi teha, ja siis peatub uuele reale. See on selline aatomi operatsiooni. Sa kas teha seda või sa ei tee. Sa Enter või te seda ei tee. Nii BR on natuke erinev silt, ja nii mul on vaja sortida nii avatud ja sulgege see kõik korraga. Süntaks, mis on see. Tehniliselt võid teha midagi sellist mõned versioonid HTML, aga see on lihtsalt rumal, sest pole mingit põhjust käivitada ja seisata midagi kui saate asemel seda kõike korraga. Aru, et HTML5 ei ole rangelt nõuda, et selle kaldkriips, nii näed õpikute ja online-vahendeid, et seda ei ole, kuid hea meede olgem harjutada sümmeetria, et oleme näinud siiani. See tähendab, et silt on nii avada ja sulgeda. Nüüd lubage mul päästa oma fail, mine tagasi siia. Okei, nii et see on hakanud otsima parem, välja arvatud Web ma tean, on selline klikitav, ja veel youtube siin ei tundu põhjustada midagi. Ongi, sest kuigi see näeb välja nagu link, et brauser ei tea mis iseenesest nii et ma pean sirvija, et see on link. Viis seda teha on kasutada ankrusildi: ja lase mul seda liigutada, et uus liin just nii see on natuke paremini arusaadavaks, ja ma kahaneb fondi suurust. Kas ma veel teinud? No Seal saab olema see kahestumine. See silt, ankrusildi, tõepoolest võtta atribuut, mis muudab oma käitumist, ja väärtus, mis atribuut on ilmselt YouTube'i link. Aga märkate dihhotoomia on, et lihtsalt sellepärast, et see URL sa lähed, see ei tähenda, et peab olema sõna, mis sa rõhutades ja teha link. Pigem, et võib olla midagi sellist. Nii et ma pean ütlema, lõpetavad selle sõna hüperlink abil lähedale ankrusildi. Teade Ma ei tee seda. 1, see oleks lihtsalt raiskamine igaühe aeg ja see ei ole vajalik. Sulgemiseks sildi, sa ainult mainida nime silt uuesti. Sa ei maininud mõnda atribuuti. Nii et olgem salvestada, et tagasi minna. Okei, voila, nüüd on sinine ja lingitud. Kui ma vajutan seda, ma tõesti minna YouTube'i. Nii et kuigi minu veebileht pole Internetis, on vähemalt HTML, ja kui me laseme Internet järele jõuda, me tegelikult lõpuks siin youtube.com. Ja ma ei saa minna tagasi ja siin on minu veebilehele. Aga märka seda. Kui olete kunagi saanud rämpsposti või andmepüügirünnak, nüüd on teil võimalus pärast vaid viis minutit sama tegema. Me võime minna siin ja ei tee midagi www.badguy.com või mis iganes pealiskaudsed veebileht on, ja siis saate öelda kontrollida oma PayPal kontole. [Naer] Ja nüüd see saab minna badguy.com, mis ma ei hakka klikkima sest ma ei tea kus, mis viib. [Naer] Aga nüüd on meil võime tegelikult lõpuks sinna. Nii et me tõesti hakanud just pinnapealselt. Me ei programmeerimise iseenesest; me kirjalikult märgistuskeel. Aga niipea, kui me ringi läbi meie sõnavara HTML, me tutvustada PHP, tegelik programmeerimiskeelt mis võimaldab meil luua HTML automaatselt genereerida CSS automaatselt, nii et saame alustada kolmapäeval rakendada, ütleme, oma otsingumootori ja rohkem. Aga rohkem, et paar päeva. Näeme siis. [CS50.TV]