1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Savaitę 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvardo universiteto] 3 00:00:04,730 --> 00:00:07,490 [Tai CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Gerai. Sveiki sugrįžę. Tai CS50, o tai yra 7 savaitės pradžios. 5 00:00:12,280 --> 00:00:14,690 Pora mažai pranešimų: 6 00:00:14,690 --> 00:00:18,150 Pset5 dabar vyksta arba netrukus turi būti, 7 00:00:18,150 --> 00:00:21,590 ir leiskite man pasakyti, gana garbingai, tai yra linkę būti tarp sunkiau 8 00:00:21,590 --> 00:00:24,460 Žinoma, problema rinkinių, todėl leiskite man paminėti dabar 9 00:00:24,460 --> 00:00:28,190 kad šią savaitę daugiau nei kada nors jums nereikia laukti, kol, tarkim, trečiadienio naktį 10 00:00:28,190 --> 00:00:29,920 arba ketvirtadienis naktį pasinerti. 11 00:00:29,920 --> 00:00:32,369 Tai tikrai įdomi pset. Mes manome, kad tai smagu. 12 00:00:32,369 --> 00:00:36,110 Jei jūs iš tikrųjų gauti jį visiškai teisingas, ir ji tada iššūkis vadinamąją Big valdybą, 13 00:00:36,110 --> 00:00:39,830 jūs turite galimybę, kad atitiktų Ratio kai aikštyno darbuotojų 14 00:00:39,830 --> 00:00:41,620 ir kai kurie iš jūsų klasiokų. 15 00:00:41,620 --> 00:00:44,670 Kas Big valdyba yra, kai jūs turite savo rašybos tikrintuvo veikimą, 16 00:00:44,670 --> 00:00:48,860 galėsite eiti į cs50.net paleidus komandą, 17 00:00:48,860 --> 00:00:52,430 grynai pasirinkti, ir tada suma laiko ir RAM suma ir daugiau 18 00:00:52,430 --> 00:00:56,130 , kad jūs naudojate savo įgyvendinimo bus eksponuojami čia aikštyno puslapis. 19 00:00:56,130 --> 00:00:59,740 Jūs pastebėsite, kad šie žmonės čia visa krūva yra išvardytos, kaip darbuotojų 20 00:00:59,740 --> 00:01:04,220 nes per savaitgalį, darbuotojai maniau, kad būtų smagu pabandyti pranokti vienas kitą. 21 00:01:04,220 --> 00:01:07,390 Taigi suprasti, kad tikslas čia yra ne pralenkti darbuotojus. 22 00:01:07,390 --> 00:01:09,790 Net ir aš esu tik 13 numeriu. 23 00:01:09,790 --> 00:01:13,790 Vien tik pasirinkti, bet tai galimybė pamatyti, kaip mažai RAM 24 00:01:13,790 --> 00:01:16,790 ir kiek mažai CPU sekundes galite naudoti, vis-à-vis kai kurie iš jūsų klasiokų. 25 00:01:16,790 --> 00:01:20,540 >> Ir aš pripažinti, kad Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 Šiuo metu numeris 1 poziciją kaip viena iš TFS, 27 00:01:23,750 --> 00:01:28,120 tai įgyvendinti, kurį mes vadiname neįmanoma 28 00:01:28,120 --> 00:01:32,700 atsižvelgiant į tai, kad jis naudoja beveik 0 RAM ir beveik 0 sekundžių pakrovimo. 29 00:01:32,700 --> 00:01:35,670 Taigi, mes pasirūpinsime Kevin neprisijungę. [Juokas] 30 00:01:35,670 --> 00:01:40,950 Yra tam tikrų įgūdžių, kad Kevin narys Janezas Potočnikas bandymo čia. 31 00:01:40,950 --> 00:01:45,280 Vienas iš dalykų, mes manome, kad mes norime padaryti taip pat yra dabar CS50x savaitę vyksta, 32 00:01:45,280 --> 00:01:49,520 ir jūs, vaikinai, yra tiek, kiek šio eksperimento dalis, kaip šie studentai. 33 00:01:49,520 --> 00:01:53,720 Mes paprašėme juos kaip dalį savo pset0, kuris buvo taip pat pateikti Scratch projektą 34 00:01:53,720 --> 00:01:58,280 palūkanos jų - žaidimas, interaktyvi meno kūrinys, animacija, ar kaip 35 00:01:58,280 --> 00:02:03,700 1 - 2-minučių vaizdo, ar jie norėtų, sakydamas hello pasaulyje ir jie iš tikrųjų yra. 36 00:02:03,700 --> 00:02:06,780 Aš maniau aš norėčiau pasidalinti su jumis, tik vaizdo įrašus, pora, kad iki šiol nebuvo pateiktos 37 00:02:06,780 --> 00:02:10,759 nes mums, darbuotojų bent tai tikrai buvo įdomi 38 00:02:10,759 --> 00:02:14,220 ir įkvepiantis žiūrėti šiuos žmonės iš viso pasaulio - šalys visame pasaulyje - 39 00:02:14,220 --> 00:02:18,160 pritaikymas, visų dalykų, informatikos kursus internetu, 40 00:02:18,160 --> 00:02:20,410 ar tai reiškia, kad jie nori tęsti savo studijas, 41 00:02:20,410 --> 00:02:22,300 jie nori imtis savo karjerą į naują kryptį, 42 00:02:22,300 --> 00:02:24,390 jie nori užpildyti spragas savo žiniomis, 43 00:02:24,390 --> 00:02:27,190 todėl kai kurie iš tų pačių priežasčių, kad jus vaikinai galbūt čia buvo. 44 00:02:27,190 --> 00:02:31,090 >> Taigi aš jums vieną tokį studentą čia. Jūs galite padidinti Volume tik šiek tiek. 45 00:02:31,090 --> 00:02:35,520 Čia yra vienas iš mūsų studentų 1-minutės pateikimo. 46 00:02:35,520 --> 00:02:40,380 Sveikas, pasauli. Esu pramonės inžinerijos čia, Malaga, Ispanija studentas. 47 00:02:40,380 --> 00:02:45,840 Aš džiaugiamės apie šį internetinį kursą, nes aš myliu kompiuterių mokslo, aš tikrai, 48 00:02:45,840 --> 00:02:48,880 ir aš tikrai vertiname, kad man ją tyrinėti. 49 00:02:48,880 --> 00:02:51,940 Ir tai, kad galiu mokytis pats, visi jus vaikinai padaryti 50 00:02:51,940 --> 00:02:57,040 bet vietoj to, kad Harvardo Esu Malagoje, kaip nuostabus tai? 51 00:02:57,040 --> 00:03:02,040 Na, aš Fernando ir tai yra CS50. Žiūrėti jus vaikinai. 52 00:03:02,040 --> 00:03:07,100 [Juokas] Kitas klipas, mes ypač patinka, jūs pamatysite, kad šis ponas anglų kalba yra ne toks stiprus. 53 00:03:07,100 --> 00:03:11,520 Atrodo, kad jis turėjo tai mašina išvertė, todėl patys vertimai yra šiek tiek netobula, 54 00:03:11,520 --> 00:03:15,790 bet tai buvo vienas iš mūsų pasirinkimą iki šiol, taip pat. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Sveikas, pasauli. [Kalbėti japonų] 57 00:03:32,370 --> 00:03:39,830 [Turiu pasveikinti japonų, nes mano anglų kalbos yra labai nepatikimas.] 58 00:03:39,830 --> 00:03:45,380 [Aš atidaviau jums laišką iš Gifu mieste, Japonijoje.] 59 00:03:45,380 --> 00:03:49,820 [Galiu būti studentas pirmą kartą per 20 metų, kaip galima matyti.] 60 00:03:49,820 --> 00:03:54,640 [Aš esu labai dėkingas Harvardo universiteto, kurie suteikė man šią galimybę ir EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golfas yra gitara ir mano mėgstamiausias dalykas veikia.] [Juokas] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 Kodėl jūs manote, aš bandžiau dalyvauti cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Harvardo universiteto, tai mano ilgesys.] 65 00:04:14,990 --> 00:04:19,740 , Ypač, jei aš esu toli gyveno Japonijoje.] 66 00:04:19,740 --> 00:04:26,680 [Aš norėjau pabandyti iš karto žino, kad egzistuoja tokios EDX kada.] 67 00:04:26,680 --> 00:04:32,500 [Ar ne manote, taigi jums nereikės susiję su mokymosi I amžiaus] 68 00:04:32,500 --> 00:04:38,350 [CS50 yra mano ilgesys. Mano vardas yra Kazu, ir tai yra CS50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [plojimai ir visaip kitaip] 70 00:04:43,090 --> 00:04:49,220 Kitas mūsų mėgstamiausia buvo šis argumentas čia nuo ko nors. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] "Google", kad, jei esate susipažinę su šiuo meme. 72 00:04:55,380 --> 00:05:01,480 >> Ir tada galiausiai, pora kitų, kad gavo komandiruotų, kad galbūt laimėti žavinga apdovanojimą. 73 00:05:01,480 --> 00:05:06,820 [Mokiniai] Aww! >> [Malan] Mes turime klausytis. Tai yra trumpas, todėl klausytis atidžiai. 74 00:05:08,580 --> 00:05:11,150 [Moteriška garsiakalbis] Koks tavo vardas? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Moteriška garsiakalbis] Kas tai? >> [Giggles] CS50. [Juokas] 76 00:05:16,120 --> 00:05:19,510 [Malan] Jis padarė du užtrunka, nors. 77 00:05:19,510 --> 00:05:22,240 Čia mes einame, paskutinis. 78 00:05:23,030 --> 00:05:26,980 Mano vardas yra Louie, ir tai yra CS50. 79 00:05:26,980 --> 00:05:30,250 [Juokiasi] Tai tada yra CS50x. 80 00:05:30,250 --> 00:05:33,230 Ačiū visiems tiems iš jūsų, o kartu namuose 81 00:05:33,230 --> 00:05:35,620 , kurie buvo patekę iki šiol. 82 00:05:35,620 --> 00:05:39,510 Šiandien, galime daryti išvadą, kad mūsų diskusiją duomenų struktūras, 83 00:05:39,510 --> 00:05:41,160 bent kai svarbiausias, 84 00:05:41,160 --> 00:05:44,760 ir tada mes ir toliau mūsų pokalbį apie HTML ir web programavimas. 85 00:05:44,760 --> 00:05:48,520 Iš tiesų, mes praleido pastaruosius maždaug septynias savaites, žiūri programavimo pagrindai - 86 00:05:48,520 --> 00:05:50,450 algoritmai, duomenų struktūros, ir panašūs - 87 00:05:50,450 --> 00:05:53,050 ir C, kaip jums gali tekti susidurti iki šiol, 88 00:05:53,050 --> 00:05:57,060 nebūtinai yra labiausiai prieinama kalbų 89 00:05:57,060 --> 00:05:59,090 su kuriuo būtų galima įgyvendinti kai kuriuos iš šių idėjų. 90 00:05:59,090 --> 00:06:01,880 Ir taip pradėti šią savaitę, kitą savaitę ir tada, 91 00:06:01,880 --> 00:06:07,110 mes pagaliau galės pereiti nuo C, kuris paprastai žinomas kaip gana žemo lygio kalba, 92 00:06:07,110 --> 00:06:11,190 dalykų aukštesnio lygio, tarp jų PHP, JavaScript, ir kaip, 93 00:06:11,190 --> 00:06:14,850 mes pamatysime remtis tų pačių pamokų, kad mes išmoko per pastaruosius keletą savaičių, 94 00:06:14,850 --> 00:06:19,430 , bet jūs pamatysite, kad skelbiantis matricas ir maišos lenteles ir dalykų, pavyzdžiui, paieškos ir rūšiavimo 95 00:06:19,430 --> 00:06:23,370 taip daug lengviau, nes kalbos patys pradėsite naudoti 96 00:06:23,370 --> 00:06:25,290 taps galingas. 97 00:06:25,290 --> 00:06:27,410 Bet pirmiausia, medžių taikymas. 98 00:06:27,410 --> 00:06:30,240 Tai labai dažnas šių dienų, reikia suspausti informaciją. 99 00:06:30,240 --> 00:06:34,770 Kokiame kontekste norite glaudinti kažkokį skaitmeninės informacijos? 100 00:06:37,190 --> 00:06:39,670 >> Taip. >> [Studentas] Kai jums reikia siųsti jį per tinklą. 101 00:06:39,670 --> 00:06:41,450 Taip, kai norite atsiųsti ką nors iš interneto. 102 00:06:41,450 --> 00:06:44,950 Jei norite atsisiųsti didelį failą, jis puikiai tinka, jei kas nors iš kitos pusės 103 00:06:44,950 --> 00:06:48,760 suspaustas šį failą, naudojant zip formatu arba kažką panašaus, kad 104 00:06:48,760 --> 00:06:53,760 taip, kad jūs siunčiate mažiau, nei kitu atveju galėtų būti perduodami bitai. 105 00:06:53,760 --> 00:06:55,500 Taigi, kaip jūs suspausti informaciją? 106 00:06:55,500 --> 00:07:00,540 Viskas suvesta naudojant mažiau bitų nei reikalaujama pagal nutylėjimą. 107 00:07:00,540 --> 00:07:03,220 Bet tai yra rūšies keistas dalykas, nes manau atgal į 0 ir 1 savaites 108 00:07:03,220 --> 00:07:07,370 kai mes kalbėjome apie ASCII ir dvejetainius ir mes kalbėjome apie ASCII ypač 109 00:07:07,370 --> 00:07:10,690 kaip naudojant 8 bitų atstovauti abėcėlės raidėmis 110 00:07:10,690 --> 00:07:16,120 kad laiškas yra atstovaujama 65, mažosiomis yra numeris 97, 111 00:07:16,120 --> 00:07:21,210 ir vis dėlto jūs atstovaujate 65 arba 97, jūs naudojate 7 ar 8 bitus. 112 00:07:21,210 --> 00:07:24,120 Bet laimikis, kad yra keletas anglų abėcėlės raidės 113 00:07:24,120 --> 00:07:26,230 kad yra ne toks populiarus kaip kiti. 114 00:07:26,230 --> 00:07:31,600 Z yra ne visi, kad populiarus, Q yra ne visi, kad populiarus, bet ir E yra super populiarus. 115 00:07:31,600 --> 00:07:37,280 Ir dar visus šiuos laiškus, pagal nutylėjimą pasaulis naudoja tą patį skaičių bitais, tik 8. 116 00:07:37,280 --> 00:07:42,690 Taigi ar nebūtų buvę protingiau jei vietoj naudojant 8 bitų kiekvienos raidės, 117 00:07:42,690 --> 00:07:47,440 net retai naudojama kaip Q ir Z, 118 00:07:47,440 --> 00:07:51,910 ką daryti, jei mes mažiau bitų A ir E ir S ir populiariausių raidės 119 00:07:51,910 --> 00:07:55,000 ir daugiau bitų mažiau populiarių messages, 120 00:07:55,000 --> 00:07:57,770 idėja, tegul optimizuoti bendrai atveju, 121 00:07:57,770 --> 00:08:01,160 kuris yra kompiuterių mokslo tema bando optimizuoti, kas nutiks, labiausiai 122 00:08:01,160 --> 00:08:05,310 dalykų, kad, taip, gali atsitikti ir praleisti šiek tiek daugiau laiko, šiek tiek daugiau vietos 123 00:08:05,310 --> 00:08:07,680 tačiau nebūtinai taip dažnai. 124 00:08:07,680 --> 00:08:09,330 Taigi paimkime pavyzdį. 125 00:08:09,330 --> 00:08:12,610 >> Tarkime, kad mes norime užkoduoti informaciją gana efektyviai. 126 00:08:12,610 --> 00:08:15,090 Jums gali tekti užaugo žinant šiek tiek kažką apie Morzės abėcėle, 127 00:08:15,090 --> 00:08:17,450 ir šansai yra, jūs nežinote, faktinis kodas, 128 00:08:17,450 --> 00:08:21,750 bet jūs galite priminti, kad ji bent jau ši serija taškų ir brūkšnelių. 129 00:08:21,750 --> 00:08:26,640 Tai yra gana efektyvūs kodavimas, ir pranešimas, kad populiariausia raidė - pavyzdžiui, E - 130 00:08:26,640 --> 00:08:28,980 naudoja pypsi trumpiausias. 131 00:08:28,980 --> 00:08:31,740 Morzės kodas yra visa informacija apie PYP-PYP-PYP-PYP-PYP-PYP ir turintis tonus 132 00:08:31,740 --> 00:08:34,799 arba trumpiems laikotarpiams laiką arba ilgą laiką. 133 00:08:34,799 --> 00:08:40,330 E, kaip žymimas taškas, yra super trumpas pyptelėjimas, tik pypsėjimas, ir kad sudarytų E. 134 00:08:40,330 --> 00:08:43,960 Priešingai, T būtų ilgesnis pyptelėjimas, pavyzdžiui, pyptelėjimą [pailgina garso] 135 00:08:43,960 --> 00:08:45,710 ir kad sudarytų T. 136 00:08:45,710 --> 00:08:48,840 Bet tai dar gana trumpas, nes, priešingai, jei peržvelgsite Z, 137 00:08:48,840 --> 00:08:52,690 išreikšti Z jūs einate pyptelėjimas, pyptelėjimas [ilgesnį garsas], pyptelėjimas, pyptelėjimas [trumpesnis garsas]. 138 00:08:52,690 --> 00:08:55,360 Todėl ilgiau, nes ji yra mažiau paplitęs. 139 00:08:55,360 --> 00:08:58,150 Bet kabliuko, kad čia yra Morzės abėcėlė yra šiek tiek trūkumų 140 00:08:58,150 --> 00:09:00,610 tuo, kad tai nėra karto decodable. 141 00:09:00,610 --> 00:09:07,350 Pavyzdžiui, tarkime, kad jūs išgirsite kai vielos pyptelėjimą pabaigos [trumpas], pyptelėjimas [ilgai]. 142 00:09:07,350 --> 00:09:12,480 Kokią žinią aš tiesiog gauti? Taškas ir brūkšnys. Ką tai? 143 00:09:12,480 --> 00:09:15,330 [Studentas] A. >> [Malan] Gal. 144 00:09:15,330 --> 00:09:18,270 Taip pat gali būti E, T. 145 00:09:18,270 --> 00:09:23,390 Kitaip tariant, Morzės abėcėlė, nors ji naudoja šį principą optimizuoti kampe bylą, 146 00:09:23,390 --> 00:09:26,250 jis neturi būti ir tuoj pat Dekoduojamumas. 147 00:09:26,250 --> 00:09:29,850 Tai reiškia, kad žmogaus, kuris klausos ar gauti šiuos taškus ir brūkšnelius 148 00:09:29,850 --> 00:09:34,540 kažkaip išsiaiškinti, kur pertraukos tarp raidžių, 149 00:09:34,540 --> 00:09:39,660 , todėl, jei jūs neturite žinoti, kur tos pertraukos, jums gali supainioti ET arba atvirkščiai. 150 00:09:39,660 --> 00:09:43,880 >> Taigi, kas gali tai padaryti? Morzės abėcėle galima tiesiog pristabdyti tarp raidžių. 151 00:09:43,880 --> 00:09:47,660 Bet pristabdžius rūšies skaitiklis spartumo dalykų visumos požiūriu. 152 00:09:47,660 --> 00:09:52,880 Taigi, ką daryti, jei vietoj to, mes atėjo su kodu, ten, kur buvo ne tai bloga padėtis 153 00:09:52,880 --> 00:09:56,570 kur E yra priešdėlis, pavyzdžiui, 154 00:09:56,570 --> 00:10:00,020 Kitaip tariant, jei mes galime įsitikinti, kad modeliai yra dar trumpas populiariausių raidėmis 155 00:10:00,020 --> 00:10:04,850 mažiau populiarių messages, bet ten nebūtų įmanoma supainioti? 156 00:10:04,850 --> 00:10:08,930 Į Huffman vardu vyras prieš keletą metų išrado šią schemą, pavadintą Huffman kodavimas 157 00:10:08,930 --> 00:10:12,390 kad iš tikrųjų naudoja vieną duomenų struktūrų, mes praleido šiek tiek laiko, kalbėti apie 158 00:10:12,390 --> 00:10:16,560 praeitą savaitę, kad medžių, dvejetainiai medžių, konkrečiai - 159 00:10:16,560 --> 00:10:19,710 dvejetainis medis, reiškia, kad ji turi ne daugiau kaip 2 vaikus. 160 00:10:19,710 --> 00:10:22,720 Ji turi gal į kairę vaiką, gal teisę vaiką, ir viskas. 161 00:10:22,720 --> 00:10:26,510 Taigi, tarkime, tik diskusijos dėlei, kad kas nors nori siųsti žinutę 162 00:10:26,510 --> 00:10:31,270 kad atrodo taip. Tai visiška nesąmonė, bet tai sudaro Kaip, B, Cs, Ds ir Es. 163 00:10:31,270 --> 00:10:34,890 Ir jeigu jūs iš tikrųjų skaičiuoti iki Kaip, B, Cs, Ds ir Es 164 00:10:34,890 --> 00:10:36,870 ir tada padalinti iš visų raidžių, 165 00:10:36,870 --> 00:10:42,710 tai mažai diagrama čia sako, kad 45% iš raidžių Es, 20% Kadangi 166 00:10:42,710 --> 00:10:45,010 10% B, ir kt. 167 00:10:45,010 --> 00:10:47,330 Taigi, kitaip tariant, įsivaizduokite, kad kotiruojamos eilutė yra 168 00:10:47,330 --> 00:10:49,080 yra tik kai pranešimas, kad norite siųsti. 169 00:10:49,080 --> 00:10:52,180 Taip atsitinka, kad nesąmonė, tik taip mes galime naudoti kaip raides, kaip įmanoma, 170 00:10:52,180 --> 00:10:55,220 bet tai iš tiesų pasitvirtina, kad E išlieka populiariausia, 171 00:10:55,220 --> 00:11:01,450 , B ir C yra mažiausiai populiarus, bent jau iš šių 5 abėcėlės raidės. 172 00:11:01,450 --> 00:11:04,040 Taigi, kaip mes galime eiti apie tai ateina su koduotę, 173 00:11:04,040 --> 00:11:08,430 dvejetainis kodavimas, 0s ir 1s modelis kiekvienam iš šių laiškų 174 00:11:08,430 --> 00:11:14,820 tokiu būdu, kad E yra trumpas modelis, o gal B ir C yra šiek tiek ilgesnis modeliai, 175 00:11:14,820 --> 00:11:19,270 dar kartą, idėja yra ta, kad mes norime naudoti mažiau bitai didžiąją laiko dalį 176 00:11:19,270 --> 00:11:21,790 ir daugiau bitų tik vieną kartą, o. 177 00:11:21,790 --> 00:11:26,070 Hafmano kodavimo, galite sukurti miško medžių. 178 00:11:26,070 --> 00:11:31,190 Yra tarsi story line, kuri apima medžių, taip pat ir pastato juos. 179 00:11:31,190 --> 00:11:32,420 Pradėkime. 180 00:11:32,420 --> 00:11:36,140 >> Aš siūlau, kad jums pradėti su šiuo miško, taip sakant, iš 5 medžių, 181 00:11:36,140 --> 00:11:38,260 kurių kiekviena yra gana kvailas medis. 182 00:11:38,260 --> 00:11:42,800 Medis sudaro tik vieną mazgą,, išreikšta kaip čia apskritimu. 183 00:11:42,800 --> 00:11:45,310 Taigi, kiekvienas iš šių dalykų gali būti C struct 184 00:11:45,310 --> 00:11:50,200 ir viduje C struct gali būti plūdės, atstovaujanti dažnio skaičius 185 00:11:50,200 --> 00:11:52,510 ir tada gal char ty raidę. 186 00:11:52,510 --> 00:11:56,470 Todėl manau, kad kaip tik bet kokia sena C struct šių mazgų, tačiau, dabar, aukštesnį lygį. 187 00:11:56,470 --> 00:12:01,230 Tai yra 5 medžiai, kiekvienas, kurie turi tik vieną mazgą miškas. 188 00:12:01,230 --> 00:12:06,830 Hafmano Siūloma, kad mes pradėti derinti šiuos medžius 189 00:12:06,830 --> 00:12:11,140 kad yra mažiausias dažnio skaičių į šiek tiek didesnis medžių 190 00:12:11,140 --> 00:12:13,490 sujungiant jas su nauju šakninis mazgas. 191 00:12:13,490 --> 00:12:17,560 Taigi čia iš raidžių, pastebėsite, kad būtų patogiau, aš surūšiuoti juos iš kairės į dešinę, 192 00:12:17,560 --> 00:12:21,420 nors tai nėra būtina, ir pranešimas, kad mažiausi mazgai 193 00:12:21,420 --> 00:12:23,930 šiuo metu yra 10% ir 10%. 194 00:12:23,930 --> 00:12:28,940 Taigi Huffman pasiūlė, kad mes sujungti tuos 2 smulkiausius mazgų į naują medžio 195 00:12:28,940 --> 00:12:34,450 įvedant naują patronuojančiai mazgas ir tada tos patronuojančios į kairę vaiką ir tinkamą kūdikio 196 00:12:34,450 --> 00:12:37,720 kur B yra pasirinktinai į kairę ir C yra savavališkai teisę. 197 00:12:37,720 --> 00:12:41,590 Ir tada Huffman taip pat pasiūlė, kad tegul dabar tiesiog manau, kad iš kairės vaiko 198 00:12:41,590 --> 00:12:44,790 vieną iš šių medžių, visada taip, kuriai atstovauja 0 199 00:12:44,790 --> 00:12:47,890 ir teisę vaikas visada atstovauja skaičiumi 1. 200 00:12:47,890 --> 00:12:50,680 >> Nesvarbu, jei apversti juos taip ilgai, kaip jūs atitinka. 201 00:12:50,680 --> 00:12:54,650 Taigi dabar mes turime keturis šio miško medžių. 202 00:12:54,650 --> 00:12:58,050 Ir aš sakau: 4, nes dabar kairėje medis - 203 00:12:58,050 --> 00:13:00,570 ir tai ne tiek daug, ta prasme, kad jis auga tokiu būdu medis 204 00:13:00,570 --> 00:13:05,170 tai daugiau kaip šeimos medį, kur dabar yra 0,2 yra tarsi dviejų vaikų tėvų - 205 00:13:05,170 --> 00:13:07,930 pastebėti, kad tos patronuojančios mes paruošiau 0,2. 206 00:13:07,930 --> 00:13:13,370 Mes pridėjome dažnio dviejų vaikų skaičių ir atsižvelgiant į naujas mazgas, bendra suma. 207 00:13:13,370 --> 00:13:15,310 Taigi dabar mes tiesiog pakartokite šį procesą. 208 00:13:15,310 --> 00:13:19,490 Rasti du mažiausi mazgus ir tada sujungti juos į naują medžio 209 00:13:19,490 --> 00:13:21,380 ir tada pakartokite šį procesą skatinančių. 210 00:13:21,380 --> 00:13:26,390 Dabar mes turime kelis kandidatus, 20%, 15%, o dar 20%. 211 00:13:26,390 --> 00:13:29,780 Tokiu atveju, mes turime nutraukti lygiąsias. Mes galime tai padaryti savavališkai. 212 00:13:29,780 --> 00:13:31,540 Mes tiesiog reikia daryti nuosekliai. 213 00:13:31,540 --> 00:13:33,760 Šiuo atveju, aš savavališkai eiti su kairėje, 214 00:13:33,760 --> 00:13:39,880 ir dabar aš sujungti 20% ir 15%, man duoti naują tėvų vadinamas 35%, 215 00:13:39,880 --> 00:13:46,310 kurio kairėje vaikas 0, kurio dešinė vaikas yra 1, ir dabar mes turime tik tris medžius miške. 216 00:13:46,310 --> 00:13:47,960 Galite gali matyti, kur tai vyksta. 217 00:13:47,960 --> 00:13:51,150 Jei mes pakartoti dar keletą kartų, mes ketiname turėti tik vieną didesnį medį, 218 00:13:51,150 --> 00:13:53,900 kurio visi kraštai yra paženklinti 0s ir 1s. 219 00:13:53,900 --> 00:13:55,710 Leiskite tai padaryti vėl. 220 00:13:55,710 --> 00:14:02,600 35% to medžio šaknis. 20% ir 45%, todėl mes ketiname sujungti 35% ir 20%. 221 00:14:02,600 --> 00:14:05,610 Dabar mes turime šį medį. Mes pridėti kartu, mes turime 55%. 222 00:14:05,610 --> 00:14:07,910 Dabar ten tik du medžiai miške. 223 00:14:07,910 --> 00:14:11,900 Mes darome tai vieną galutinį laiką, ir tikiuosi, matematiškai visi dažniai pridėti iki 224 00:14:11,900 --> 00:14:15,570 , nes jie turi, nes mes skaičiuojamas juos nuo get-go pridėti iki 100%. 225 00:14:15,570 --> 00:14:17,960 Ir dabar mes turime vieną medį. 226 00:14:17,960 --> 00:14:20,580 Taigi tai yra Huffman kodavimas medis. 227 00:14:20,580 --> 00:14:24,400 Jis rūšies užima nors ten nuvykti, žodžiu, tačiau tikrovė yra už linijos 228 00:14:24,400 --> 00:14:27,620 rekursinis funkcija, jums galėtų statyti tai, ką iki gana greitai. 229 00:14:27,620 --> 00:14:32,440 Taigi dabar mes turime vieną naują mazgą, ir visų šių vidinių mazgų buvo malloc'd 230 00:14:32,440 --> 00:14:34,690 matyt, pakeliui. 231 00:14:34,690 --> 00:14:38,650 Taigi, dabar šio medžio viršuje turime 100%, bet dabar pastebėti, mes turime kelias 232 00:14:38,650 --> 00:14:43,780 šis naujas puikiai puikiai puikiai seneliai visiems puikiai puikiai provaikaičiai 233 00:14:43,780 --> 00:14:45,930 apačioje, "kad visi lapai. 234 00:14:45,930 --> 00:14:52,840 >> Ką mes ketiname padaryti dabar yra pasiūlyti, kad siekiant atstovauti "E" raide, 235 00:14:52,840 --> 00:14:55,670 mes tiesiog naudoti skaičių 1. Kodėl? 236 00:14:55,670 --> 00:15:01,000 Nes jei mes feed šį medį iš galutinio šaknies lapų žinomas kaip e, 237 00:15:01,000 --> 00:15:06,050 mes laikomės tik vieną pranašumą, dešiniojo krašto, ir tai pažymėti žinoma viršutiniame dešiniajame 1. 238 00:15:06,050 --> 00:15:11,550 Taigi potekstė čia Huffman, kad E koduotė dvejetainiu būti tik 1. 239 00:15:11,550 --> 00:15:14,490 Ir tai pretty damn efektyvus. Tikrai negali gauti bet mažesnis nei, kad. 240 00:15:14,490 --> 00:15:18,350 Priešingai, ketina būti atstovaujama, jei jums sekti logika, 241 00:15:18,350 --> 00:15:21,610 , kas bitų, o ne modelis? 01. 242 00:15:21,610 --> 00:15:25,500 Taigi, norint gauti pradėsime ne šaknis, ir mes einame į kairę ir tada mes eiti į dešinę, 243 00:15:25,500 --> 00:15:28,580 , o tai reiškia, mes po 0 ir 1. 244 00:15:28,580 --> 00:15:32,810 Todėl mes atstovauti laišką modelio 0 ir 1. 245 00:15:32,810 --> 00:15:36,010 Ir dabar pastebėti, mes jau turime nedelsiant Dekoduojamumas turtą 246 00:15:36,010 --> 00:15:38,090 kad mes neturėjome Morzės abėcėle. 247 00:15:38,090 --> 00:15:42,840 Nors abi iš šių modelių yra gana trumpas - E yra 1 bitas, yra 2 bitai - 248 00:15:42,840 --> 00:15:45,080 pastebėsite, kad jie negali būti supainiotas vieną ar kitą, 249 00:15:45,080 --> 00:15:54,870 nes jei matote 1 jis gavo, E, jei matote 0 1 tai akivaizdžiai turite būti A. 250 00:15:54,870 --> 00:15:58,410 Be to, tai, kas D? 001. 251 00:15:58,410 --> 00:16:01,440 Kas yra C? 0001. 252 00:16:01,440 --> 00:16:05,320 O kas tai yra B? 0000. 253 00:16:05,320 --> 00:16:09,550 Ir dar kartą, nes visi iš raidžių, mes rūpinamės yra lapų 254 00:16:09,550 --> 00:16:13,890 ir nė vienas iš jų rūšies tarpininkų kelio nuo šaknų iki lapų, 255 00:16:13,890 --> 00:16:18,760 2 raidės skirtingas koduotes conflating rizika nėra 256 00:16:18,760 --> 00:16:22,300 , nes visi iš šių bitų modelius yra deterministinis. 257 00:16:22,300 --> 00:16:25,280 0000 visada bus B. 258 00:16:25,280 --> 00:16:29,480 Yra joks mazgas kažkur tarp jų, kad galite sumaišyti vieną raidę kita. 259 00:16:29,480 --> 00:16:31,150 Taigi, kas čia potekstė? 260 00:16:31,150 --> 00:16:35,080 >> Populiariausias laiškas šiuo atveju E turi Dotarłeś trumpiausią kodavimą, 261 00:16:35,080 --> 00:16:37,430 Įsigijo kitą trumpiausią kodavimą, 262 00:16:37,430 --> 00:16:41,390 B ir C, kuri mes jau žinojo nuo get-go rūšies mažiausiai populiarus 263 00:16:41,390 --> 00:16:45,390 dažnis 10% kiekvieno, jie įgijo ilgiausią kodavimą. 264 00:16:45,390 --> 00:16:49,410 Ir kas iš to, tai reiškia, kad dabar yra, kad jei jūs norite siųsti pranešimą, kuris yra suspaustas 265 00:16:49,410 --> 00:16:51,950 internetu arba elektroniniu paštu, arba iš panašių dirbinių, 266 00:16:51,950 --> 00:16:56,730 , o ne naudojant standartinį ASCII, galite siųsti Huffman koduotą pranešimą 267 00:16:56,730 --> 00:17:01,720 , pagal kurią, jei norite siųsti laišką E, galite siųsti tik vieną bitų. 268 00:17:01,720 --> 00:17:05,680 Jei norite siųsti, galite atsiųsti 2 bitai, 01, užuot siuntę 8 bitai 269 00:17:05,680 --> 00:17:10,190 po to dar 8 bitai, po to dar 8 bitai ir kt. 270 00:17:10,190 --> 00:17:11,940 Bet yra kabliuko čia. 271 00:17:11,940 --> 00:17:17,079 Tai nėra pakankamas, kad būtų tiesiog statyti šį medį ir tik tada pradėti siųsti iš Alice Bob 272 00:17:17,079 --> 00:17:20,010 trumpesnis tiek modelis, eilutė iš ASCII, 273 00:17:20,010 --> 00:17:23,140 nes Alisa taip pat turi informuoti Bob ką 274 00:17:23,140 --> 00:17:26,880 Jei Bobas ir vyksta, kad būtų galima skaityti savo suspaustą pranešimą? 275 00:17:26,880 --> 00:17:30,770 [Nesigirdi studentas atsakas] >> Kas tai? 276 00:17:30,770 --> 00:17:32,310 [Nesigirdi studentas atsakas] >> Iš koks medis. 277 00:17:32,310 --> 00:17:35,160 Arba dar tiksliau, ką šios koduotės, 278 00:17:35,160 --> 00:17:39,010 ypač, nes per šią istoriją mes padarė sprendimą skambutį vienu metu. 279 00:17:39,010 --> 00:17:43,640 Prisiminkite, kad mes turėjome savavališkai pasirinkti tarp 2 skirtingų 20% mazgų? 280 00:17:43,640 --> 00:17:49,800 Taigi, tai ne tas atvejis, kad Bob, gavėjas, galite tiesiog atkurti savo medį 281 00:17:49,800 --> 00:17:53,390 nes gal jis bus sukurti medį, vis tiek šiek tiek skirtingai nuo Alice. 282 00:17:53,390 --> 00:17:56,670 Be to, Bobas nėra net žinoti, ką pradinis pranešimas 283 00:17:56,670 --> 00:18:00,770 nes vienintelis dalykas, Alisa siunčia jį, žinoma, yra suspaustas pranešimą. 284 00:18:00,770 --> 00:18:05,900 >> Taigi su slėginio panašaus Laimikis, kad, taip, Alisa gali sutaupyti visai daug bitais 285 00:18:05,900 --> 00:18:09,900 siunčiant 1 E ir 01 ir tt, 286 00:18:09,900 --> 00:18:15,180 tačiau ji taip pat turi informuoti Bob kartografavimo tarp raidžių ir bitai 287 00:18:15,180 --> 00:18:19,620 nes jie negali aiškiai remtis tik ASCII nebėra, jei mes ne naudojant ASCII. 288 00:18:19,620 --> 00:18:22,200 Todėl ji gali nusiųsti jam medį kažkaip 289 00:18:22,200 --> 00:18:26,600 užsirašyti, laikyti jį kaip dvejetainiai duomenys ar kažkas panašaus - 290 00:18:26,600 --> 00:18:30,280 arba tiesiog atsiųskite jam šiek tiek Cheat sheet, "Excel" failą, kuris rodo, kad parodyti. 291 00:18:30,280 --> 00:18:36,480 Taigi suspaudimo efektyvumas tikrai daroma prielaida, jog pranešimai, kad jūs siunčiate 292 00:18:36,480 --> 00:18:40,230 yra gana didelis, bent vidutinių, 293 00:18:40,230 --> 00:18:42,180 nes jei jūs siunčiate super trumpą pranešimą, 294 00:18:42,180 --> 00:18:45,390 jei jūs tiesiog norite siųsti pranešimą BAD, kuris atsitinka būti žodis, mes galime aiškiai čia, 295 00:18:45,390 --> 00:18:49,550 B-D, jūs tikriausiai ketina naudoti mažiau bitų, 296 00:18:49,550 --> 00:18:53,130 bet laimikis, jei jūs taip pat turite informuoti Bob, koks medis yra 297 00:18:53,130 --> 00:18:57,530 ar tai, ką šios koduotės, jūs ketinate tikriausiai nusvertų visų santaupų, 298 00:18:57,530 --> 00:19:00,110 turėti suspausto ko pradėti. 299 00:19:00,110 --> 00:19:02,210 Taigi, ji iš tikrųjų gali būti atvejis, kad jei bandysite suspaudžiant 300 00:19:02,210 --> 00:19:05,330 net ir su kažkuo, kaip zip ar failo formatus jums gali būti susipažinę su 301 00:19:05,330 --> 00:19:07,780 gana mažos rinkmenos, net tuščias failai 302 00:19:07,780 --> 00:19:10,930 kartais tie failai gali gauti daugiau ir ne mažesnis. 303 00:19:10,930 --> 00:19:14,320 Bet realiai, tai atsitiks tik mažiems failo dydis, 304 00:19:14,320 --> 00:19:16,920 todėl ji nesiruošia gigabaitų failą, kad 2 GB; 305 00:19:16,920 --> 00:19:19,480 mes iš tikrųjų kalbame baitų arba tik pora kilobaitai. 306 00:19:19,480 --> 00:19:22,330 >> Kai, pavyzdžiui, užtrauktuku programos yra pakankamai protingas suprasti, kad, 307 00:19:22,330 --> 00:19:24,590 "Jūs ketinate išleisti daugiau bitų kompresoriai tai." 308 00:19:24,590 --> 00:19:27,460 "Leiskite man ne nerimauti jį suglaudinti, jums visiems." 309 00:19:27,460 --> 00:19:30,160 Taigi tai yra tik vienas būdas suspaudžiant teksto formatą. 310 00:19:30,160 --> 00:19:32,300 Mes galime įgyvendinti kažką panašaus į tai, C. 311 00:19:32,300 --> 00:19:35,370 Pavyzdžiui, čia yra tai, kaip mes galime atstovauti šio medžio mazgas 312 00:19:35,370 --> 00:19:39,320 kur mes turime char simbolį, slankiojo dažnio vertė yra 313 00:19:39,320 --> 00:19:42,250 ir kaip mes matėme su kitais mūsų duomenų struktūras, 2 Pointeriai 314 00:19:42,250 --> 00:19:47,080 1 į kairę vaikui, 1 į dešinę, arba kurios gali būti lygus NULL, 315 00:19:47,080 --> 00:19:50,850 bet jei ne, tai reiškia į kairę vaiko ir teisingu vaiko. 316 00:19:50,850 --> 00:19:55,130 Taigi, tai tada Huffman kodavimas, ir tai yra vienas iš būdų, kad galite eiti apie suspaudžiant informaciją, 317 00:19:55,130 --> 00:19:57,880 ir tai tikrai vienas iš labiausiai lengva įgyvendinti 318 00:19:57,880 --> 00:20:00,830 , tarkime, praėjusios savaitės duomenų struktūras kontekste, 319 00:20:00,830 --> 00:20:03,250 nors yra dar sudėtingesnius algoritmus 320 00:20:03,250 --> 00:20:08,220 , kad galima padaryti dar sudėtingesnius mutacijų, dėl kurių jūsų duomenis. 321 00:20:08,220 --> 00:20:11,640 Kokių nors klausimų, tada ant medžių, dvejetainiai medžiai, arba slėginio teksto? 322 00:20:11,640 --> 00:20:15,590 [Studentas] Ar yra koks nors dviprasmybių, pavyzdžiui, jei [nesigirdi] padalinti į 01 323 00:20:15,590 --> 00:20:19,160 tada 011 būtų dviprasmiškas, tiesa? 324 00:20:19,160 --> 00:20:22,730 [Nesigirdi] >> Geras klausimas. Neaiškumų. 325 00:20:22,730 --> 00:20:25,940 Leiskite apibendrinti, nurodydama šioje nuotraukoje čia. 326 00:20:25,940 --> 00:20:29,650 Kadangi simbolius, suspaudžiant, atstovybės, 327 00:20:29,650 --> 00:20:32,850 šio algoritmo apibrėžimą visada lieka lapai, 328 00:20:32,850 --> 00:20:41,870 jums niekada netyčia tą patį modelį bitų kelių raidžių prefikso. 329 00:20:41,870 --> 00:20:46,740 Taigi, kitaip tariant, esate susirūpinęs, tai skamba kaip, dviprasmybes, kylančių 330 00:20:46,740 --> 00:20:51,580 , pagal kurį 001 B arba C arba kažką panašaus, kad pradžia pradžia gali būti. 331 00:20:51,580 --> 00:20:56,780 Bet tai ne tas atvejis, nes pranešimas, kad visų abėcėlės raidžių, mes kodavimas 332 00:20:56,780 --> 00:20:58,290 yra lapų. 333 00:20:58,290 --> 00:21:01,910 >> Dviprasmiškumo gali kilti tik kaip Morzės abėcėle, 334 00:21:01,910 --> 00:21:06,770 , jei, pavyzdžiui, C buvo kažkur palei kelią, nuo šaknų iki B 335 00:21:06,770 --> 00:21:12,290 [Studentas] Teisė. Taigi, šiuo atveju, tarkim, 2 lapai. >> Pasakykite turi - Pasakykite, kad vėl. 336 00:21:12,290 --> 00:21:18,760 [Studentas] Pasakykite 2 lapai, f ir g punktuose, ir tada G - >> Gerai. Bet ji negali. 337 00:21:18,760 --> 00:21:23,230 Savaime negali turėti lapai F ir G, nes šių laiškų F ir G 338 00:21:23,230 --> 00:21:27,560 būtų patys palieka kažkur B kairėje arba E teisė 339 00:21:27,560 --> 00:21:28,900 Taigi pagal apibrėžimą, jie turi būti lapai. 340 00:21:28,900 --> 00:21:32,940 Priešingu atveju, jūs esate visiškai teisus, mes ne išspręsti šią problemą, kad susiduria su Morzės kodas. 341 00:21:32,940 --> 00:21:38,150 Geras klausimas. Kiti klausimai? Gerai. 342 00:21:38,150 --> 00:21:42,050 Tai bitų sąvoka, it turns out, kad mes neturėjo galios, visi kartu, kad mes ne iš tikrųjų naudojamas 343 00:21:42,050 --> 00:21:44,200 , kai ji atėjo į manipuliuoti šių 0s ir 1s. 344 00:21:44,200 --> 00:21:46,600 Mes paklausėme apie tai vieną iš pirmųjų probleminių rinkinių: 345 00:21:46,600 --> 00:21:52,340 ty, kaip jūs einate apie perėjimą didžiąsias į mažąsias arba atvirkščiai? 346 00:21:52,340 --> 00:21:55,460 Arba, konkrečiau, vienas iš tų pirmųjų psets paprašė 347 00:21:55,460 --> 00:22:01,090 kiek bitų jūs iš tikrųjų turi apversti, siekiant pakeisti į mažąsias arba atvirkščiai,? 348 00:22:01,090 --> 00:22:05,580 Štai trumpas priminimas apie tai, ką 65 ir 97 atrodo kaip dvejetainis. 349 00:22:05,580 --> 00:22:08,060 Ir net jei šis klausimas tarsi išblukęs savo atminties, 350 00:22:08,060 --> 00:22:11,290 vėl čia galite pamatyti, kad, kiek bitų reikia apversta 351 00:22:11,290 --> 00:22:15,810 pakeisti kapitalą į mažąsias? Tik vieną. 352 00:22:15,810 --> 00:22:19,650 >> Jie skiriasi tik vienoje vietoje, trečias iš kairės bitų. 353 00:22:19,650 --> 00:22:24,240 Kadangi turi 010, mažai 011. 354 00:22:24,240 --> 00:22:26,250 Taigi, vienaip ar kitaip, mes turime tiesiog būtų galima apversti, kad šiek tiek, 355 00:22:26,250 --> 00:22:29,410 tada ir mes galime pasinaudoti arba mažosiomis raidėmis. 356 00:22:29,410 --> 00:22:32,720 Mes padarėme tai praeityje iš tikrųjų, naudojant, jei sąlygos 357 00:22:32,720 --> 00:22:35,930 ir tikrinti, ar laiškas yra tarp kapitalo ir kapitalo Z, 358 00:22:35,930 --> 00:22:41,480 išėjimai, pavyzdžiui, - + 26 ar kažkas panašaus. 359 00:22:41,480 --> 00:22:46,130 Jūs tikriausiai padarė aritmetinę pakeisti abėcėlės raides. 360 00:22:46,130 --> 00:22:49,270 Bet kas, jei galėtume tiesiog apversti, kad vieną tiek? 361 00:22:49,270 --> 00:22:59,080 Kaip tu galėjai eiti apie vienas baitas verta bitų, todėl 8 bitai kaip 01.000.001 01.100.001? 362 00:22:59,080 --> 00:23:03,170 Jei turėjo tuos bitai modelius, kaip mes galime eiti apie keičiasi tik vienas iš jų? 363 00:23:03,170 --> 00:23:07,610 Ką daryti, jei mes pristatome geltonai čia šį kitą modelį bitais? 364 00:23:07,610 --> 00:23:13,420 Jei aš darau visą geltonos styginių 0s išskyrus bitas, kad noriu pakeisti 365 00:23:13,420 --> 00:23:17,900 ir tada aš įvesti naują operatorių, žinomas kaip Bitinis operatoriaus - 366 00:23:17,900 --> 00:23:21,210 Bitinis ta prasme, kad ji veikia atskirų bitų, 367 00:23:21,210 --> 00:23:25,360 ne visą baitą arba visus iš karto keturi baitai. 368 00:23:25,360 --> 00:23:31,170 Ši vertikali juosta ten geltonos rodo, kad kas būtų, jei mes priimame kapitalo atstovavimą A 369 00:23:31,170 --> 00:23:37,060 ir Bitinis ARBA su geltona bitų seka? 370 00:23:37,060 --> 00:23:41,300 Kitaip tariant, prisiminkite mūsų diskusijų Būlio išraiškos nulio ir tada C 371 00:23:41,300 --> 00:23:47,520 >> Daro boolean ar tai reiškia, kad būtų tiesa, bet pirmas dalykas, turi būti tiesa, 372 00:23:47,520 --> 00:23:50,700 arba antras dalykas, turi būti tiesa, ar jie abu turi būti tiesa, 373 00:23:50,700 --> 00:23:53,270 ir tada produkcija yra pati tiesa. 374 00:23:53,270 --> 00:24:00,230 Šiuo atveju čia, ką mes gauname, jei mes priimame 0 "arba" Ed su 0? Neteisinga ar klaidingas? 375 00:24:00,230 --> 00:24:04,280 Jis vis dar ne, taigi mažosiomis lieka taip, kaip tikėtasi. 376 00:24:04,280 --> 00:24:07,540 Ką daryti, jei vietoj to, mes padaryti 1 arba 0? 377 00:24:07,540 --> 00:24:12,640 Tai dabar dar 1, bet pastebėti, kas bręsti čia. 378 00:24:12,640 --> 00:24:18,630 Jei pradėsime sostinę ir toliau "arba" atskirus bitus, kaip mes darome, čia, 379 00:24:18,630 --> 00:24:25,180 0 arba geltona suteikia mums tai, ką čia apačioje? Tai suteikia mums 1. 380 00:24:25,180 --> 00:24:35,120 Iš tikrųjų, tarkime, mes nežinojome, ką didžiąsias versija mažai iš tikrųjų buvo. 381 00:24:35,120 --> 00:24:38,270 Eikime tai padaryti. Leiskite man pereiti atgal per čia. 382 00:24:38,270 --> 00:24:42,340 Leiskite tai padaryti ir vėl. 0 arba 0 man duoda 0. 383 00:24:42,340 --> 00:24:45,020 1 arba 0, suteikia man 1. 384 00:24:45,020 --> 00:24:48,020 0 arba 1 suteikia man 1. 385 00:24:48,020 --> 00:24:52,880 0 arba 0 man duoda 0. Kitą yra 0, kitą yra 0, kitą yra 0. 386 00:24:52,880 --> 00:24:55,660 1 arba 0, suteikia man 1. 387 00:24:55,660 --> 00:24:59,140 Ir, net jei mes ne iš anksto žinoti, ką mažosiomis buvo, 388 00:24:59,140 --> 00:25:04,770 tiesiog "arba" su šio modelio, kad mes čia pateikiami geltonas bitų, 389 00:25:04,770 --> 00:25:09,400 galite mažosiomis kapitalą prakeiktas, kad šiek tiek. 390 00:25:09,400 --> 00:25:11,580 Mes panaudojome šią išraiška savaites: prakeiktas šiek tiek. 391 00:25:11,580 --> 00:25:13,710 Kaip jūs iš tikrųjų tai padaryti programiškai? 392 00:25:13,710 --> 00:25:16,390 Galite naudoti tai, kas paprastai vadinama kaukė, bitų sekos, 393 00:25:16,390 --> 00:25:19,980 kad šiuo atveju tiesiog taip atsitinka atrodyti šį numerį čia, 394 00:25:19,980 --> 00:25:22,980 ir tada jūs "arba" jis kartu naudojant šią naują C operatorius, 395 00:25:22,980 --> 00:25:29,940 ne | |, naudoti vieną | ir jūs iš tiesų gauti šį atsakymą, nes čia kodėl? 396 00:25:29,940 --> 00:25:35,120 Tai 1s vieta, 2s vieta, 4S, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Taigi paaiškėja, kad, jei vartojate didžioji raidė ir Bitinis ARBA sveikasis skaičius 32 398 00:25:42,280 --> 00:25:47,520 nes sveikasis skaičius 32, kai jūs žiūrite į jį kaip bitai, atrodo taip, 399 00:25:47,520 --> 00:25:50,860 tai reiškia, kad tu gali apversti tiek, kad jūs iš tikrųjų norite. 400 00:25:50,860 --> 00:25:52,630 Ir panašiai - ir mes pažvelgti kodą tik akimirką - 401 00:25:52,630 --> 00:25:54,210 Tarkime, mes norime eiti kita kryptimi. 402 00:25:54,210 --> 00:25:58,210 >> Kaip tu iš mažosios raidės a su kapitalu? Kurie šiek tiek reikia pakeisti? 403 00:25:58,210 --> 00:25:59,820 Tai tas pats. 404 00:25:59,820 --> 00:26:03,970 Mes norime pakeisti, kad trečiųjų tiek iš 1 į 0. 405 00:26:03,970 --> 00:26:06,310 Ir kaip galėtume eiti apie tai daryti? 406 00:26:06,310 --> 00:26:10,130 Kaip mes išjungti šiek tiek? Su tuo, ką bitų modelis galėtume išjungti šiek tiek? 407 00:26:11,580 --> 00:26:14,070 Ką daryti, jei mes rūšiuoti invertuotąjį kaukę? 408 00:26:14,070 --> 00:26:17,350 Anksčiau, mes padarėme visą geltonos kaukė 0s 409 00:26:17,350 --> 00:26:19,930 išskyrus vieną bitų norėjome įjungti, 410 00:26:19,930 --> 00:26:25,580 ką daryti, jei šį kartą, mes visą kaukė 1s išskyrus bitų, kad mes norime, kad išjungtumėte 411 00:26:25,580 --> 00:26:28,330 ir tada naudokite kas operatorių? 412 00:26:28,330 --> 00:26:30,560 Ką daryti, jei mes "ir" dalykai? Leiskite pažvelgti. 413 00:26:30,560 --> 00:26:34,880 Jei mes dabar flip, tarkime, kad vėl galiu sukurti kaukę, kad viskas 1s 414 00:26:34,880 --> 00:26:37,650 išskyrus viena šiek tiek, kad aš noriu išjungti 415 00:26:37,650 --> 00:26:43,860 ir tada, o ne "arba" balti skaičiai iki viršaus su geltona skaičių, čia, 416 00:26:43,860 --> 00:26:46,940 ką daryti, jei aš vietoj "ir" juos kartu? Tai vadinama Bitinis. 417 00:26:46,940 --> 00:26:49,450 Logiškai mąstant, tai tas pats dalykas, kaip Būlio. 418 00:26:49,450 --> 00:26:55,160 Tai suteikia man 0 & 1 yra 0. Taip neteisinga ir teisinga, yra klaidinga. 419 00:26:55,160 --> 00:26:58,160 Tiesa, ir tiesa yra tiesa. 420 00:26:58,160 --> 00:27:04,020 Ir čia yra magija: TRUE ir FALSE, dabar ne, taigi mes jau išjungtas, kad šiek tiek. 421 00:27:04,020 --> 00:27:06,560 Ir dabar istorijos poilsio yra gana paprasta. 422 00:27:06,560 --> 00:27:11,970 Kadangi kaukė likusi dalis yra 1s, nesvarbu, kokie skaičiai yra baltos spalvos. 423 00:27:11,970 --> 00:27:15,580 Kai "ir" kažkas su tiesa, jūs nesiruošia pakeisti savo vertę. 424 00:27:15,580 --> 00:27:20,200 Jei tai tiesa, jis liks tiesa. Jei jis neteisingas, jis bus klaidingas. 425 00:27:20,200 --> 00:27:23,190 >> Bet magija atsitiks, kai tai, kas buvo tiesa 426 00:27:23,190 --> 00:27:25,430 ir tu tada "ir" ji klaidinga. 427 00:27:25,430 --> 00:27:30,030 Tai turi išjungdami, kad šiek tiek. 428 00:27:30,030 --> 00:27:31,980 Todėl šiek tiek paslaptingas. 429 00:27:31,980 --> 00:27:35,390 Tegul realiai pažvelgti į tam tikrą kodą, kuris gali iš tikrųjų atrodo dar labiau paslaptingas, 430 00:27:35,390 --> 00:27:38,220 bet tegul pažvelgti čia tolower. 431 00:27:38,220 --> 00:27:45,880 Jei aš žiūriu tolower, iš kapitalo į mažąsias, 432 00:27:45,880 --> 00:27:47,730 galime pamatyti, kaip mes galime įgyvendinti šią programą. 433 00:27:47,730 --> 00:27:51,280 Štai pagrindinis, ir tai ne imtis bet kokių komandų eilutės argumentus. 434 00:27:51,280 --> 00:27:55,980 Aš skelbiantis simbolių c raštą, kuriame vartotojas ketina įvesti in 435 00:27:55,980 --> 00:28:00,690 Aš tada naudoti pažįstamas daryti, o linijos tiesiog įsitikinkite, kad vartotojas tikrai suteikia man kapitalą 436 00:28:00,690 --> 00:28:05,010 , B, C. .. Z, todėl jie man kažką tarp A ir Z. 437 00:28:05,010 --> 00:28:08,580 Ir dabar, ką aš darau čia? 438 00:28:08,580 --> 00:28:14,870 Aš "arba" ING tai su 0x20, bet tai iš tikrųjų tas pats, kaip - 439 00:28:14,870 --> 00:28:19,500 ir mes grįžti į tai per akimirką - 32. 440 00:28:19,500 --> 00:28:24,830 Taigi dar kartą, 32 tai bitų čia modelis. Kodėl mes tai žinome? 441 00:28:24,830 --> 00:28:26,320 Tiesiog manau, kad atgal į savaitę 0. 442 00:28:26,320 --> 00:28:31,010 Tai 1s vieta, 2s vieta, 4S, 8s, 16s, 32s vieta. 443 00:28:31,010 --> 00:28:33,470 Taigi tai geltona numeris atsitinka būti 32. 444 00:28:33,470 --> 00:28:40,570 Galiu tada kaip char laišką čia, Bitinis "arba" Tas su prasme skaičius 32, 445 00:28:40,570 --> 00:28:45,250 ir ką aš grįšiu? Mažosiomis versija, kad char. 446 00:28:45,250 --> 00:28:48,830 Metu senumo, nors aš pareiškiau tai skirtingų pagrindinių notacijos. 447 00:28:48,830 --> 00:28:51,370 Ką ši? >> [Studentas] Šešioliktainis. 448 00:28:51,370 --> 00:28:53,050 [Malan] Tai atsitinka atstovauti šešioliktainis. 449 00:28:53,050 --> 00:28:55,170 Mes ne kalbėjo apie šešioliktainis visi, kad daug, 450 00:28:55,170 --> 00:28:57,330 bet tai tikrai patogu panašiais atvejais. 451 00:28:57,330 --> 00:29:01,730 >> Nors ji ir atrodo sudėtingesnis ir daugiau, nors ji atrodo kaip 20 ir ne 32, 452 00:29:01,730 --> 00:29:06,240 paaiškėja, kad šešioliktainis iš tiesų yra super patogu notacijos 453 00:29:06,240 --> 00:29:10,810 nes šešioliktainis kas po 0x skaitmuo - o tai reiškia, nieko; 454 00:29:10,810 --> 00:29:13,960 tai tiesiog žmogiška konvencija, kuri sako, kad čia ateina šešioliktainis skaičius - 455 00:29:13,960 --> 00:29:18,590 kiekviena iš šių skaitmenų, 2 ir 0, patys gali būti atstovaujama 456 00:29:18,590 --> 00:29:20,800 lygiai 4 bitai. 457 00:29:20,800 --> 00:29:27,840 Taigi, jeigu mes tai darysime, leiskite man atverti teksto redaktoriumi čia - Weird automatinį užbaigimą 458 00:29:27,840 --> 00:29:35,940 jei mes čia, šiek tiek teksto redaktorių skaičius 0x20 - čia yra 4 bitai, štai dar 4 bitai. 459 00:29:35,940 --> 00:29:38,050 Darykime dešinė 4 bitai pirmas. 460 00:29:38,050 --> 00:29:44,690 0, kai atstovaujama su 4 bitai yra kas? Super lengva. Tiesiog visi 0s. 461 00:29:44,690 --> 00:29:46,780 Taigi, 4 bitai kaip 0s. 462 00:29:46,780 --> 00:29:53,510 Kaip jūs atstovaujate 2? Tai buvo kartu, nes mes padarėme tai, bet tai 0100. 463 00:29:53,510 --> 00:29:57,310 Todėl tai yra 1s vieta, tai yra 2s vieta, ir tada nesvarbu, ką kitos vietos. 464 00:29:57,310 --> 00:30:00,610 Kitaip tariant, šešioliktainis jūs galite pasakyti, 0x20, 465 00:30:00,610 --> 00:30:04,340 tačiau, jei jūs tada galvoti apie tai, kas yra 2, ir kaip jis atstovavo dvejetainiu, 466 00:30:04,340 --> 00:30:07,130 kas yra 0, o kaip jis atstovavo dvejetainiu, 467 00:30:07,130 --> 00:30:10,440 atsakymai į šiuos klausimus yra tai ir tai, atitinkamai. 468 00:30:10,440 --> 00:30:14,380 Taigi, 0x20 atsitinka atstovauti šis 8 bitų modelis, 469 00:30:14,380 --> 00:30:16,880 o būtent kaukė, kad mes norėjome. 470 00:30:16,880 --> 00:30:20,140 Taigi tai yra šiuo metu tik proto mankšta, 471 00:30:20,140 --> 00:30:24,520 tačiau tikrovė yra tokia, naudojant kodą, tai paprastai labiau įprasta rašyti konstantas, kaip šis 472 00:30:24,520 --> 00:30:28,360 šešioliktainis, nes tada programuotojas gali gana lengvai, 473 00:30:28,360 --> 00:30:32,560 net jei tai reikalauja šiek tiek popieriaus ir pieštuką, išsiaiškinti, kas, kad bitų modelis 474 00:30:32,560 --> 00:30:35,960 , nes galite ne tik išreikšti 0s ir 1s paprastai kodą. 475 00:30:35,960 --> 00:30:38,540 Jūs negalite eiti 00.010 ir kt. 476 00:30:38,540 --> 00:30:42,380 >> Jūs turite pasirinkti dešimtainių arba šešioliktainis ar aštuntainė ar kitų žymėjimai. 477 00:30:42,380 --> 00:30:47,540 Dauguma žmonių linkę pasirinkti šešioliktainis tiesiog todėl, kad kiekvienas skaitmuo rodo 4 bitai 478 00:30:47,540 --> 00:30:49,320 ir jūs galite tai padaryti greitai matematikos. 479 00:30:49,320 --> 00:30:54,990 Ir aš jums pamojuoti savo jėgas toupper, kuris yra beveik tas pats, tai atrodo beveik identiškas. 480 00:30:54,990 --> 00:31:01,900 Toupper atsitinka naudoti arba operatorius, bet greičiau šį vaikiną ir DF. 481 00:31:01,900 --> 00:31:09,300 Ką df? DF? Kas nors? >> [Studentas] 255. 482 00:31:09,300 --> 00:31:12,780 255? Ne 255. , Kad būtų ir toliau. 483 00:31:12,780 --> 00:31:15,210 Mes palikti šį vieną, nes truputį pasimankštinti. 484 00:31:15,210 --> 00:31:23,460 Bet jei jūs einate nuo 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ir tai, kas ateina po 9? 485 00:31:23,460 --> 00:31:26,510 Mes natūra iš dešimtainių skaitmenų, bet šešioliktainis kas ateina po 9? 486 00:31:26,510 --> 00:31:29,510 [Studentas]. >> Taigi, a, b, c, d,. 487 00:31:29,510 --> 00:31:33,470 Galite išsiaiškinti, iš ten kokia bitų d tikrųjų atstovauja modelis. 488 00:31:33,470 --> 00:31:38,850 Ir jei mes padaryti matematiką, mes pamatysime, kad jūs galų gale gauti atgal kaukė yra identiškas. 489 00:31:38,850 --> 00:31:45,580 Tai f, visi 1s, o tai yra d. Taigi df šią kaukę. Gerai. 490 00:31:45,580 --> 00:31:50,980 Ir galiausiai, kad viskas garso super, super techninę, 491 00:31:50,980 --> 00:31:53,840 bet manau, mes norėjau parašyti programa, kuri daro tai. 492 00:31:53,840 --> 00:31:58,960 Leiskite man eiti į priekį ir padaryti dvejetainis, kuris yra į failą pavadinimu binary.c programa. 493 00:31:58,960 --> 00:32:02,050 O dabar leiskite man paleisti dvejetainis ir duok man ne neigiamas sveikasis. 494 00:32:02,050 --> 00:32:03,960 Pradėkime lengva ir įrašykite 0. 495 00:32:03,960 --> 00:32:09,010 Tai dabar yra programa, kuri spausdina savo sveikąjį skaičių dvejetaine sistema. 496 00:32:09,010 --> 00:32:13,470 Taigi, jei aš vėl žaisti šį žaidimą ir įvesti tik 1, turėčiau gauti 32-bit atstovavimą 1. 497 00:32:13,470 --> 00:32:15,490 Jei aš tai padaryti ir vėl su 2, turėčiau gauti, kad. 498 00:32:15,490 --> 00:32:19,310 Jei aš tai padaryti 7, turėčiau gauti keletą 1s pabaigoje ir kt. 499 00:32:19,310 --> 00:32:22,740 Pasirodo, aš paminėti tai, nes su Bitinis operacijas 500 00:32:22,740 --> 00:32:25,490 jūs iš tikrųjų galite padaryti vieną dalyką, taip pat. 501 00:32:25,490 --> 00:32:29,130 Šios kaukės galite sukurti dinamiškai. 502 00:32:29,130 --> 00:32:32,800 Pažvelkite į šį vieną galutinį pavyzdžiui, su Bitinis operacijas. 503 00:32:32,800 --> 00:32:35,490 Čia yra pirmoji dalis kodo, greitai vartotojo numerį, 504 00:32:35,490 --> 00:32:38,130 o taip pat reikalauja, kad jūs suteikiate man ne neigiamas sveikasis. 505 00:32:38,130 --> 00:32:39,780 Taip, kad tarsi senosios mokyklos dalykų. 506 00:32:39,780 --> 00:32:41,980 Bet čia yra kažkas, kad rūšies įdomus. 507 00:32:41,980 --> 00:32:44,910 >> Kaip aš galiu eiti apie spausdinant dvejetainis skaičius? 508 00:32:44,910 --> 00:32:48,970 Aš pirmą kartą pakartoti nuo to, ką į tai, ką? 509 00:32:48,970 --> 00:32:52,270 Kas yra int dydis tipiškai, bent jau prietaiso? >> [Studentas] 4. 510 00:32:52,270 --> 00:32:57,130 Tai 4. Taigi, 4 * 8 yra 32 - 1 yra 31. 511 00:32:57,130 --> 00:33:02,590 Taigi, jei aš pradedu skaičiuoti nuo 31, kuri atstovauja, it turns out, 512 00:33:02,590 --> 00:33:07,630 tik konceptualiai, 31-bitų arba aukščiausios kategorijos bitų, tai čia vaikinas, 513 00:33:07,630 --> 00:33:09,650 kadangi tai bus bitų 0. 514 00:33:09,650 --> 00:33:12,850 Taigi tai yra šiek tiek 01 ... bitų 31. 515 00:33:12,850 --> 00:33:14,950 Taigi, kas yra šis kodas daro? 516 00:33:14,950 --> 00:33:20,140 Pastebėsite tai linijos, net jei ji atrodo paslaptingas, lygiai iteravimu nuo 31 žemyn iki 0. Štai ir viskas. 517 00:33:20,140 --> 00:33:24,530 Taigi dabar įdomiausia dalis turi būti šių 5 eilučių čia. 518 00:33:24,530 --> 00:33:28,110 Atkreipkite dėmesį, kad šioje eilutėje aš skelbiantis kintamasis vadinamas kaukė 519 00:33:28,110 --> 00:33:30,790 turi būti suderinti su mūsų istorija šių geltonų numerių. 520 00:33:30,790 --> 00:33:32,200 Ir tada, kas tai daro? 521 00:33:32,200 --> 00:33:35,720 Tai dar vienas Bitinis operatorius, mes dar nematėte anksčiau, greičiausiai. 522 00:33:35,720 --> 00:33:38,300 Tai Left Shift operatorius. 523 00:33:38,300 --> 00:33:40,060 Šis operatorius daro. 524 00:33:40,060 --> 00:33:44,920 Čia yra skaičius 1, o jei jūs darote i Left Shift Kairysis Shift 525 00:33:44,920 --> 00:33:49,260 ką jūs manote, kad turi daryti poveikį individualiems 1? 526 00:33:49,260 --> 00:33:51,290 Pažodžiui perkelia jį per. 527 00:33:51,290 --> 00:33:57,540 Numeris 1 todėl, jei yra tai, ką jūs turite kairėje ir pradėdami Inicijuojama i iki 31, 528 00:33:57,540 --> 00:34:03,490 kas tai ketinate daryti? Ji ketina priimti šį skaičių 1 ir pereiti 31 vietų čia. 529 00:34:03,490 --> 00:34:06,210 Ir todėl, kad akivaizdu, jokie kiti skaitmenys, kodėl ji, 530 00:34:06,210 --> 00:34:10,350 tas bus pagal nutylėjimą pakeisti 0s. 531 00:34:10,350 --> 00:34:15,120 Taigi, jūs pradėsite su 1 numeriu, kuris, žinoma, atrodo taip - 532 00:34:15,120 --> 00:34:18,659 ir leiskite man atkreipti jį čia centre. 533 00:34:18,659 --> 00:34:22,139 Ir tada, kaip jums perkelti daiktus į kairę, šis vaikinas iš esmės eina šiuo keliu. 534 00:34:22,139 --> 00:34:24,659 Tačiau, kaip greitai, kaip jūs darote, kad 0 bus užpildyti. 535 00:34:24,659 --> 00:34:28,360 Jei jums pereiti antrą kartą, jis eina šiuo keliu, o kitas 0 pasireiškia užpildyti 536 00:34:28,360 --> 00:34:31,000 >> Jums pereiti jį dar kartą ir tada kita 0 pasireiškia užpildyti 537 00:34:31,000 --> 00:34:37,900 Taigi, jei jūs šį 1 << 31 vietų dalykas, jūs galų gale gauti kaukę 538 00:34:37,900 --> 00:34:42,550 , yra 32 simbolių, kairiausias vienas iš kurių yra 1, 539 00:34:42,550 --> 00:34:45,199 visos likusios kurių yra 0. 540 00:34:45,199 --> 00:34:50,880 Ir paaiškėja, kaip panaikinti, perkeliant numerį į kairę, kaip šis 541 00:34:50,880 --> 00:34:53,530 taip pat atsitiktinai, o kartais ir patogiai, 542 00:34:53,530 --> 00:34:57,520 turi daryti tai, ką iki šio skaičiaus? >> [Studentas] padvigubinti. 543 00:34:57,520 --> 00:35:00,980 Padvigubinti, nes kiekvienas Skilčių - 1s vieta, 2s vieta, 4s vieta, 544 00:35:00,980 --> 00:35:05,030 8s vieta, 16 vieta - they're visą dubliavimas, kaip jūs einate į kairę. 545 00:35:05,030 --> 00:35:09,500 Arba, tiksliau, kai jums perkelti 1s jūs ketinate baigti padvigubinti skaičiaus vertę. 546 00:35:09,500 --> 00:35:12,070 Jūs galite baigti daryti įdomias transformacijas skaitmenų 547 00:35:12,070 --> 00:35:15,640 perkeliant viską tokiu būdu jėgų, 2. 548 00:35:15,640 --> 00:35:17,150 Taigi, kaip tai veikia? 549 00:35:17,150 --> 00:35:22,580 Tai tada duoda man kaukę, kad viskas, išskyrus 1 būtent toje vietoje, noriu, kad jis 0s, 550 00:35:22,580 --> 00:35:27,920 ir tada ši išraiška, kuri yra pavogta iš toupper.c, 551 00:35:27,920 --> 00:35:31,770 tik sakau, skaičių n, kad vartotojas turi įvesti, 552 00:35:31,770 --> 00:35:34,730 "Ir" su ta kaukė, ir tai, ką jūs ketinate gauti? 553 00:35:34,730 --> 00:35:39,200 Jūs ketinate gauti 1, jei yra 1, tame kaukėtas vietoje, 554 00:35:39,200 --> 00:35:41,570 ar jūs ketinate gauti 0, jei ten nėra. 555 00:35:41,570 --> 00:35:44,370 Ir taip ši programa iš tikrųjų jis turi kilpą, 556 00:35:44,370 --> 00:35:48,340 ir jis sukuria kaukę su 1 čia, tada 1 čia, tada čia 1 557 00:35:48,340 --> 00:35:52,950 ir ji naudoja šią Bitinis ir Trick pasakyti, yra 1 bitas į vartotojo įvestį čia? 558 00:35:52,950 --> 00:35:59,220 >> Ar yra 1 bitas vartotojo įvesties čia? Ir jei taip, pažodžiui spausdinti 1, kitas spausdinti 0. 559 00:35:59,220 --> 00:36:03,780 Mes tai darome su int tik todėl, kad kodėl mes darome 32 bitus, o ne 8, 560 00:36:03,780 --> 00:36:06,900 bet tai, ką mes įdiegėme tada tai Bitinis Ir tai Bitinis ARBA 561 00:36:06,900 --> 00:36:10,450 ir tai Left Shift operatorius, kuris ne dažnai siaubingai naudingas, 562 00:36:10,450 --> 00:36:12,230 tačiau paaiškėja, jie gali būti. 563 00:36:12,230 --> 00:36:16,560 Iš tiesų, jei jums buvo sudaryti kažką panašaus į loginę masyvo 564 00:36:16,560 --> 00:36:21,260 tiesiog atstovauti true arba false, manau, kad jūs norėjo sekti, ar 565 00:36:21,260 --> 00:36:24,630 kambarys pilnas iš 300 studentų yra, 566 00:36:24,630 --> 00:36:29,420 jums gali paskelbti, tipo 300 dydžio masyvas, bool, kad jūs gaunate 300 bools, 567 00:36:29,420 --> 00:36:33,090 ir jūs galite nustatyti kiekviena tiesa, jei kas nors čia ir false kitaip. 568 00:36:33,090 --> 00:36:37,550 Kodėl taip yra, kad duomenų struktūros vaizdas neefektyvus? 569 00:36:39,370 --> 00:36:44,800 Kas blogai apie tai duomenų struktūra, 300 bools masyvo dizainas? 570 00:36:46,190 --> 00:36:49,600 Kas yra bool, iš tiesų, po kapotu? 571 00:36:49,600 --> 00:36:52,310 Tai taip pat yra kažkas, kad gali būti nesusipažinę. 572 00:36:52,310 --> 00:36:53,720 Pasirodo, ten yra ne bool. 573 00:36:53,720 --> 00:36:56,620 Atsimenu, mes tarsi sukurta, kad su cs50.h failą, 574 00:36:56,620 --> 00:36:58,630 , kuri pati apima standartinį Bool. 575 00:36:58,630 --> 00:37:00,930 C rūšies kvailas, nors, kai jis ateina į Bool. 576 00:37:00,930 --> 00:37:04,880 Jis naudoja 8 bitus kiekvienas bool, kuris yra visiškai kainuojančio 577 00:37:04,880 --> 00:37:09,040 nes akivaizdu, kiek bitų tu turi bool? Tik 1. 578 00:37:09,040 --> 00:37:13,190 Taigi paaiškėja, kad, jei dabar jūs turite galimybę su Bitinis operatorių 579 00:37:13,190 --> 00:37:17,760 manipuliuoti atskirus bitus net ir char, net vieną baitą, 580 00:37:17,760 --> 00:37:21,380 it turns out, gali sumažėti atminties reikia vaizduoti kažką kvailas 581 00:37:21,380 --> 00:37:25,490 kaip tą lankomumo stiliaus duomenų struktūros iš koeficiento 8. 582 00:37:25,490 --> 00:37:29,820 Vietoj to, naudojant 8 bitų atstovauti true arba false, galima tiesiog naudoti vieną 583 00:37:29,820 --> 00:37:34,500 naudojant vieną baitą visų aštuonių studentų į klasę 584 00:37:34,500 --> 00:37:41,990 ir perjungti 0-1 individualius bitų naudojant šių žemo lygio triukų rūšių. 585 00:37:43,850 --> 00:37:49,460 Kad tikrai nutraukti energijos. Ar yra kokių nors klausimų apie Bitinis operacijas? 586 00:37:49,460 --> 00:37:52,710 >> Taip. >> [Studentas] Ar yra išimtinė arba operatorius? 587 00:37:52,710 --> 00:37:56,440 Taip. Yra išimtinė arba operatorius, kad atrodo taip, ^, morkos simbolis, 588 00:37:56,440 --> 00:38:02,070 , o tai reiškia tik pirmas dalykas, ar antras dalykas, gali būti, kad išėjimo signalas 1 1. 589 00:38:02,070 --> 00:38:07,750 Yra taip pat ne, ~, kuris leis jums apversti 0 iki 1 arba atvirkščiai, taip pat. 590 00:38:07,750 --> 00:38:11,600 Ir ten pat teisę operatorius keičiamas, >>, kuris yra matėme priešais. 591 00:38:11,600 --> 00:38:13,850 Gerai. Paimkime dalykų į aukštesnį lygį. 592 00:38:13,850 --> 00:38:16,770 Mes pradėjome kalbėti apie tekstą ir tada jį suglaudinti, 593 00:38:16,770 --> 00:38:19,650 ir sudaro su mažiau bitų tekstą; 594 00:38:19,650 --> 00:38:22,890 mes kalbėjome šiek tiek apie tai, kaip mes dabar gali pradėti manipuliuoti dalykų, dėl Bitinis lygiu. 595 00:38:22,890 --> 00:38:26,640 Tegul dabar padidinti atgal iki 10.000 pėdų atstovavimo 596 00:38:26,640 --> 00:38:29,250 daugiau sudėtingų dalykų, pavyzdžiui, grafika. 597 00:38:29,250 --> 00:38:32,950 Čia mes turime su Vokietijos vėliava, čia mes turime vieną Prancūzijos. 598 00:38:32,950 --> 00:38:36,350 Tai gali būti atstovaujama failų formatų, kuriuos gali žinoti - Gif, pavyzdžiui. 599 00:38:36,350 --> 00:38:40,030 Jei jūs kada nors matė vaizdą internete, kad baigiasi. Gif, 600 00:38:40,030 --> 00:38:43,000 tai Graphics Interchange Format. 601 00:38:43,000 --> 00:38:47,530 Šios dvi vėliavas čia Rūšiuoti paskolinti save suspaudimo 602 00:38:47,530 --> 00:38:52,050 Kas galbūt akivaizdžios priežasties? >> [Nesigirdi studentas atsakas] 603 00:38:52,050 --> 00:38:53,440 Yra daug pasikartojimų, tiesa? 604 00:38:53,440 --> 00:38:57,270 Kad galėtumėte siųsti Vokietijos vėliava, galvoti apie tai, kaip vaizdas ekrane 605 00:38:57,270 --> 00:38:59,030 atsarginę savo Scratch dienų. 606 00:38:59,030 --> 00:39:02,380 Jūs tikriausiai pamenate, kad yra atskirų taškų ar taškų, kurie sudaro vaizdą. 607 00:39:02,380 --> 00:39:06,650 >> Yra visa eilė juodų taškelių, o kita visa eilė juodų taškelių. 608 00:39:06,650 --> 00:39:10,110 Yra eilių juodų taškų, kad mes galėtume pamatyti, jei mes tikrai Mastelis krūva, 609 00:39:10,110 --> 00:39:13,370 panašiai kaip, kai mes Mastelis Rob veido Photoshop. 610 00:39:13,370 --> 00:39:15,500 Kuo greičiau mes turime giliau ir giliau ir giliau į atvaizdo, 611 00:39:15,500 --> 00:39:19,990 jūs pradėjote matyti pixelation, visi kvadratų, kad šiuo atveju sudaro savo akis. 612 00:39:19,990 --> 00:39:24,130 Čia tas pats sandoris. Jei mes Mastelis gana didelis, jums reikės atskirų taškų. 613 00:39:24,130 --> 00:39:27,110 Na, tai yra rūšies bitų švaistymas. 614 00:39:27,110 --> 00:39:32,120 , Jei trečdalis vėliava yra juoda ir trečdalis vėliava yra geltona ir tt, 615 00:39:32,120 --> 00:39:34,860 kodėl mes negalime kažkaip suspausti šią vėliavą? 616 00:39:34,860 --> 00:39:39,560 Ir net Prancūzijos vėliava gali būti suspausta, nors modelis yra šiek tiek kitokia. 617 00:39:39,560 --> 00:39:44,120 Pasirodo, GIF failo formatas yra lossless suspaudimo formatas, 618 00:39:44,120 --> 00:39:48,420 o tai reiškia, galite imtis vaizdą, pavyzdžiui, Vokietijos vėliava, 619 00:39:48,420 --> 00:39:53,540 jūs galite išmesti savo bitų daug neprarandant kokybės. 620 00:39:53,540 --> 00:39:55,340 Tai Priešingai kažką panašaus JPEG, 621 00:39:55,340 --> 00:39:57,050 , su kuriais daugelis iš mūsų tikriausiai yra labiau susipažinę. 622 00:39:57,050 --> 00:39:59,000 "Facebook" nuotraukos ir "Flickr" nuotraukų ir panašūs 623 00:39:59,000 --> 00:40:02,200 beveik visada išsaugoti kaip JPEG, kai jie įkėlė 624 00:40:02,200 --> 00:40:08,100 bet JPEG praradimu - praradimu - formatas, kuriuo išmesti bitai 625 00:40:08,100 --> 00:40:10,430 bet jūs taip pat išmetame kokybę. 626 00:40:10,430 --> 00:40:13,890 Ir todėl, jei jūs suspausti nuotraukas su Photoshop arba įkelti juos į "Facebook" 627 00:40:13,890 --> 00:40:15,580 arba juos tikrai Crappy telefonas, 628 00:40:15,580 --> 00:40:19,510 žinote, kad vaizdas pradeda gauti labai suteptas ir pixelated, 629 00:40:19,510 --> 00:40:22,290 ir kad todėl, kad ji yra suspausta iki kompiuterio ar telefono 630 00:40:22,290 --> 00:40:24,550 tiesiog mesti informaciją iš karto. 631 00:40:24,550 --> 00:40:28,500 Bet GIF yra nuostabi, kad ji gali naudoti mažiau bitų nei jis gali pagal nutylėjimą 632 00:40:28,500 --> 00:40:30,750 neprarandant jokios informacijos. 633 00:40:30,750 --> 00:40:32,410 >> Ir tai iš esmės daro taip. 634 00:40:32,410 --> 00:40:38,740 , O ne parduotuvėje, pavyzdžiui, BMP failą RGB trigubas Juodas, Juodas, Juodas, Juodas, 635 00:40:38,740 --> 00:40:42,570 juoda, juoda, juoda, juoda, juoda, juoda, juoda, juoda ir tt, 636 00:40:42,570 --> 00:40:45,640 o, GIF formatu ketina pasakyti, "Juoda" 637 00:40:45,640 --> 00:40:48,330 ir tada ", pakartokite tai 100 kartų", ar kažkas panašaus. 638 00:40:48,330 --> 00:40:52,280 "Juoda, pakartokite tai 100 kartų, juodos, pakartokite tai 100 kartų ..." 639 00:40:52,280 --> 00:40:54,530 "Geltona, pakartokite tai 100 kartų." 640 00:40:54,530 --> 00:40:57,200 Ir taip ji prisimena, iš esmės, kairiausias pikselių 641 00:40:57,200 --> 00:41:02,160 ir tada koduoja kažkaip vėl ir vėl kartoti, kad pikselių sąvoką. 642 00:41:02,160 --> 00:41:06,110 Taigi, GIF tada gali suspausti neprarandant jokios informacijos. 643 00:41:06,110 --> 00:41:09,510 Bet jei jūs turėjo atspėti, jei tai yra algoritmas, kuris Gif naudojimą, 644 00:41:09,510 --> 00:41:13,180 , kuris iš šių vėliavų, net jei jie atrodo vienodi dydžio, 645 00:41:13,180 --> 00:41:19,620 bus mažesnis, kai diske saugomas GIF? >> [Studentas] Vokietija. 646 00:41:19,620 --> 00:41:21,660 Vokietija bus mažesni? Kodėl? 647 00:41:21,660 --> 00:41:26,620 [Studentas], nes galite tai pakartoti, daug, daug kartų horizontaliai 648 00:41:26,620 --> 00:41:29,010 ir tada galite pakartoti dar kartą. >> Būtent. 649 00:41:29,010 --> 00:41:32,020 Nes žmonės, kurie išrado GIF tiesiog rūšies savavališkai nusprendė 650 00:41:32,020 --> 00:41:36,040 kad kartojimas bus suderinti horizontaliai, o ne į šonus. 651 00:41:36,040 --> 00:41:40,900 Yra daug daugiau kartojimas šonus čia nei su Prancūzijos vėliava Vokietijos vėliava. 652 00:41:40,900 --> 00:41:44,430 Taigi, jei mes iš tikrųjų atverti mano kietajame diske aplanką, kuriame yra šių GIF, 653 00:41:44,430 --> 00:41:51,920 jūs iš tikrųjų galite pamatyti, kad čia yra Vokietijos vėliava 2 kilobaitai ir Prancūzijos yra 4 kilobaitai. 654 00:41:51,920 --> 00:41:54,080 Taip atsitinka būti sutapimas, kad vienas yra du kartus kito, 655 00:41:54,080 --> 00:41:57,960 bet tai iš tikrųjų, kad Prancūzijos vėliava yra daug didesnis. 656 00:41:57,960 --> 00:42:01,250 >> Net jei mes kalbame čia apie grafika, gali kreiptis į tas pačias idėjas 657 00:42:01,250 --> 00:42:05,150 ne dalykų, pavyzdžiui, vėliavomis, bet vaizdai, kurie yra šiek tiek sudėtingesnis. 658 00:42:05,150 --> 00:42:08,170 Pavartojus per nuotrauką obuolių, tikrai yra daug dubliavimo, 659 00:42:08,170 --> 00:42:11,040 taip kažkaip galėtume prisiminti, kad numatytasis fonas yra mėlynas 660 00:42:11,040 --> 00:42:13,230 o ne, kaip dešinėje turima informacija rodo, 661 00:42:13,230 --> 00:42:16,830 turite prisiminti, kad šioje nuotraukoje kiekvieno vaizdo taško spalvą. 662 00:42:16,830 --> 00:42:21,060 Taigi, mes galime mesti bitai nuvyksite neprarandant informacijos. 663 00:42:21,060 --> 00:42:23,340 Apple "vis dar atrodo taip pat. 664 00:42:23,340 --> 00:42:27,510 Šiame pavyzdyje čia, jūs galite pamatyti, kas vyksta filme. 665 00:42:27,510 --> 00:42:31,970 Tai sudaro senosios mokyklos kino ritės, viršutiniame atvaizdą ten 666 00:42:31,970 --> 00:42:36,900 turite vairuoti namo praeityje RV ir medis. 667 00:42:36,900 --> 00:42:42,130 Ir, kad van diskai praeityje iš kairės į dešinę, kas akivaizdžiai nėra kinta? 668 00:42:42,130 --> 00:42:45,320 Namas yra nesiruošia niekur, ir medis nesiruošia niekur. 669 00:42:45,320 --> 00:42:47,700 Vienintelis dalykas, kuris juda yra šiuo atveju van. 670 00:42:47,700 --> 00:42:51,650 Taigi, kaip Bendroji informacija Nepakitęs rodo, ką jūs galite padaryti filmus 671 00:42:51,650 --> 00:42:56,530 panašiai tiesiog išmesti informaciją, kuri nekeičia tarp rėmų. 672 00:42:56,530 --> 00:42:58,900 Tai paprastai žinomas kaip interframe suspaudimo 673 00:42:58,900 --> 00:43:02,120 , pagal kurią, jei šis rėmas atrodo beveik identiška šiai, 674 00:43:02,120 --> 00:43:05,390 tegul ne vargintis saugoti diske bet identiškos informacijos 675 00:43:05,390 --> 00:43:09,250 šių tarpinių kadrų, galime naudoti tik vieną kartą, o pagrindinius rėmus 676 00:43:09,250 --> 00:43:13,420 , kad iš tikrųjų, laikyti šią informaciją Gausiai lygiai taip pat šiek tiek normalumas patikrinti. 677 00:43:13,420 --> 00:43:18,620 >> Priešingai, kitas požiūris į suspaudžiant vaizdo šiame antrosios ir mažesnė, pavyzdžiui čia, 678 00:43:18,620 --> 00:43:23,970 kur, o ne parduotuvėje 30 kadrų, kodėl ne jūs tiesiog laikyti 15 kadrų per sekundę, o ne? 679 00:43:23,970 --> 00:43:27,070 , O ne filmo natūra teka gražiai, puikiai, 680 00:43:27,070 --> 00:43:30,060 tai gali atrodyti kaip ji mikčiojimas šiek tiek, šiek tiek senas mokyklos, 681 00:43:30,060 --> 00:43:37,190 tačiau grynasis poveikis bus naudoti daug mažiau bitų nei priešingu atveju gali būti būtina. 682 00:43:37,190 --> 00:43:39,240 Taigi, kur gi tai tada palikti? 683 00:43:39,240 --> 00:43:41,700 Kad buvo panaikinti tiek kur kitur, galite eiti su suspaudimo. 684 00:43:41,700 --> 00:43:45,140 Apie tai daugiau, imtis klasės, kaip CS175 čia. 685 00:43:45,140 --> 00:43:46,990 Štai dar vienas pavyzdys, kaip vaizdo. 686 00:43:46,990 --> 00:43:49,190 Jei bitė yra vienintelis dalykas, juda, 687 00:43:49,190 --> 00:43:51,790 jūs galite iš tikrųjų išmesti informaciją tose vidurinių rėmų 688 00:43:51,790 --> 00:43:55,260 nes gėlių ir dangus ir lapai nesikeičia. 689 00:43:55,260 --> 00:43:57,960 Bet tegul dabar apsvarstyti vieną dalyką. 690 00:43:57,960 --> 00:44:03,890 Per ateinančius 5 minučių mes palikti C už amžinai paskaitos? Taip. Ne psets nors. 691 00:44:03,890 --> 00:44:10,210 Paskutinis pasakojimas apie C ir tada mes gauname labai seksualus stuff 692 00:44:10,210 --> 00:44:13,870 dalyvauja HTML ir web ir woo-hoo. Gerai. 693 00:44:13,870 --> 00:44:16,050 Čia mes einame. Štai motyvacija. 694 00:44:16,050 --> 00:44:20,020 Pasirodo, visą šį laiką, kai mes buvo raštu programas, mes paleisti Apsukite metalinis garsas. 695 00:44:20,020 --> 00:44:23,890 Ir Apsukite metalinis garsas, mes pasakyti, nes pirmą savaitę beveik, mano šaltinio kodą 696 00:44:23,890 --> 00:44:25,740 ir paverčia jį į objekto kodo. 697 00:44:25,740 --> 00:44:28,540 Tai užtrunka C ir konvertuoja jį į 0s ir 1s. 698 00:44:28,540 --> 00:44:32,150 Aš rūšies gulėti jums per kelias savaites, nes tai ne visai taip paprasta, kaip kad. 699 00:44:32,150 --> 00:44:36,750 >> Yra daug daugiau vyksta po gaubtu, kai paleidžiate programą panašaus Apsukite metalinis garsas. 700 00:44:36,750 --> 00:44:39,560 Sudarant programą iš tiesų, iš tiesų gali būti apibendrinti 701 00:44:39,560 --> 00:44:42,210 kaip jūs tikriausiai pamenate, kad Rob vaizdo kompiliatorius, 702 00:44:42,210 --> 00:44:47,580 į šių 4 žingsnių: išankstinis apdorojimas, sudarant pati, montavimas, ir susiejimas. 703 00:44:47,580 --> 00:44:51,950 Bet mes klasėje ir dauguma žmonių visame pasaulyje paprastai apibendrinti visus šiuos veiksmus 704 00:44:51,950 --> 00:44:54,410 kaip tik "kompiliavimas." 705 00:44:54,410 --> 00:44:58,070 Tačiau jei mes pradėsime su šaltinio kodu, kaip šis, priminti, tai galbūt paprasčiausias C programa 706 00:44:58,070 --> 00:45:03,530 parašiau iki šiol, priminti, kad kai surinkti ji baigiasi atrodo taip. 707 00:45:03,530 --> 00:45:07,310 Bet ten iš tikrųjų tarpinis žingsnis, ir šie veiksmai yra taip. 708 00:45:07,310 --> 00:45:10,750 Pirmasis yra tai, ką pačiame viršuje tai ir dauguma mūsų programas, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Ką # include padaryti už mus? 711 00:45:17,210 --> 00:45:24,150 Jis į mano bylą, kad gana daug kopijos ir pastos stdio.h turinys kodėl? 712 00:45:24,150 --> 00:45:27,220 Kodėl aš priežiūrą apie turinį stdio.h? Kas ten interesų? 713 00:45:27,220 --> 00:45:32,310 Printf deklaracija, jos prototipas, kad kompiliatorius žino, ką aš turiu galvoje 714 00:45:32,310 --> 00:45:34,900 kai aš paminėti šią funkciją printf. 715 00:45:34,900 --> 00:45:39,390 Taigi 1 žingsnį rengiant išankstinio apdorojimo, kuriuo kaip Apsukite metalinis garsas programa 716 00:45:39,390 --> 00:45:43,450 arba kai pagalbininkas programa, kuri Apsukite metalinis garsas ateina su nuskaito kodą iš viršaus į apačią, 717 00:45:43,450 --> 00:45:47,740 kairės į dešinę, ir bet kada, jis mato # simbolį kaip įtraukti raktinių žodžių, 718 00:45:47,740 --> 00:45:53,980 ji atlieka šią operaciją, kopijuoti ir įklijuoti į savo failą šiuo atveju stdio.h. 719 00:45:53,980 --> 00:45:55,510 Tai 1 žingsnis. 720 00:45:55,510 --> 00:45:59,620 Tada jūs turite daug didesnę C bylą dėl didžiulio kopijuoti, įklijuoti darbo, kad tik atsitiko. 721 00:45:59,620 --> 00:46:01,710 >> 2 žingsnis Dabar yra kompiliavimas. 722 00:46:01,710 --> 00:46:04,880 Tačiau paaiškėja, sudarant trunka šaltinio kodą, kuris atrodo taip 723 00:46:04,880 --> 00:46:08,160 ir paverčia jį į kažką, kad atrodo taip, 724 00:46:08,160 --> 00:46:12,560 tiems, kurie susipažinę yra vadinama? >> [Studentas] asamblėja. >> Asemblerio kalba. 725 00:46:12,560 --> 00:46:16,700 Iš tikrųjų tai yra kažkas, jei vartojate CS61 jums pasinerti į išsamiau. 726 00:46:16,700 --> 00:46:22,380 Ji yra maždaug taip arti, kaip jūs galite gauti raštu 0s ir 1s save 727 00:46:22,380 --> 00:46:25,850 bet raštu dalykų taip, kad vis dar leidžia bent šiek tiek prasmės. 728 00:46:25,850 --> 00:46:30,760 Tai yra mašina instrukcijos, ir jei mes slinkite žemyn iki pagrindinės funkcijos, 729 00:46:30,760 --> 00:46:35,470 pastebėsite, kad yra tai stumti nurodymas, perkelti mokymą, atimti mokymą, 730 00:46:35,470 --> 00:46:38,550 skambinti pamokymų ir kt. 731 00:46:38,550 --> 00:46:42,930 Kai išgirsite, kad jūsų kompiuteris turi "Intel Inside, 732 00:46:42,930 --> 00:46:46,180 turite Intel CPU jūsų Mac arba PC, ką tai reiškia? 733 00:46:46,180 --> 00:46:51,200 CPU yra integruota įmonės, pavyzdžiui, "Intel suprasti tam tikras komandas. 734 00:46:51,200 --> 00:46:55,770 Jie neturi jokio supratimo, kokių funkcijų, pavyzdžiui, apsikeitimo sandorio arba pagrindinių per se, 735 00:46:55,770 --> 00:47:00,060 bet jie žinoti, ką labai žemo lygio instrukcijos, kaip pridėti, atimti, stumti, 736 00:47:00,060 --> 00:47:02,430 perkelti, ir kt. 737 00:47:02,430 --> 00:47:06,170 Taigi, kai jūs surinkti C kodą į Asemblerio kalba, 738 00:47:06,170 --> 00:47:11,820 jūsų labai patogi atrodantis kodas yra konvertuojamas į kažką, kad atrodo taip, 739 00:47:11,820 --> 00:47:21,670 kad pažodžiui juda baitų arba 4 baitų aplink tokių mažų vienetų ir iš procesoriaus. 740 00:47:21,670 --> 00:47:26,820 Bet pagaliau, kai Apsukite metalinis garsas yra pasirengusi priimti šį atstovavimą savo programą 741 00:47:26,820 --> 00:47:30,940 į 0s ir 1s, tada žingsnelis, vadinamas montavimas atsitinka, 742 00:47:30,940 --> 00:47:33,850 o tai vėl viskas vyksta akimoju, kai veikia Apsukite metalinis garsas. 743 00:47:33,850 --> 00:47:39,300 Mes pradėti čia, išveda failą panašaus į tai, ir tada ji konvertuoja jį į šių 0s ir 1s. 744 00:47:39,300 --> 00:47:42,000 Ir, jei norite grįžti tam tikru momentu ir realiai pamatyti kaip tai veikia praktikoje, 745 00:47:42,000 --> 00:47:48,220 jei aš einu į hello1.c tai yra viena iš pirmųjų programų, mes pažvelgė - 746 00:47:48,220 --> 00:47:53,710 paprastai mes sudaryti šį Apsukite metalinis garsas hello1.c, o tai suteikia mums a.out. 747 00:47:53,710 --> 00:47:59,890 Tačiau jeigu jums, o ne suteikti jai-S vėliava, ką gausite hello1.s 748 00:47:59,890 --> 00:48:02,750 , ir jūs iš tikrųjų matyti Asemblerio kalba. 749 00:48:02,750 --> 00:48:05,750 >> Darau tai labai trumpa programa, tačiau, jei jūs einate atgal scramble 750 00:48:05,750 --> 00:48:08,740 panaudoti ar bet kokia programa jūs parašėte ir tiesiog iš smalsumo 751 00:48:08,740 --> 00:48:13,240 norite pamatyti, ką ji iš tikrųjų atrodo, kas iš tikrųjų įtraukti į procesoriaus, 752 00:48:13,240 --> 00:48:15,700 galite naudoti, kad, nepriklausomai nuo laivo vėliavos Apsukite metalinis garsas. 753 00:48:15,700 --> 00:48:17,770 Bet tada galiausiai, vis dar vienas kabliuko. 754 00:48:17,770 --> 00:48:21,810 Čia yra 0s ir 1s, kad atstovauti savo įgyvendinimą Hello, world. 755 00:48:21,810 --> 00:48:25,530 Bet aš naudojamas kažkieno funkciją savo programą. 756 00:48:25,530 --> 00:48:28,710 Taigi, nors procesas buvo aš hello.c 757 00:48:28,710 --> 00:48:34,280 jis bus surinkti į surinkimo kodą, ir tada ji bus surinkti į 0s ir 1s, 758 00:48:34,280 --> 00:48:37,460 tik 0s ir 1s, kurie yra išvedamas Šiuo metu 759 00:48:37,460 --> 00:48:40,270 yra tas, kad rezultatai iš mano kodas. 760 00:48:40,270 --> 00:48:44,400 Bet asmuo, kuris parašė printf, jie prieš 20 metų parengė savo kodą 761 00:48:44,400 --> 00:48:47,000 ir jis jau įdiegtas kažkur ant prietaiso, 762 00:48:47,000 --> 00:48:51,610 todėl mes kažkaip sujungti jo su mano 0s ir 1s 0s ir 1s, 763 00:48:51,610 --> 00:48:56,160 ir tai veda mus į 4-ojo ir galutinis žingsnis kaupti, žinomas kaip susiejimas. 764 00:48:56,160 --> 00:48:58,680 Taigi kairėje pusėje, mes turime tą patį vaizdą, kaip ir anksčiau: 765 00:48:58,680 --> 00:49:02,580 hello.c tampa surinkimas kodas tampa 0s ir 1s. 766 00:49:02,580 --> 00:49:05,960 Bet priminti, kad aš naudojo standartinę I / O lib mano kodas, 767 00:49:05,960 --> 00:49:10,350 , o tai reiškia, kad kažkur kompiuteryje yra failas, kuris vadinamas stdio.c 768 00:49:10,350 --> 00:49:13,980 arba bent jau parengė jos redakcija, nes kažkas prieš keletą metų 769 00:49:13,980 --> 00:49:18,530 parengė stdio.c į surenkant kodą ir tada visa krūva 0s ir 1s. 770 00:49:18,530 --> 00:49:21,130 Tai yra tai, kas žinoma kaip statinis ar dinaminis biblioteka. 771 00:49:21,130 --> 00:49:23,350 Tai kai failas sėdi kažkur į prietaisą. 772 00:49:23,350 --> 00:49:28,710 >> Bet galiausiai, aš imtis savo 0s ir 1s ir to asmens 0s ir 1s 773 00:49:28,710 --> 00:49:32,760 ir kažkaip sujungti juos, tiesiog juos suderinti 0s ir 1s 774 00:49:32,760 --> 00:49:37,900 į vieną failą pavadinimu a.out arba HELLO1 ar kokia Aš pakvietė Mano programos 775 00:49:37,900 --> 00:49:43,320 taip, kad galutinis rezultatas turi visus 1s ir 0s, turėtų rašyti savo programą. 776 00:49:43,320 --> 00:49:45,660 Taigi šį semestrą visą šį laiką, kai buvote naudojant Apsukite metalinis garsas 777 00:49:45,660 --> 00:49:48,750 ir dar neseniai padaryti norint paleisti Apsukite metalinis garsas, 778 00:49:48,750 --> 00:49:53,580 visus šiuos veiksmus buvo vyksta Rūšiuoti akimirksniu, bet labai sąmoningai. 779 00:49:53,580 --> 00:49:57,830 Ir todėl, jei jūs ir toliau informatikos, ty CS61, 780 00:49:57,830 --> 00:50:00,850 tai sluoksnis, kad jūs ir toliau žievelės atgal ne ten 781 00:50:00,850 --> 00:50:06,980 kalbame apie efektyvumą, užtikrinti saugumą, ir šių žemesnio lygio informacijos. 782 00:50:06,980 --> 00:50:09,220 Bet su tuo, mes ruošiamės palikti už C. 783 00:50:09,220 --> 00:50:11,420 Eikime į priekį ir imtis mūsų 5-minučių pertrauką, 784 00:50:11,420 --> 00:50:14,190 ir kai mes einame atgal: internetas. 785 00:50:17,280 --> 00:50:19,170 Gerai. Mes atgal. 786 00:50:19,170 --> 00:50:23,590 Dabar mes pradedame ieškoti ne tik HTML, nes, kaip pamatysite, 787 00:50:23,590 --> 00:50:26,050 HTML pati iš tiesų yra gana paprasta 788 00:50:26,050 --> 00:50:29,270 bet tikrai ne interneto programavimo apskritai, tinklų kūrimas, apskritai, 789 00:50:29,270 --> 00:50:31,770 ir kaip visos šios technologijos ateiti kartu 790 00:50:31,770 --> 00:50:35,400 leisti mums sukurti daug sudėtingesnes programas ant interneto 791 00:50:35,400 --> 00:50:38,690 nei iki šiol mums pavyko šių juoda ir balta langai. 792 00:50:38,690 --> 00:50:42,140 Iš tiesų, nors šį semestrą taško mes santykinai mažiau laiko praleisti 793 00:50:42,140 --> 00:50:46,200 PHP, HTML, CSS, JavaScript, SQL ir daugiau, 794 00:50:46,200 --> 00:50:48,480 dauguma studentų, galų gale daryti galutinius projektus, kurie yra žiniatinklio 795 00:50:48,480 --> 00:50:51,230 nes kaip pamatysite, fonas dabar jūs turite C 796 00:50:51,230 --> 00:50:54,450 yra labai daug šių aukštesnio lygio kalbų. 797 00:50:54,450 --> 00:50:56,800 >> Ir kaip jums pradėti galvoti apie savo galutinį projektą, 798 00:50:56,800 --> 00:50:59,940 , kuri, panašiai kaip problemą, 0, kur buvo skatinami 799 00:50:59,940 --> 00:51:02,160 padaryti, dauguma nieko jums įdomūs nulio 800 00:51:02,160 --> 00:51:05,790 galutinis projektas yra jūsų galimybė imtis savo naujai atrastą žinių ir išminties C 801 00:51:05,790 --> 00:51:09,850 arba PHP arba JavaScript ar pan iš už nugaros 802 00:51:09,850 --> 00:51:12,330 ir sukurti jūsų pačių programinė įranga gali matyti visas pasaulis. 803 00:51:12,330 --> 00:51:17,770 Ir sėklos jums idėjų, žinau, kad jūs galite galvą čia, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Kiekvienais metais, mes prašyti idėjų iš dėstytojų ir kitų darbuotojų bei studentų grupės dėl kampusie 805 00:51:21,800 --> 00:51:27,330 tiesiog pateikti savo idėjų, įdomių dalykų, kad gali būti išspręsta naudojant kompiuterius, 806 00:51:27,330 --> 00:51:29,860 naudojant svetainių, naudojant programinę įrangą. 807 00:51:29,860 --> 00:51:32,360 Taigi, jei esate stengiasi sugalvoti su savo idėja, 808 00:51:32,360 --> 00:51:35,790 visomis priemonėmis slinkti idėjų, šiais metais ir paskutinis. 809 00:51:35,790 --> 00:51:39,990 Tai yra visiškai gerai spręsti, kad buvo kovojama prieš projektą. 810 00:51:39,990 --> 00:51:44,540 Mes matėme daug apps už tai skalbinių statusą miesteliu, 811 00:51:44,540 --> 00:51:47,000 valgomojo salėje meniu naršyti daug apps, 812 00:51:47,000 --> 00:51:49,540 daug apps kursų kataloge naršyti ir panašiai. 813 00:51:49,540 --> 00:51:53,680 Ir iš tiesų, būsimos paskaitos ir ateityje seminarų, 814 00:51:53,680 --> 00:51:57,750 mes supažindins Jus su kai viešai prieinama API, tiek komerciškai prieinamas 815 00:51:57,750 --> 00:52:02,520 taip pat čia galima nuo CS50 miesteliu, kad jūs turite prieigą prie duomenų 816 00:52:02,520 --> 00:52:04,910 ir tada gali padaryti įdomių dalykų su juo. 817 00:52:04,910 --> 00:52:09,380 Taigi daugiau dėl galutinių projektų per kelias dienas, kai mes paleisti specifikaciją, 818 00:52:09,380 --> 00:52:12,990 bet dabar, žinau, kad jūs galite dirbti solo arba su vienu ar dviem draugams 819 00:52:12,990 --> 00:52:16,010 dauguma bet jus sudominti projekto. 820 00:52:16,010 --> 00:52:18,080 Internetas. 821 00:52:18,080 --> 00:52:22,300 Eiti į priekį ir išsitraukti savo nešiojamąjį kompiuterį, jūs einate į facebook.com pirmą kartą, 822 00:52:22,300 --> 00:52:27,020 nėra prisijungęs neseniai, ir paspauskite Enter. Kas tiksliai vyksta? 823 00:52:27,020 --> 00:52:30,150 >> Kai paspausite Įveskite savo kompiuteryje, visa krūva žingsnių 824 00:52:30,150 --> 00:52:32,600 pradėti tarsi stebuklingai vyksta. 825 00:52:32,600 --> 00:52:35,960 Taigi, jūs čia į kairę, interneto serverio, pavyzdžiui, "Facebook" yra dešinėje, 826 00:52:35,960 --> 00:52:42,500 ir kažkaip jūs naudojate šią kalbą, vadinamas HTTP Hiperteksto perdavimo protokolas. 827 00:52:42,500 --> 00:52:46,770 HTTP yra ne programavimo kalba. Tai daugiau protokolas. 828 00:52:46,770 --> 00:52:52,310 Tai yra konvencijų rinkinys, kad interneto naršyklė ir interneto serverių naudoti, kai intercommunicating. 829 00:52:52,310 --> 00:52:54,360 Ir ką tai reiškia, kaip nurodyta toliau. 830 00:52:54,360 --> 00:52:56,790 Panašiai kaip ir realiame pasaulyje, mes turime šias konvencijas 831 00:52:56,790 --> 00:53:00,140 kur, jei jūs patenkinti kai pirmą kartą žmogų, jei jūs neprieštaraujate humoring mane čia, 832 00:53:00,140 --> 00:53:03,980 Aš galėtų sugalvoti jums, pasakyti: "Labas, mano vardas yra Dovydas." >> Sveiki, David. Mano vardas yra Sammy. 833 00:53:03,980 --> 00:53:05,770 "Sveiki, Mano vardas Dovydas. Yra Sammy". 834 00:53:05,770 --> 00:53:08,310 Taigi dabar mes tik užsiima tokio kvailas žmogaus protokolo 835 00:53:08,310 --> 00:53:12,200 kur aš pradėjo protokolą, Sammy atsakė, 836 00:53:12,200 --> 00:53:15,060 mes sukrėtė rankas, ir sandoris yra baigtas. 837 00:53:15,060 --> 00:53:18,260 HTTP yra labai panašus į dvasią. 838 00:53:18,260 --> 00:53:23,350 Jeigu Jūsų naršyklė prašo www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 tai, ką tikrai daro jūsų naršyklė yra išplėsti savo ranką, taip sakant, 840 00:53:27,020 --> 00:53:29,960 prie serverio ir jis jai išsiųsdama pranešimą. 841 00:53:29,960 --> 00:53:34,220 Ir pranešimas paprastai yra kažkas panašaus Get - ką jūs norite gauti? 842 00:53:34,220 --> 00:53:38,740 man pagrindinis puslapis, kuris paprastai yra žymimas viengubu pasviru brūkšniu "URL pabaigoje. 843 00:53:38,740 --> 00:53:43,790 Ir tik kad jūs žinote, kokia kalba aš kalbu, aš naršyklė einu pasakyti, 844 00:53:43,790 --> 00:53:46,930 kad aš kalbu HTTP 1.1 versiją, 845 00:53:46,930 --> 00:53:51,980 , O taip pat gera priemonė, aš norėčiau pasakyti, kad priimančioji, kad aš noriu į pagrindinį puslapį 846 00:53:51,980 --> 00:53:54,120 yra facebook.com. 847 00:53:54,120 --> 00:53:57,730 Paprastai, interneto naršyklė, jums nežinant, žmogaus, 848 00:53:57,730 --> 00:54:03,350 siunčia šį pranešimą per internetą, kai jūs tiesiog įveskite www.facebook.com 849 00:54:03,350 --> 00:54:05,370 >> Įvesti į naršyklę. 850 00:54:05,370 --> 00:54:07,300 Ir ką "Facebook" atsakyti? 851 00:54:07,300 --> 00:54:12,540 Jis reaguoja su kai panašios išvaizdos paslaptingas detales, bet ir daug daugiau. 852 00:54:12,540 --> 00:54:14,310 Leiskite man eiti į priekį "Facebook" puslapis. 853 00:54:14,310 --> 00:54:17,480 Tai yra ekrano, kad daugelis iš mūsų tikriausiai niekada pamatyti, jei jūs visą laiką būti prisijungus, 854 00:54:17,480 --> 00:54:19,830 bet tai iš tiesų jų namų puslapiu. 855 00:54:19,830 --> 00:54:24,150 Jeigu mes tai darysime "Chrome", atkreipkite dėmesį, kad jūs galite traukti šių mažai kontekstinio meniu. 856 00:54:24,150 --> 00:54:26,980 Naudodami "Chrome" ar Mac OS, Windows, Linux, arba iš panašių, 857 00:54:26,980 --> 00:54:31,840 jei Valdymo paspaudimą ar kairėje spustelėkite, paprastai galite atsigriebti meniu, kuris atrodo taip, 858 00:54:31,840 --> 00:54:35,870 kur laukia keletas variantų, iš kurių vienas yra View Page Source. 859 00:54:35,870 --> 00:54:39,920 Taip pat galite paprastai gauti į šiuos dalykus, eikite į meniu Rodymas ir išnyra aplink. 860 00:54:39,920 --> 00:54:42,750 Pavyzdžiui, čia pagal View, kūrėjas yra tas pats dalykas. 861 00:54:42,750 --> 00:54:45,780 Aš ruošiuosi eiti į priekį ir ieškoti View Page Source. 862 00:54:45,780 --> 00:54:50,800 , Ką jūs pamatysite, HTML, kad Markas yra parašyta, kad atstovauti facebook.com. 863 00:54:50,800 --> 00:54:55,910 Tai visiškai netvarka čia, bet mes pamatyti, kad tai daro šiek tiek daugiau prasmės prieš ilgas. 864 00:54:55,910 --> 00:54:59,840 Tačiau yra keletas modelių čia. Leiskite man slinkti žemyn stuff like. 865 00:54:59,840 --> 00:55:05,730 Tai sunku žmogaus skaityti, bet pastebėsite, kad ten šią kampu skliaustuose modelį 866 00:55:05,730 --> 00:55:10,360 su raktiniais žodžiais, kaip ir antrojoje alternatyvoje, raktinius žodžius, pavyzdžiui, vertės, kai kabutėmis. 867 00:55:10,360 --> 00:55:15,660 Tai kur, kada Jūs užsiregistravote pirmą kartą nurodyta, ką savo gimimo metus. 868 00:55:15,660 --> 00:55:19,020 Gimimo metus, kad išskleidžiamajame meniu kažkaip užkoduota čia 869 00:55:19,020 --> 00:55:23,870 HTML Hypertext Markup Language šia kalba. 870 00:55:23,870 --> 00:55:27,730 Kitaip tariant, kai jūsų naršyklė prašo tinklalapį, 871 00:55:27,730 --> 00:55:30,610 jis kalba apie šią konvenciją, vadinamą HTTP. 872 00:55:30,610 --> 00:55:35,170 Bet ką facebook.com atsakas į šį prašymą? 873 00:55:35,170 --> 00:55:38,260 >> Jis reaguoja su kai kuriais iš šių paslaptingas žinutes, kaip matysime per akimirką. 874 00:55:38,260 --> 00:55:43,760 Tačiau labiausiai savo atsakymą HTML hiperteksto kalba. 875 00:55:43,760 --> 00:55:47,170 Štai tikrasis kalba, kuria parašytas puslapis yra. 876 00:55:47,170 --> 00:55:52,030 Ir kas yra interneto naršyklė tikrai tada, gavęs kažką, kad atrodo taip, 877 00:55:52,030 --> 00:55:57,120 skaito iš viršaus į apačią, iš kairės į dešinę, ir bet kada jis pamato vieną iš šių kampu skliausteliuose 878 00:55:57,120 --> 00:56:03,370 po raktinį žodį kaip galimybe, tai rodo, kad žymėjimo kalbą tinkamu būdu. 879 00:56:03,370 --> 00:56:06,820 Šiuo atveju, tai būtų rodyti metų išplečiamojo meniu. 880 00:56:06,820 --> 00:56:09,240 Bet vėl, tai yra pilnas netvarka pažvelgti. 881 00:56:09,240 --> 00:56:16,630 Tai ne dėl to, kad "Facebook" kūrėjai pasireiškia 0 5 stiliaus, pavyzdžiui. 882 00:56:16,630 --> 00:56:20,190 Tai yra todėl, kad dauguma kodą, jie rašo, yra, tiesą sakant, parašyta gražiai, 883 00:56:20,190 --> 00:56:22,450 gerai komentarų, gražiai įtraukta, ir panašūs dirbiniai, 884 00:56:22,450 --> 00:56:26,080 bet, žinoma, mašinų, kompiuterių, naršyklių tikrai nesuteikia nusispjauti 885 00:56:26,080 --> 00:56:27,890 ar jūsų kodas yra gerai stiliaus. 886 00:56:27,890 --> 00:56:33,100 Ir iš tikrųjų, tai visiškai išlaidavimas paspausti klavišą TAB, visus tuos kartus 887 00:56:33,100 --> 00:56:37,650 ir pateikti pastabas visi per savo kodą ir pasirinkti tikrai aprašomojo kintamųjų vardai 888 00:56:37,650 --> 00:56:42,340 nes jei naršyklė nerūpi, visi jūs darote ne dienos pabaigoje švaisto baitų. 889 00:56:42,340 --> 00:56:46,660 >> Taigi paaiškėja, ką dauguma svetainių yra nors facebook.com šaltinio kodas, 890 00:56:46,660 --> 00:56:49,550 už cs50.net ir visų šių ir kitų svetainių internete 891 00:56:49,550 --> 00:56:53,730 paprastai yra gerai parašyta ir gerai komentarų ir gražiai įspaudžiami ir panašūs, 892 00:56:53,730 --> 00:56:59,270 paprastai prieš svetainė yra įdėti į internetą, kodas minified, 893 00:56:59,270 --> 00:57:02,970 kuria HTML ir CSS - kažkas, mes netrukus matysime, 894 00:57:02,970 --> 00:57:05,960 mes netrukus matysime, JavaScript "kalbos kodas yra suspausta, 895 00:57:05,960 --> 00:57:09,250 kai ilgą kintamųjų vardai tapo X ir Y ir Z, 896 00:57:09,250 --> 00:57:13,900 ir visi tos tarpų, kad daro viską, kas atrodo taip įskaitomas išmesti, 897 00:57:13,900 --> 00:57:17,700 nes, jei jūs manote apie tai šiuo būdu, "Facebook" gauna mlrd skaičius per dieną - 898 00:57:17,700 --> 00:57:21,670 kažkas crazy, kaip kad - taip, ką daryti, jei programuotojas tik analinis 899 00:57:21,670 --> 00:57:26,660 tik įtrauka šiek tiek kodo eilutę vis tiek daug daugiau, paspauskite tarpo klavišą vieną papildomo laiko? 900 00:57:26,660 --> 00:57:29,500 Kas yra potekstė, jei "Facebook" išsaugo, kad tarpus 901 00:57:29,500 --> 00:57:32,880 visi baitai jie siunčia atgal į žmonių internete? 902 00:57:32,880 --> 00:57:36,400 Paspaudus tarpo, kai suteikia jums papildomą baitą į savo bylą. 903 00:57:36,400 --> 00:57:39,730 Ir jei milijardas žmonių, tada pereikite prie atsisiųsti pagrindinį puslapį tą pačią dieną, 904 00:57:39,730 --> 00:57:42,060 kiek daugiau duomenų perduodama per internetą? 905 00:57:42,060 --> 00:57:45,200 Be priežasties gigabaitų. 906 00:57:45,200 --> 00:57:48,510 Ir suteikė daug svetainių tai nėra toks keičiamo dydžio klausimas, 907 00:57:48,510 --> 00:57:51,030 , bet ir "Facebook", "Google", kai kurie iš populiariausių svetainių 908 00:57:51,030 --> 00:57:54,860 yra puiki paskata finansiškai, kad jūsų kodas atrodyti netvarka 909 00:57:54,860 --> 00:57:58,980 taip, kad jūs naudojate kaip kelių baitų, kiek įmanoma, be to, tada jį suglaudinti, 910 00:57:58,980 --> 00:58:01,500 naudojant kažką panašaus užtrauktuku, algoritmas vadinamas gzip, 911 00:58:01,500 --> 00:58:04,250 kad naršyklė nėra automatiškai. Bet tai yra baisu. 912 00:58:04,250 --> 00:58:08,060 Mes niekada išmokti ką nors apie kitų žmonių interneto svetainėse ir kaip kurti tinklalapius 913 00:58:08,060 --> 00:58:09,680 jei mes turime pažvelgti į tai, kaip šis. 914 00:58:09,680 --> 00:58:13,620 >> Taigi, laimei, kaip Chrome "bei" IE ir Firefox naršykles šių dienų 915 00:58:13,620 --> 00:58:16,450 paprastai ateina su built-in Kūrėjo įrankiai. 916 00:58:16,450 --> 00:58:21,730 Tiesą sakant, jei aš einu Čia patikrinkite elementą arba jei aš einu į peržiūra, kūrėjas, 917 00:58:21,730 --> 00:58:25,220 ir pereiti prie Kūrėjo įrankiai aiškiai, 918 00:58:25,220 --> 00:58:27,640 dabar tai ne mano ekrano apačioje langas pasirodo. 919 00:58:27,640 --> 00:58:31,230 Tai šiek tiek bauginanti, nes ten daug nepažįstamas skirtukų, 920 00:58:31,230 --> 00:58:34,510 bet jei aš spustelėkite elementų visą kelią apačioje kairėje 921 00:58:34,510 --> 00:58:38,810 Chrome "yra akivaizdžiai labai protingas. Ji žino, kaip interpretuoti šį kodą. 922 00:58:38,810 --> 00:58:42,320 Ir tai, ką Chrome "valo" Facebook "HTML. 923 00:58:42,320 --> 00:58:45,680 Nors yra ne tarpus ten, ne įdubimas ten, 924 00:58:45,680 --> 00:58:51,120 dabar pastebėti, kad galiu pradėti naršyti šį tinklalapį daugiau hierarchiškai. 925 00:58:51,120 --> 00:58:56,910 It turns out, kad kiekvienas interneto puslapis, parašyta kalba vadinama HTML5 turėtų prasidėti, 926 00:58:56,910 --> 00:59:03,980 tai DOCTYPE deklaraciją, taip sakant: 927 00:59:03,980 --> 00:59:07,840 Tai tipo šviesos ir pilka, bet tai pirmoje eilutėje kodo šį failą, 928 00:59:07,840 --> 00:59:12,080 ir kad tik nurodo naršyklei, "Ei, čia ateina kai HTML5 Čia ateina tinklalapį. 929 00:59:12,080 --> 00:59:18,490 Skliaustai atidaromi po, kad būna, kad tai, ką, skliaustai atidaromi HTML tegus, 930 00:59:18,490 --> 00:59:22,320 ir tada, jei aš pasinerti giliau - šie strėlės yra visiškai beprasmis. 931 00:59:22,320 --> 00:59:25,140 jie tik pristatymas labui, jie yra ne iš tikrųjų į bylą - 932 00:59:25,140 --> 00:59:30,300 pastebėti, kad "Facebook" HTML tegus viduje, nieko, kad prasideda su atviro korpuso 933 00:59:30,300 --> 00:59:32,910 ir tada žodis yra vadinamas žymę. 934 00:59:32,910 --> 00:59:38,610 Taigi, HTML tegus viduje, matyt, galvos ir kūno tegus tegus. 935 00:59:38,610 --> 00:59:41,930 Žymės galvos viduje dabar yra visai netvarka "Facebook" 936 00:59:41,930 --> 00:59:45,620 , nes jie turi daug metaduomenų ir kitų dalykų, rinkodaros ir reklamos. 937 00:59:45,620 --> 00:59:50,600 >> Bet jei mes slinkti žemyn, žemyn, žemyn, žemyn, pažiūrėkime, kur ji yra. Štai ji. 938 00:59:50,600 --> 00:59:52,210 Tai vienas yra bent šiek tiek susipažinę. 939 00:59:52,210 --> 00:59:55,990 "Facebook" puslapis pavadinimas, jei kada nors savo pavadinimo juostoje skirtuke, 940 00:59:55,990 --> 00:59:59,060 Sveiki atvykę į "Facebook" - Prisijungti Registracija arba Sužinokite daugiau. 941 00:59:59,060 --> 01:00:01,110 Štai ką galėtumėte pamatyti Chrome "pavadinimo juostoje, 942 01:00:01,110 --> 01:00:03,100 ir tai, kaip jis atstovauja kodą. 943 01:00:03,100 --> 01:00:08,090 Jei mes ignoruoti visa kita į galvą, dauguma iš tinklalapio viduriai yra į kūną, 944 01:00:08,090 --> 01:00:10,940 ir paaiškėja, kad "Facebook" kodas ketina ieškoti sudėtingesnis 945 01:00:10,940 --> 01:00:14,540 nei dauguma dalykų mes rašyti iš pradžių tik todėl, kad jis buvo pastatytas per metus, 946 01:00:14,540 --> 01:00:17,260 bet ten visai daug SCRIPT, JavaScript "kalbos kodas, 947 01:00:17,260 --> 01:00:18,870 svetainė, kuri leidžia labai interaktyvus: 948 01:00:18,870 --> 01:00:22,330 matyti būsenos atnaujinimus akimirksniu naudojant kalbų, pavyzdžiui, "JavaScript". 949 01:00:22,330 --> 01:00:25,270 Yra kažkas vadinamas div, kuri yra puslapyje skaidantis. 950 01:00:25,270 --> 01:00:27,940 Bet prieš kurią mes gauname, kad išsamiai, pabandykime nutolinti 951 01:00:27,940 --> 01:00:31,920 ir pažvelgti paprastesnė versija 1.0 "Facebook", taip sakant. 952 01:00:31,920 --> 01:00:34,740 Čia yra hello, pasaulio tinklalapių. 953 01:00:34,740 --> 01:00:37,370 Ji, kad DOCTYPE deklaraciją pačiame viršuje 954 01:00:37,370 --> 01:00:40,280 kuris yra šiek tiek skiriasi nuo visko. 955 01:00:40,280 --> 01:00:46,130 Nothing else mes rašome į interneto puslapį ketina pradėti 01:00:48,880 ir išskyrus vadinamąjį komentarų HTML. 957 01:00:48,880 --> 01:00:53,000 Bet didžiąja dalimi į interneto puslapį, viskas skliaustai atidaromi, raktažodžius, skliaustai uždaromi. 958 01:00:53,000 --> 01:00:56,220 >> Šiuo atveju jūs galite pamatyti paprasčiausias tinklalapių galimų. 959 01:00:56,220 --> 01:01:00,260 HTML tegus yra pagrindinė žymeklį ir tai yra kūno tegus 960 01:01:00,260 --> 01:01:04,580 , bet pastebėsite, kad ten tai paleisti ir sustabdyti žodžius sąvoka. 961 01:01:04,580 --> 01:01:11,360 Tai pradžios žymos HTML, tai artimas tegus arba end tag. 962 01:01:11,360 --> 01:01:15,400 Atkreipkite dėmesį, kad jie tarsi priešingybių ta prasme, kad artimas tegus arba end tag 963 01:01:15,400 --> 01:01:20,030 šis ukośnika viduje savaime. 964 01:01:20,030 --> 01:01:23,540 Tuo tarpu, yra atviru viršumi tegus čia ir čia arti galva tegus. 965 01:01:23,540 --> 01:01:26,880 >> Yra atviras pavadinimas ir uždaryti žymės pavadinimą čia. 966 01:01:26,880 --> 01:01:29,850 Tas faktas, kad aš įdėti pavadinimas į vieną eilutę, tik visiškai vienašališkų. 967 01:01:29,850 --> 01:01:33,760 Jis tiesiog atrodė taip, tarsi jis tilptų gražiai į vieną eilutę, todėl aš ne nerimauti pataikyti Įveskite porą kartų. 968 01:01:33,760 --> 01:01:38,200 Tuo tarpu, kūnas, aš padariau įtrauka tiesiog turi būti vis tiek aišku. 969 01:01:38,200 --> 01:01:41,050 Atkreipkite dėmesį, kad HTML yra gana kvailas kalba. 970 01:01:41,050 --> 01:01:43,410 Tiesą sakant, atgal per dieną, kol buvo WYSIWYG redaktoriai 971 01:01:43,410 --> 01:01:46,770 ir "Microsoft Word", kur jūs galite pasakyti: "šis drąsus, kad šiuos kursyvu, 972 01:01:46,770 --> 01:01:50,850 jūs iš tiesų įveskite mažai komandas esė prieš 20 + metų 973 01:01:50,850 --> 01:01:55,740 , pagal kurią galėtumėte pasakyti, "Start šis tekstas paryškinti. nebedarykite šis tekstas drąsus." 974 01:01:55,740 --> 01:01:59,010 "Start iðspausdinkite tekstas kursyvu. Nebedarykite iðspausdinkite tekstas kursyvu." 975 01:01:59,010 --> 01:02:01,850 >> Štai ką HTML arba bet kokia žymėjimo kalba. 976 01:02:01,850 --> 01:02:05,530 Šis pirmasis tegus sako: "Ei, naršyklė. Čia ateina šiek tiek HTML." 977 01:02:05,530 --> 01:02:09,880 Kitas tegus sako: "Ei, naršyklė. Čia ateina į galvą, savo puslapyje antraštės". 978 01:02:09,880 --> 01:02:11,650 "Ei, naršyklė. Čia ateina pavadinimą." 979 01:02:11,650 --> 01:02:15,880 Ir tada čia, "Ei, naršyklė Štai dėl titulo." 980 01:02:15,880 --> 01:02:20,000 Taigi tai yra, kaip naršyklė žino, kad nebėra rodyti daugiau simbolių, nei Apie pasaulis 981 01:02:20,000 --> 01:02:21,860 pavadinimo juostoje. 982 01:02:21,860 --> 01:02:23,640 Tuo tarpu, tai sako, "Tai viskas už galvos." 983 01:02:23,640 --> 01:02:28,340 Tai sako, "Čia ateina į kūną Štai kūno." - Pažodžiui, žodžiai Hello, world. 984 01:02:28,340 --> 01:02:33,190 Ir tai sako čia, "Štai jis organizmui. Štai ir viskas HTML." 985 01:02:33,190 --> 01:02:34,640 Taigi naršyklių yra gana kvailas. 986 01:02:34,640 --> 01:02:39,920 Jie tiesiog perskaityti šią medžiagą viršaus į apačią, iš kairės į dešinę, ir tai, ką jie negausite. 987 01:02:39,920 --> 01:02:41,860 Tegul iš tikrųjų šiek tiek pavyzdį. 988 01:02:41,860 --> 01:02:46,240 Leiskite man atverti programų paprasčiausias mano Mac čia, būtent TextEdit. 989 01:02:46,240 --> 01:02:48,220 "Windows" galite naudoti Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 , Bet tai yra viskas, ko jums reikia norint pradėti priėmimo tinklalapius. 991 01:02:50,520 --> 01:02:53,730 Aš ruošiuosi eiti į priekį ir tiesiog nukopijuokite ir įklijuokite šį kodą į šį failą. 992 01:02:53,730 --> 01:02:57,210 Aš ruošiuosi eiti į priekį ir išsaugokite jį savo kompiuteryje, 993 01:02:57,210 --> 01:03:01,220 ir aš ruošiuosi Išsaugoti kaip hello.html 994 01:03:01,220 --> 01:03:03,840 failas yra pavadintas ir dabar hello.html. 995 01:03:03,840 --> 01:03:05,690 Čia jis yra ant mano darbastalio. 996 01:03:05,690 --> 01:03:11,130 Leiskite man eiti į naršyklę ir vilkite failą į naršyklę. 997 01:03:11,130 --> 01:03:14,060 Ir voila, čia yra mano labai pirmasis interneto puslapis. 998 01:03:14,060 --> 01:03:17,340 Atkreipkite dėmesį, kad skirtuko pavadinimas yra Apie pasaulis už žymės pavadinimą, 999 01:03:17,340 --> 01:03:20,040 ir pamatysite, kad hello, pasaulis yra mano tinklalapį kūno, 1000 01:03:20,040 --> 01:03:22,190 Woo-hoo, aš internete. 1001 01:03:22,190 --> 01:03:24,700 >> Aš tikrai ne, į dešinę, nes šis failas yra ne internete. 1002 01:03:24,700 --> 01:03:28,330 Taip atsitinka, kad mano vietos kietajame diske tam tikroje kelio. 1003 01:03:28,330 --> 01:03:32,720 Bet idėja yra ta pati. Viskas, dabar mes turime, yra web serveris, į kurį norite įkelti jį. 1004 01:03:32,720 --> 01:03:37,410 Bet pirmiausia leiskite pristatyti iš tikrųjų šiek tiek daugiau sudėtingumą ir šiek tiek daugiau stilizacija. 1005 01:03:37,410 --> 01:03:39,890 Tai paprasta, jei nuobodu, interneto puslapis. 1006 01:03:39,890 --> 01:03:41,990 Pasirodo, yra ir kitų rūšių žymeles, mes galime naudoti. 1007 01:03:41,990 --> 01:03:45,530 Pavyzdžiui, čia geltonai įdiegėme 2 naujas gaires. 1008 01:03:45,530 --> 01:03:49,630 Mes ne žaisti daug su šių šiandien, bet pastebėsite, kad link tag 1009 01:03:49,630 --> 01:03:52,520 kažkaip atrodo skiriasi nuo visko. 1010 01:03:52,520 --> 01:03:55,370 Link tag trunka, kas yra vadinama atributai, 1011 01:03:55,370 --> 01:03:59,770 ir atributas yra kažkas, kuris pakeičia jų etiketes elgesį. 1012 01:03:59,770 --> 01:04:03,840 Šiuo atveju tai nėra geriausias pasirinkimas pavadinimus, nuorodą, nes tai tipo prasmės, 1013 01:04:03,840 --> 01:04:11,590 tačiau ši nuoroda tegus sako, iš esmės, failą pavadinimu styles.css viduje savo tinklalapį. 1014 01:04:11,590 --> 01:04:15,400 Jūs galite galvoti apie tai, kaip analogiška C # include direktyvą. 1015 01:04:15,400 --> 01:04:19,650 Styles.css yra nuoroda į visai kita kalba, kad mes ne žaisti su šiandien, 1016 01:04:19,650 --> 01:04:23,790 bet tai estetika: šrifto dydžiai, spalvos, apdaila, ženkliukų, paraštes, 1017 01:04:23,790 --> 01:04:26,040 ir visi tokio estetika išsamiai. 1018 01:04:26,040 --> 01:04:28,820 Tuo tarpu, scenarijus tegus funkciškai panaši, 1019 01:04:28,820 --> 01:04:33,140 bet, o ne įtraukti CSS, kad kalbos, ji apima kitą kalbą, "JavaScript". 1020 01:04:33,140 --> 01:04:37,810 Taigi, kitaip tariant, su 2 Tags ilgainiui galės parašyti savo tinklalapį 1021 01:04:37,810 --> 01:04:41,490 bet ir traukti į kodą, kad aš ar kas nors kitas yra parašęs 1022 01:04:41,490 --> 01:04:44,350 , kad galėtume atsistoti ant kitų žmonių pečių, mes galime praktikuoti gerą dizainą, 1023 01:04:44,350 --> 01:04:46,120 faktoringo iš bendro kodo. 1024 01:04:46,120 --> 01:04:49,090 Jei aš turiu 10 skirtingų interneto puslapius, tai reiškia, kad kai kurie iš mano estetika 1025 01:04:49,090 --> 01:04:52,490 galima būtų atsižvelgti iš, panašiai kaip # include, į atskirą failą. 1026 01:04:52,490 --> 01:04:54,420 Todėl mes vis ten. 1027 01:04:54,420 --> 01:04:57,180 Bet tegul iš tikrųjų pirmą kartą padaryti kažką įdomiau su šiuo failu. 1028 01:04:57,180 --> 01:05:01,110 >> Vėlgi, tai yra tiesiog "TextEdit. Nesu techniškai internete dar, bet mes ten. 1029 01:05:01,110 --> 01:05:04,910 Norėčiau, kad Hello, world šiek tiek drąsiau, nei ji yra. 1030 01:05:04,910 --> 01:05:10,890 Taigi, labas, tegul savavališkai pasakyti drąsus. 1031 01:05:10,890 --> 01:05:15,910 Vėlgi, istorija yra ta pati: hello, kablelis, pradėti uždirbti šis drąsus, 1032 01:05:15,910 --> 01:05:19,730 tada pasaulis bus atspausdintas paryškintai, o tai reiškia, sustabdyti spausdinimą paryškintu šriftu. 1033 01:05:19,730 --> 01:05:24,020 Leiskite man eiti į priekį ir išsaugoti savo failą, grįžkite prie "Chrome", aš padidinti tik taip mes galime pamatyti tai geriau, 1034 01:05:24,020 --> 01:05:27,870 ir paleisti, ir pamatysite, kad pasaulis dabar drąsus. 1035 01:05:27,870 --> 01:05:31,810 Internetas yra visa informacija apie hipersaitus, todėl galime eiti į priekį ir tai padaryti: 1036 01:05:31,810 --> 01:05:38,550 mano mėgstamiausia svetainė yra, tarkim, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Išsaugoti, perkraukite puslapį. Gerai. Yra pora problemų, dabar Be šio tinklalapio Szkaradność. 1038 01:05:43,810 --> 01:05:47,310 1, aš esu gana įsitikinęs, aš paspauskite "Enter" čia. Ir aš. 1039 01:05:47,310 --> 01:05:51,590 Aš ne tik paspauskite Enter, aš taip pat įspaudžiami, praktikuoti tai, ką mes jau pamokslavo apie stilių, 1040 01:05:51,590 --> 01:05:54,930 bet mano yra šalia pasaulyje. 1041 01:05:54,930 --> 01:05:58,410 Tad kodėl tai yra? Naršyklės tik tai, ką jūs pasakykite jiems. 1042 01:05:58,410 --> 01:06:04,010 Nepasakiau naršyklę, "pertrauka linijos čia Įdėkite dalis pertrauka čia." 1043 01:06:04,010 --> 01:06:07,820 Taigi naršyklę, nesvarbu, jei aš paspauskite Parodyti 30 kartų, 1044 01:06:07,820 --> 01:06:10,820 tai vis dar ketina įdėti savo teisę į pasaulį. 1045 01:06:10,820 --> 01:06:15,930 Ką aš tikrai turite padaryti čia pasakyti kažką panašaus
, įterpti eilutės lūžį. 1046 01:06:15,930 --> 01:06:17,940 >> Ir iš tikrųjų, eilutės lūžį Keistas dalykas rūšies 1047 01:06:17,940 --> 01:06:21,650 todėl, kad jūs tikrai negali pradėti judėti į kitą eilutę, tada kažką daryti, 1048 01:06:21,650 --> 01:06:25,380 ir tada sustoti į naują eilutę. Tai tipo, kurių atominis operacijos. 1049 01:06:25,380 --> 01:06:28,140 Jūs arba padaryti tai arba jūs neturite. Paspaudžiant "Enter" arba jūs neturite. 1050 01:06:28,140 --> 01:06:33,390 Taigi BR yra šiek tiek skirtingo žyma, ir todėl man reikia rūšiuoti atviros ir uždarykite jį 1051 01:06:33,390 --> 01:06:35,230 visi vienu metu. 1052 01:06:35,230 --> 01:06:37,500 Tai, kad sintaksė yra. 1053 01:06:37,500 --> 01:06:41,760 Techniškai, galite padaryti kažką panašaus į tai, kai kuriais HTML versijų, 1054 01:06:41,760 --> 01:06:45,600 tačiau tai yra tiesiog kvaila, nes nėra jokios priežasties, paleisti ir sustabdyti kažką 1055 01:06:45,600 --> 01:06:48,420 jei galite vietoj padaryti visa tai vienu metu. 1056 01:06:48,420 --> 01:06:52,310 Suprantu, kad HTML5 nėra griežtai reikalauti, šį velniop, 1057 01:06:52,310 --> 01:06:55,410 todėl jūs pamatysite vadovėlius ir interneto išteklius, kad jos neturite, 1058 01:06:55,410 --> 01:06:59,780 bet gera priemonė leidžia verstis simetrija, kad mes matėme iki šiol. 1059 01:06:59,780 --> 01:07:02,870 Tai reiškia, kad žymė yra atidarytas ir uždarytas. 1060 01:07:02,870 --> 01:07:05,220 Taigi dabar leiskite man išsaugoti savo failą, grįžti čia. 1061 01:07:05,220 --> 01:07:10,240 Gerai, kad tai pradeda atrodyti geriau, išskyrus internete aš žinau, yra natūra spausti, 1062 01:07:10,240 --> 01:07:13,610 ir dar youtube neatrodo sukelti nieko. 1063 01:07:13,610 --> 01:07:17,560 Tai todėl, kad, nors atrodo, kad nuorodą, naršyklė nežino, kad per se, 1064 01:07:17,560 --> 01:07:20,670 kad aš turiu pasakyti naršyklės, kad tai nuoroda. 1065 01:07:20,670 --> 01:07:22,620 >> Būdas tai padaryti yra naudoti fiksuoto žymės: 1066 01:07:22,620 --> 01:07:26,770 01:07:35,900 = "Http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 ir leiskite man pereiti į naują eilutę tik, kad šiek tiek lengviau skaityti, 1069 01:07:38,490 --> 01:07:40,060 ir aš trauktis šrifto dydį. 1070 01:07:40,060 --> 01:07:43,890 Aš padariau dar? L. Yra bus tai dichotomija. 1071 01:07:43,890 --> 01:07:46,760 Šis tag, žymės saito tiesų požymį, 1072 01:07:46,760 --> 01:07:52,900 kuris iš dalies keičia savo elgesį, ir to atributo reikšmė yra akivaizdžiai "YouTube" URL. 1073 01:07:52,900 --> 01:07:56,380 , Bet pastebėsite, kad dichotomija yra tai, kad tik todėl, kad URL, jūs ketinate, 1074 01:07:56,380 --> 01:08:01,020 tai nereiškia, kad turi būti žodis, kad jūs pabrėždamas, ir darant nuorodą. 1075 01:08:01,020 --> 01:08:03,960 O, kad gali būti kažkas panašaus į tai. 1076 01:08:03,960 --> 01:08:10,870 Taigi, aš turiu pasakyti nebedaryti šis žodis naudojant artimą fiksuoto žymės hipersaitas. 1077 01:08:10,870 --> 01:08:12,650 Pranešimas aš ne tai daryti. 1078 01:08:12,650 --> 01:08:15,890 1, tai tiesiog kiekvieno laiko švaistymas ir tai nėra būtina. 1079 01:08:15,890 --> 01:08:19,290 >> Uždaryti žymą, jūs tik dar kartą paminėti tag name. 1080 01:08:19,290 --> 01:08:21,800 Jūs neturite paminėti vieną iš atributų. 1081 01:08:21,800 --> 01:08:26,189 Todėl galime išsaugoti, kad grįžti. Gerai, voila, dabar tai mėlynos ir nuorodos. 1082 01:08:26,189 --> 01:08:29,430 Jei aš spustelėkite jį, aš iš tikrųjų eiti į "YouTube". 1083 01:08:29,430 --> 01:08:32,529 Taigi, nors mano tinklalapis yra ne internete, tai bent HTML, 1084 01:08:32,529 --> 01:08:37,930 ir jei mes leidžiame Interneto pasivyti, mes iš tikrųjų galų gale čia youtube.com. 1085 01:08:37,930 --> 01:08:40,670 Ir aš galiu grįžti ir čia mano tinklalapis. , Bet pastebėsite. 1086 01:08:40,670 --> 01:08:43,120 Jeigu jūs kada nors įsigijo elektroninius laiškus arba į sukčių pinkles, 1087 01:08:43,120 --> 01:08:45,850 dabar jūs turite vos po penkių minučių galimybę daryti tą patį. 1088 01:08:45,850 --> 01:08:50,920 Mes galime eiti čia ir padaryti kažką panašaus www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 ar kas paviršutiniškas svetainė, ir tada jūs galite pasakyti patikrinti PayPal sąskaitą. 1090 01:08:59,319 --> 01:09:04,840 [Juokas] Ir dabar tai ketina eiti į badguy.com, aš nesiruošia spausti ant 1091 01:09:04,840 --> 01:09:08,000 nes aš neįsivaizduoju, kur, kuris veda. [Juokas] 1092 01:09:08,000 --> 01:09:10,859 >> Bet dabar mes turime galimybę iš tikrųjų baigti. 1093 01:09:10,859 --> 01:09:12,640 Taigi mes tikrai tik subraižyti paviršių. 1094 01:09:12,640 --> 01:09:15,830 Mes ne programavimo savaime, mes raštu žymėjimo kalbą. 1095 01:09:15,830 --> 01:09:18,569 Bet kai tik mes aplink mūsų žodyną HTML, 1096 01:09:18,569 --> 01:09:21,520 mes jums pristatyti PHP, tikrasis programavimo kalba 1097 01:09:21,520 --> 01:09:26,859 , kuris leis mums sukurti HTML automatiškai generuoti CSS automatiškai, 1098 01:09:26,859 --> 01:09:29,430 taip, kad mes galėtume pradėti trečiadienį įgyvendinti, tarkim, 1099 01:09:29,430 --> 01:09:31,700 mūsų paieškos sistema ir dar daugiau. 1100 01:09:31,700 --> 01:09:34,770 Bet daugiau, kad porą dienų. Mes jums tada. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]