1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Week 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvardin yliopisto] 3 00:00:04,730 --> 00:00:07,490 [Tämä on CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Selvä. Tervetuloa takaisin. Tämä on CS50, ja tämä on alku viikolla 7. 5 00:00:12,280 --> 00:00:14,690 Pari pikku ilmoituksia: 6 00:00:14,690 --> 00:00:18,150 Pset5 on nyt käynnissä, ja pian on, 7 00:00:18,150 --> 00:00:21,590 ja haluan sanoa aivan rehellisesti, tämä ei yleensä joukossa enemmän haastava 8 00:00:21,590 --> 00:00:24,460 Opintojakson ongelma sarjaa, joten haluan mainita tässä nyt 9 00:00:24,460 --> 00:00:28,190 niin että tällä viikolla enemmän kuin koskaan et odota, sanotaanko keskiviikkona yö 10 00:00:28,190 --> 00:00:29,920 tai torstai-iltana sukeltaa 11 00:00:29,920 --> 00:00:32,369 Tämä on varmasti mielenkiintoinen PSET. Mielestämme se on hauskaa. 12 00:00:32,369 --> 00:00:36,110 Jos itse saada se täysin oikein ja voi sitten haastaa ns Big Board, 13 00:00:36,110 --> 00:00:39,830 sinulla on mahdollisuus sovittaa järkeä joidenkin kurssin henkilökunta 14 00:00:39,830 --> 00:00:41,620 ja joku luokkatoverit. 15 00:00:41,620 --> 00:00:44,670 Mitä Big Hallitus on kun sinulla on oikoluku työ, 16 00:00:44,670 --> 00:00:48,860 voit mennä cs50.net juoksun jälkeen komennon, 17 00:00:48,860 --> 00:00:52,430 puhtaasti valita, ja sitten aikaa, ja RAM-muistin määrä, ja lisää 18 00:00:52,430 --> 00:00:56,130 että olet käyttänyt teidän täytäntöönpanoa on esillä täällä kurssin kotisivulta. 19 00:00:56,130 --> 00:00:59,740 Huomaat, että koko joukko näistä ihmiset täällä on lueteltu henkilöstö 20 00:00:59,740 --> 00:01:04,220 koska viikonloppuna, henkilökunta ajattelin että olisi hauska yrittää päihittää toisensa. 21 00:01:04,220 --> 00:01:07,390 Niin ymmärtää, että tavoitteemme ei päihittää henkilöstölle. 22 00:01:07,390 --> 00:01:09,790 Jopa minä olen täällä vain sijalle 13. 23 00:01:09,790 --> 00:01:13,790 Puhtaasti opt in, mutta se on mahdollisuus nähdä, miten vähän RAM 24 00:01:13,790 --> 00:01:16,790 ja kuinka harvat CPU sekunnin voit ennakoitu suhteessa joitakin luokkatoverit. 25 00:01:16,790 --> 00:01:20,540 >> Ja minä myönnän, että Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 nykyisin numero 1 asemaansa yhtenä TF, 27 00:01:23,750 --> 00:01:28,120 tämä on täytäntöönpano, jota kutsumme ole mahdollista 28 00:01:28,120 --> 00:01:32,700 koska hän käyttää melkein 0 RAM ja lähes 0 sekuntia kuormitus. 29 00:01:32,700 --> 00:01:35,670 Joten me hoidamme Kevin offline. [Naurua] 30 00:01:35,670 --> 00:01:40,950 On tiettyjä taitoja, Kevin on tämänsuuntainen testi täällä. 31 00:01:40,950 --> 00:01:45,280 Yksi asioista, ajattelimme tehdä liian on nyt CS50x on viikko käynnissä, 32 00:01:45,280 --> 00:01:49,520 ja te olette yhtä paljon osa tätä kokeilua kuin opiskelijat ovat. 33 00:01:49,520 --> 00:01:53,720 Olemme pyytäneet heitä osana pset0, mikä oli samalla esittää Scratch projektin 34 00:01:53,720 --> 00:01:58,280 heitä kiinnostavia - peli, interaktiivinen taideteos, animaatio tai vastaava - 35 00:01:58,280 --> 00:02:03,700 1 - 2 minuutin video, jos he haluaisivat, tervehtimässä maailmaa ja keitä he todella ovat. 36 00:02:03,700 --> 00:02:06,780 Ajattelin kertoa teille vain pari videota, jotka on toimitettu tähän mennessä 37 00:02:06,780 --> 00:02:10,759 koska meille on henkilökunta ainakin se todella on ollut jännittävää 38 00:02:10,759 --> 00:02:14,220 ja inspiroivaa nähdä nämä ihmiset eri puolilta maailmaa - maihin ympäri maailmaa - 39 00:02:14,220 --> 00:02:18,160 viritys, kaiken, jotta tietotekniikkakurssi Internetissä, 40 00:02:18,160 --> 00:02:20,410 Olipa koska he haluavat jatkaa omia tutkimuksiaan, 41 00:02:20,410 --> 00:02:22,300 he haluavat viedä uran uuteen suuntaan, 42 00:02:22,300 --> 00:02:24,390 he haluavat täyttää aukkoja omaa osaamistaan, 43 00:02:24,390 --> 00:02:27,190 joten jotkut samoista syistä kuin teillä kenties ollut täällä. 44 00:02:27,190 --> 00:02:31,090 >> Joten annan teille yksi tällainen opiskelija täällä. Voisit nostaa äänenvoimakkuutta vain vähän. 45 00:02:31,090 --> 00:02:35,520 Tässä on yksi opiskelijan 1 minuutin huomautuksia. 46 00:02:35,520 --> 00:02:40,380 Hei, maailma. Olen opiskelija tuotantotekniikka täällä Malagassa, Espanjassa. 47 00:02:40,380 --> 00:02:45,840 Olen innoissani tästä verkkokurssin koska rakastan tietojenkäsittelytiede, en todellakaan, 48 00:02:45,840 --> 00:02:48,880 ja minä todella arvostan, että saan tutkia sitä. 49 00:02:48,880 --> 00:02:51,940 Ja että voin oppia samalla kaikki teette 50 00:02:51,940 --> 00:02:57,040 vaan olemisen Harvardin olen Malagassa, miten mahtavaa on, että? 51 00:02:57,040 --> 00:03:02,040 No, olen Fernando, ja tämä on CS50. Nähdään kaverit. 52 00:03:02,040 --> 00:03:07,100 [Naurua] Toinen clip me erityisen paljon, huomaat, että tämä herrasmies Englanti ei ole niin vahva. 53 00:03:07,100 --> 00:03:11,520 Se näyttää kuin hän oli se kone käännetään, joten käännökset ovat hieman epätäydellisiä, 54 00:03:11,520 --> 00:03:15,790 mutta tämä oli yksi meidän suosikkeja toistaiseksi samoin. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Hei, maailma. [Puhuu Japani] 57 00:03:32,370 --> 00:03:39,830 [Minun täytyy tervehtiä japani koska minun Englanti on erittäin epäluotettava.] 58 00:03:39,830 --> 00:03:45,380 [Olen antanut viestin teille kaupungin Gifu, Japani.] 59 00:03:45,380 --> 00:03:49,820 [I voi olla opiskelija ensimmäistä kertaa 20 vuotta, kuten voidaan nähdä.] 60 00:03:49,820 --> 00:03:54,640 [Olen hyvin kiitollinen Harvardin yliopiston, joka antoi minulle tämän mahdollisuuden ja EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf on kitara ja suosikkini juttu käynnissä.] [Naurua] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Miksi luulet yritin osallistua cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Harvardin yliopisto, se on minun kaipuu.] 65 00:04:14,990 --> 00:04:19,740 [Varsinkin jos olen kaukana läsnäolo asunut Japanissa.] 66 00:04:19,740 --> 00:04:26,680 [Halusin kokeilla välittömästi tietoinen tällaisista EDX milloin.] 67 00:04:26,680 --> 00:04:32,500 [Ettekö usko et liittyy ikään oppimisen I] 68 00:04:32,500 --> 00:04:38,350 [Cs50 on minun kaipuu. Nimeni on Kazu, ja tämä on cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [aplodit ja hurraavat] 70 00:04:43,090 --> 00:04:49,220 Toinen suosikki meidän oli tämän väitteen tänne joku. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google, jos et tunne tätä meme. 72 00:04:55,380 --> 00:05:01,480 >> Ja sitten lopuksi pari muuta jotka todella lähetetty, että ehkä voittaa ihana palkinto. 73 00:05:01,480 --> 00:05:06,820 [Opiskelijat] Aww! >> [Malan] Meidän täytyy kuunnella. Tämä on lyhyt, niin kuuntele tarkasti. 74 00:05:08,580 --> 00:05:11,150 [Naaras puhuja] Mikä sinun nimesi on? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Naaras puhuja] Mikä tämä on? >> [Kikattaa] CS50. [Naurua] 76 00:05:16,120 --> 00:05:19,510 [Malan] Hän teki kaksi kestää, vaikka. 77 00:05:19,510 --> 00:05:22,240 Täällä mennään, viimeinen. 78 00:05:23,030 --> 00:05:26,980 Nimeni on Louie, ja tämä on CS50. 79 00:05:26,980 --> 00:05:30,250 [Naurua] Tämä on sitten CS50x. 80 00:05:30,250 --> 00:05:33,230 Kiitos kaikille niille teistä, kun seuraavat pitkin kotona 81 00:05:33,230 --> 00:05:35,620 jotka ovat nauttimalla toistaiseksi. 82 00:05:35,620 --> 00:05:39,510 Tänään Päätämme keskustelun tietorakenteita, 83 00:05:39,510 --> 00:05:41,160 ainakin joitakin keskeisimpiä, 84 00:05:41,160 --> 00:05:44,760 ja sitten jatkamme keskustelua HTML ja Web-ohjelmointi. 85 00:05:44,760 --> 00:05:48,520 Itse olemme käyttäneet aiemmin jotkut seitsemän viikko katsomalla perusteet ohjelmointi - 86 00:05:48,520 --> 00:05:50,450 algoritmeja, tietorakenteita ja vastaavia - 87 00:05:50,450 --> 00:05:53,050 ja C, kuten ehkä kokenut tähän mennessä 88 00:05:53,050 --> 00:05:57,060 ei välttämättä helpoimmin kielten 89 00:05:57,060 --> 00:05:59,090 jonka toteuttaa joitakin näistä ajatuksista. 90 00:05:59,090 --> 00:06:01,880 Ja niin alkaa tällä viikolla ja ensi viikolla ja sitten seuraava, 91 00:06:01,880 --> 00:06:07,110 me vihdoin siirtyminen C, joka tunnetaan yleensä melko matalan tason kieltä, 92 00:06:07,110 --> 00:06:11,190 asioita korkeammalle tasolle, joukossa PHP, JavaScript, ja vastaavat, 93 00:06:11,190 --> 00:06:14,850 jonka näemme ammentaa sama oppitunteja että olemme oppineet viime viikkoina, 94 00:06:14,850 --> 00:06:19,430 mutta huomaat että julistamalla asioita, kuten taulukoita ja hash taulukoita ja etsiminen ja lajittelu 95 00:06:19,430 --> 00:06:23,370 tullut niin paljon helpompaa, koska kielet itse alamme käyttää 96 00:06:23,370 --> 00:06:25,290 tulee tehokkaampi. 97 00:06:25,290 --> 00:06:27,410 Mutta ensin soveltaminen puita. 98 00:06:27,410 --> 00:06:30,240 Se on hyvin yleinen näinä päivinä tarvitsee pakata tietoa. 99 00:06:30,240 --> 00:06:34,770 Missä yhteydessä haluaisit pakata jonkinlaisen digitaalisen tiedon? 100 00:06:37,190 --> 00:06:39,670 >> Joo. >> [Opiskelija] Kun haluat lähettää Webistä. 101 00:06:39,670 --> 00:06:41,450 Joo, kun haluat lähettää jotain Webistä. 102 00:06:41,450 --> 00:06:44,950 Jos haluat ladata suuri tiedosto, se on ihanteellinen, jos joku toinen pää 103 00:06:44,950 --> 00:06:48,760 on pakattu tiedosto käyttäen zip-muodossa tai jotain 104 00:06:48,760 --> 00:06:53,760 niin että lähetät vähemmän bittejä kuin muuten toimiteta. 105 00:06:53,760 --> 00:06:55,500 Joten miten pakata tietoa? 106 00:06:55,500 --> 00:07:00,540 Se on pohjimmiltaan kyse käyttämällä vähemmän bittejä kuin vaaditaan oletusarvoisesti. 107 00:07:00,540 --> 00:07:03,220 Mutta tämä on sellainen kummallinen asia, koska muistelen viikoilla 0 ja 1 108 00:07:03,220 --> 00:07:07,370 kun puhuimme ASCII ja binääri ja puhuimme ASCII erityisesti 109 00:07:07,370 --> 00:07:10,690 kuin käyttämällä 8 bittiä edustaa aakkosten 110 00:07:10,690 --> 00:07:16,120 niin että kirjain edustaa 65, pieniksi on numero 97, 111 00:07:16,120 --> 00:07:21,210 ja kuitenkin te edustatte 65 tai 97, käytät 7 tai 8 bittiä. 112 00:07:21,210 --> 00:07:24,120 Mutta saalis on, että on olemassa joitakin kirjaimia Englanti aakkoset 113 00:07:24,120 --> 00:07:26,230 jotka eivät ole yhtä suosittuja kuin toiset. 114 00:07:26,230 --> 00:07:31,600 Z ei ole kovin suosittu, Q ei ole kovin suosittu, mutta A ja E ovat erittäin suosittuja. 115 00:07:31,600 --> 00:07:37,280 Ja vielä kaikki nämä kirjaimet, oletusarvoisesti maailman käyttää sama määrä bittejä, vain 8. 116 00:07:37,280 --> 00:07:42,690 Niin eikö ollut fiksumpia jos sijasta 8 bittiä jokaisen kirjeen, 117 00:07:42,690 --> 00:07:47,440 jopa kaikkein harvoin käytetyt, kuten Q ja Z, 118 00:07:47,440 --> 00:07:51,910 mitä jos me käytetään vähemmän bittejä ja E ja S ja suosituin kirjaimet 119 00:07:51,910 --> 00:07:55,000 ja käytetään enemmän bittiä vähemmän suosittu kirjeet, 120 00:07:55,000 --> 00:07:57,770 Ajatuksena on katsotaanpa optimoida yhteisen asian, 121 00:07:57,770 --> 00:08:01,160 mikä on teema tietojenkäsittelytieteen yrittää optimoida mitä tapahtuu eniten 122 00:08:01,160 --> 00:08:05,310 ja viettää vähän enemmän aikaa, vähän enemmän tilaa asioita, joo, voi tapahtua 123 00:08:05,310 --> 00:08:07,680 mutta ei välttämättä yhtä usein. 124 00:08:07,680 --> 00:08:09,330 Joten ottaa esimerkin. 125 00:08:09,330 --> 00:08:12,610 >> Oletetaan, että haluamme koodata tietoa varsin tehokkaasti. 126 00:08:12,610 --> 00:08:15,090 Olet ehkä kasvaneet tietäen hieman jotain morseaakkoset, 127 00:08:15,090 --> 00:08:17,450 ja kertoimet ovat et tiedä todellista koodia 128 00:08:17,450 --> 00:08:21,750 mutta saatat muistaa, että se on ainakin tämän sarjan pisteitä ja viivoja. 129 00:08:21,750 --> 00:08:26,640 Tämä on melko tehokas koodaus, ja huomaa, että suosituin kirjain - esimerkiksi E - 130 00:08:26,640 --> 00:08:28,980 käyttää lyhin piippaa. 131 00:08:28,980 --> 00:08:31,740 Morse koodi on kyse piip-piip-piip-piip-piip-piip ja pitämällä sävyt 132 00:08:31,740 --> 00:08:34,799 joko lyhyen aikaa tai pitkän aikaa. 133 00:08:34,799 --> 00:08:40,330 E, koska merkitään piste, on erittäin lyhyt piippaus, vain äänimerkki, ja se merkitsisi E. 134 00:08:40,330 --> 00:08:43,960 Sen sijaan, T olisi pitempi piippaus, kuten piip [pidentää ääni] 135 00:08:43,960 --> 00:08:45,710 ja jotka edustavat T. 136 00:08:45,710 --> 00:08:48,840 Mutta se on silti melko lyhyt, koska toisin, jos tarkastellaan Z, 137 00:08:48,840 --> 00:08:52,690 ilmaista Z menisit piip, piip [pidempään ääni], piip, piip [lyhyempi ääni]. 138 00:08:52,690 --> 00:08:55,360 Joten se on pitempi, koska se on harvinaisempaa. 139 00:08:55,360 --> 00:08:58,150 Mutta Gotcha tässä on, että Morse koodi on vähän virheellinen 140 00:08:58,150 --> 00:09:00,610 koska se ei ole välittömästi dekoodattavissa. 141 00:09:00,610 --> 00:09:07,350 Oletetaan esimerkiksi, että kuulet joidenkin päähän langan äänimerkin [lyhyt], äänimerkki [pitkä]. 142 00:09:07,350 --> 00:09:12,480 Minkä viestin minä vain saada? Piste ja viiva. Mitä se edustaa? 143 00:09:12,480 --> 00:09:15,330 [Opiskelija] A. >> [Malan] Ehkä. 144 00:09:15,330 --> 00:09:18,270 Se voisi myös olla E seuraa T. 145 00:09:18,270 --> 00:09:23,390 Toisin sanoen, morseaakkoset, vaikka se hyödyntää tätä periaatetta voidaan optimoida kulman tapauksessa, 146 00:09:23,390 --> 00:09:26,250 se ei sovellu välittömään decodability. 147 00:09:26,250 --> 00:09:29,850 Eli ihmisen joka on kuulla tai vastaanottaa näitä pisteitä ja väliviivoja 148 00:09:29,850 --> 00:09:34,540 on jotenkin selvittää missä tauot ovat välillä kirjeitä, 149 00:09:34,540 --> 00:09:39,660 koska jos et tiedä missä ne tauot ovat, saatat sekoittaa ET tai päinvastoin. 150 00:09:39,660 --> 00:09:43,880 >> Joten mitä voisi tehdä? Vuonna morseaakkoset voisit tauko kunkin kirjaimet. 151 00:09:43,880 --> 00:09:47,660 Mutta pysähtyen on tavallaan vastoin idea nopeuttaa asioita. 152 00:09:47,660 --> 00:09:52,880 Joten mitä jos sen sijaan päädyimme koodi, jos ei ollut tämä paha tilanne 153 00:09:52,880 --> 00:09:56,570 jossa E on etuliite, esimerkiksi A - 154 00:09:56,570 --> 00:10:00,020 Toisin sanoen, jos voisimme varmistaa, että mallit ovat edelleen lyhyitä suosittu kirjaimet 155 00:10:00,020 --> 00:10:04,850 kauan vähemmän suosittu kirjaimet, mutta ei ole mahdollista sekaannusta? 156 00:10:04,850 --> 00:10:08,930 Mies nimeltä Huffman vuotta sitten keksi tämän järjestelmän kutsutaan Huffman-koodaus 157 00:10:08,930 --> 00:10:12,390 joka todella hyödyntää yksi tietorakenteiden olemme käyttäneet vähän aikaa puhua 158 00:10:12,390 --> 00:10:16,560 viime viikolla, että puiden, binääripuita erityisesti - 159 00:10:16,560 --> 00:10:19,710 binääripuu merkitys, että se ei ole enempää kuin 2 lasta. 160 00:10:19,710 --> 00:10:22,720 Se on ehkä vasen lapsi, ehkä oikea lapsi, ja se on siinä. 161 00:10:22,720 --> 00:10:26,510 Joten olettaa vain sen vuoksi keskustelun että joku haluaa lähettää viestin 162 00:10:26,510 --> 00:10:31,270 joka näyttää tältä. Se on täyttä hölynpölyä, mutta se koostuu As, Bs, Cs, Ds, ja Es. 163 00:10:31,270 --> 00:10:34,890 Ja jos todella laskea kaikki As, Bs, Cs, Ds, ja Es 164 00:10:34,890 --> 00:10:36,870 ja sitten jakaa kokonaismäärällä kirjaimia, 165 00:10:36,870 --> 00:10:42,710 tämä pieni kaavio täällä sanoo, että 45% kirjaimet ovat Es, 20% ovat, 166 00:10:42,710 --> 00:10:45,010 10% B, ja niin edelleen. 167 00:10:45,010 --> 00:10:47,330 Eli toisin sanoen, oletetaan, että mainittu merkkijono on 168 00:10:47,330 --> 00:10:49,080 on vain muutamia viesti, jonka haluat lähettää. 169 00:10:49,080 --> 00:10:52,180 Se sattuu olemaan hölynpölyä vain jotta voimme käyttää mahdollisimman vähän kirjaimia kuin mahdollista, 170 00:10:52,180 --> 00:10:55,220 mutta se on totta, että E on edelleen suosituin, 171 00:10:55,220 --> 00:11:01,450 ja B ja C ovat vähiten suosittuja, ainakin nämä 5 aakkosten kirjainta. 172 00:11:01,450 --> 00:11:04,040 Joten kuinka voimme edetä keksiä koodaus, 173 00:11:04,040 --> 00:11:08,430 binäärimuodon, kuvio 0 ja 1s kunkin näiden kirjainten 174 00:11:08,430 --> 00:11:14,820 siten, että E on lyhyt malli ja ehkä B ja C ovat hieman pidempiä malleja, 175 00:11:14,820 --> 00:11:19,270 jälleen, ajatus on, että haluamme käyttää vähemmän bittejä suurimman osan ajasta 176 00:11:19,270 --> 00:11:21,790 ja enemmän bittejä vain kerran taas. 177 00:11:21,790 --> 00:11:26,070 Mukaan Huffman-koodausta, voit luoda metsän puita. 178 00:11:26,070 --> 00:11:31,190 On eräänlainen juoni tässä, että kyse puita ja myös rakentamassa niitä. 179 00:11:31,190 --> 00:11:32,420 Katsotaanpa alkaa. 180 00:11:32,420 --> 00:11:36,140 >> Ehdotan, että aloitat tämän metsän, niin sanoakseni, 5 puiden, 181 00:11:36,140 --> 00:11:38,260 joista kukin on melko tyhmä puu. 182 00:11:38,260 --> 00:11:42,800 Puu koostuu vain yksi solmu, kuten on esitetty tässä: n ympyrä. 183 00:11:42,800 --> 00:11:45,310 Joten jokainen näistä asioista voi olla C struct 184 00:11:45,310 --> 00:11:50,200 sisä-ja C-struct voi olla float edustaa frekvenssiluku 185 00:11:50,200 --> 00:11:52,510 ja sitten ehkä char edustaa kirjain. 186 00:11:52,510 --> 00:11:56,470 Joten ajatella näitä solmuja tahansa vanha C struct, mutta nyt, korkeammalle tasolle. 187 00:11:56,470 --> 00:12:01,230 Tämä on metsä 5 puita, ja jokainen joilla on vain yksi solmu. 188 00:12:01,230 --> 00:12:06,830 Mikä Huffman ehdotetaan, että alamme yhdistää nämä puut 189 00:12:06,830 --> 00:12:11,140 että on pienin taajuus laskee osaksi hieman isommat puut 190 00:12:11,140 --> 00:12:13,490 kytkemällä ne uudella juurisolmu. 191 00:12:13,490 --> 00:12:17,560 Joten joukossa kirjaimia täällä, huomaat että mukavuussyistä olen lajitellut niitä vasemmalta oikealle, 192 00:12:17,560 --> 00:12:21,420 vaikka se ei ole ehdottoman välttämätöntä, ja huomaa, että pienin solmut 193 00:12:21,420 --> 00:12:23,930 Tällä hetkellä 10% ja 10%. 194 00:12:23,930 --> 00:12:28,940 Joten Huffman ehdotti, että me yhdistää nämä 2 pienin solmut uuteen puuhun 195 00:12:28,940 --> 00:12:34,450 ottamalla käyttöön uusi isäsolmuun ja sitten antaa, että vanhempi vasen lapsi ja oikea lapsi 196 00:12:34,450 --> 00:12:37,720 jossa B on mielivaltaisesti vasemmalla ja C on mielivaltaisesti oikea. 197 00:12:37,720 --> 00:12:41,590 Ja sitten Huffman Lisäksi ehdotetaan, että katsotaanpa nyt ajatelkaa vasen lapsi 198 00:12:41,590 --> 00:12:44,790 yksi näistä puista aina niin, että sillä edustaa 0 199 00:12:44,790 --> 00:12:47,890 ja oikea lapsi aina niin, että sillä edustaa numero 1. 200 00:12:47,890 --> 00:12:50,680 >> Sillä ei ole väliä, jos kääntää niitä niin kauan kuin olet johdonmukainen. 201 00:12:50,680 --> 00:12:54,650 Joten nyt meillä on neljä puita tässä metsässä. 202 00:12:54,650 --> 00:12:58,050 Ja sanon neljä, koska nyt puu vasemmalla - 203 00:12:58,050 --> 00:13:00,570 ja se ei ole niin paljon puu siinä mielessä, että se kasvaa tällä tavalla, 204 00:13:00,570 --> 00:13:05,170 se on enemmän kuin sukupuun missä nyt 0,2 on tavallaan vanhemman kaksi lasta - 205 00:13:05,170 --> 00:13:07,930 Huomaan, että se vanhempi olemme piirretään 0,2. 206 00:13:07,930 --> 00:13:13,370 Olemme lisänneet taajuus laskee ja kaksi lasta ja antaa uuden solmun kokonaissummasta. 207 00:13:13,370 --> 00:13:15,310 Joten nyt me vain toistamaan tämän prosessin. 208 00:13:15,310 --> 00:13:19,490 Etsi kaksi pienintä solmut ja sitten liittyä ne uuteen puuhun 209 00:13:19,490 --> 00:13:21,380 ja toista sitten prosessia eteenpäin. 210 00:13:21,380 --> 00:13:26,390 Juuri nyt meillä on muutamia ehdokkaita, 20%, 15% ja toinen 20%. 211 00:13:26,390 --> 00:13:29,780 Tässä tapauksessa meidän täytyy rikkoa solmio. Voimme tehdä sen mielivaltaisesti. 212 00:13:29,780 --> 00:13:31,540 Meidän pitäisi vain tehdä sitä jatkuvasti. 213 00:13:31,540 --> 00:13:33,760 Tässä tapauksessa minä mielivaltaisesti mennä yksi vasemmalla, 214 00:13:33,760 --> 00:13:39,880 ja nyt yhdistää 20% ja 15% antaa minulle uuden emoyhtiön nimeltään 35%, 215 00:13:39,880 --> 00:13:46,310 jonka vasen lapsi on 0, jonka oikea lapsi on 1, ja nyt meillä on vain kolme puita metsässä. 216 00:13:46,310 --> 00:13:47,960 Voit ehkä nähdä, mihin tämä on menossa. 217 00:13:47,960 --> 00:13:51,150 Jos me toista tämä pari kertaa, me aiomme olla vain yksi isompi puu, 218 00:13:51,150 --> 00:13:53,900 jonka kaikki reunat on merkitty 0 ja 1s. 219 00:13:53,900 --> 00:13:55,710 Tehdään se uudestaan. 220 00:13:55,710 --> 00:14:02,600 35% on, että puun juureen. 20% ja 45%, joten aiomme yhdistää 35% ja 20%. 221 00:14:02,600 --> 00:14:05,610 Nyt meillä on tämä puu täällä. Me lisätä ne yhdessä, meillä on 55%. 222 00:14:05,610 --> 00:14:07,910 Nyt siellä on vain kaksi metsän puiden. 223 00:14:07,910 --> 00:14:11,900 Teemme tämän viimeisen kerran, ja toivottavasti matemaattisesti kaikki taajuudet täsmää 224 00:14:11,900 --> 00:14:15,570 koska ne pitäisi, koska meillä lasketaan ne get-go lisätä jopa 100%. 225 00:14:15,570 --> 00:14:17,960 Ja nyt meillä on yksi puu. 226 00:14:17,960 --> 00:14:20,580 Joten tämä on Huffman-koodausta puu. 227 00:14:20,580 --> 00:14:24,400 Se tavallaan vei taas sinne suullisesti, mutta todellisuus on kanssa on silmukka 228 00:14:24,400 --> 00:14:27,620 tai rekursiivinen funktio, voit rakentaa tämän jutun aika nopeasti. 229 00:14:27,620 --> 00:14:32,440 Nyt meillä on siis yksi uusi solmu, ja kaikki nämä sisemmän solmut on malloc'd, 230 00:14:32,440 --> 00:14:34,690 oletettavasti, matkan varrella. 231 00:14:34,690 --> 00:14:38,650 Joten nyt alkuun tämän puun meillä on 100%, mutta nyt huomaa meillä polku 232 00:14:38,650 --> 00:14:43,780 Tämän uuden iso-iso-iso-isoisänsä kaikki iso-iso-iso-lastenlastenlapset 233 00:14:43,780 --> 00:14:45,930 aina alaosassa, kaikkia lehtiä. 234 00:14:45,930 --> 00:14:52,840 >> Mitä aiomme tehdä nyt ehdottaa, että voidakseen edustaa kirjain E, 235 00:14:52,840 --> 00:14:55,670 me käyttää vain numero 1. Miksi? 236 00:14:55,670 --> 00:15:01,000 Koska jos me läpi tämän puun viimeisestä juuresta alas lehtien tunnetaan E, 237 00:15:01,000 --> 00:15:06,050 me seuraamme vain yksi reuna, oikea reuna, ja se on merkitty tietysti ylhäällä oikealla 1. 238 00:15:06,050 --> 00:15:11,550 Joten implisiittisesti täällä Huffman oli E: n koodaus binary on vain olla 1. 239 00:15:11,550 --> 00:15:14,490 Ja se on pirun tehokasta. Voi todella saada mitään pienempi. 240 00:15:14,490 --> 00:15:18,350 Sen sijaan tulee olla edustettuna, jos noudatat logiikkaa, 241 00:15:18,350 --> 00:15:21,610 mitä mallia bittien sijaan? 01. 242 00:15:21,610 --> 00:15:25,500 Joten päästä, aloitamme juuresta ja menemme vasemmalle ja sitten oikealle, 243 00:15:25,500 --> 00:15:28,580 mikä tarkoittaa sitä seurasi 0 ja sitten 1. 244 00:15:28,580 --> 00:15:32,810 Joten me edustaa kirjain kanssa kuvio 0 ja 1. 245 00:15:32,810 --> 00:15:36,010 Ja nyt huomaa meillä on jo ominaisuus välittömästi decodability 246 00:15:36,010 --> 00:15:38,090 että meillä ei ollut vuonna morseaakkoset. 247 00:15:38,090 --> 00:15:42,840 Vaikka molemmat mallit ovat melko lyhyitä - E on 1-bittinen, on 2 bittiä - 248 00:15:42,840 --> 00:15:45,080 huomaa, että niitä ei voida sekoittaa yhtä tai muiden, 249 00:15:45,080 --> 00:15:54,870 koska jos näet 1 se täytyy olla E, jos näet 0 sitten 1 se ilmeisesti sai olla A. 250 00:15:54,870 --> 00:15:58,410 Vastaavasti mitä D? 001. 251 00:15:58,410 --> 00:16:01,440 Mikä on C? 0001. 252 00:16:01,440 --> 00:16:05,320 Ja mikä on B? 0000. 253 00:16:05,320 --> 00:16:09,550 Ja vielä, koska kaikki kirjeet välitämme ovat lehdet 254 00:16:09,550 --> 00:16:13,890 ja mikään niistä ovat sellaisia ​​välittäjien polku juuresta lehteen, 255 00:16:13,890 --> 00:16:18,760 ei ole mitään vaaraa conflating 2 kirjainta erilaiset koodaukset 256 00:16:18,760 --> 00:16:22,300 koska kaikki näistä bittikuvioiden deterministisiä. 257 00:16:22,300 --> 00:16:25,280 0000 tulee aina olemaan B. 258 00:16:25,280 --> 00:16:29,480 Ei ole solmussa jossain välissä, että saatat sekoittaa yhden kirjeen muille. 259 00:16:29,480 --> 00:16:31,150 Joten mitä vaikutuksia täällä? 260 00:16:31,150 --> 00:16:35,080 >> Suosituin kirjain - tässä tapauksessa E - on saanut lyhin koodaus, 261 00:16:35,080 --> 00:16:37,430 On saanut ensi lyhin koodaus, 262 00:16:37,430 --> 00:16:41,390 ja B ja C, jotka me jo tiesimme get-go olivat eräänlainen vähiten suosittu 263 00:16:41,390 --> 00:16:45,390 10% taajuudella jokainen, he ovat saaneet pisin koodausta. 264 00:16:45,390 --> 00:16:49,410 Ja niin, mitä tämä tarkoittaa nyt, että jos haluat lähettää viestin, joka on pakattu 265 00:16:49,410 --> 00:16:51,950 Internetin tai sähköpostin tai vastaavan, 266 00:16:51,950 --> 00:16:56,730 sijaan käyttämällä ASCII, voit lähettää Huffman koodatun viestin 267 00:16:56,730 --> 00:17:01,720 jolloin jos haluat lähettää kirjain E, lähetät vain yhden bitin. 268 00:17:01,720 --> 00:17:05,680 Jos haluat lähettää, voit lähettää 2 bittiä, 01, lähettämisen sijaan 8 bittiä 269 00:17:05,680 --> 00:17:10,190 seurasi toinen 8 bittiä seurasi toinen 8 bittiä ja niin edelleen. 270 00:17:10,190 --> 00:17:11,940 Mutta on Sainpas täällä. 271 00:17:11,940 --> 00:17:17,079 Se ei riitä vain rakentaa tätä puuta ja sitten alkaa lähettää Alice Bob 272 00:17:17,079 --> 00:17:20,010 lyhyempi bittikuviota, merkkijonon ASCII- 273 00:17:20,010 --> 00:17:23,140 koska Alice on myös ilmoittaa Bob, mitä 274 00:17:23,140 --> 00:17:26,880 jos Bob tulee pystyä lukemaan hänen pakattu viestin? 275 00:17:26,880 --> 00:17:30,770 [Äänetön opiskelija vastausta] >> Mikä tuo on? 276 00:17:30,770 --> 00:17:32,310 [Äänetön opiskelija vastausta] >> Minkä puu on. 277 00:17:32,310 --> 00:17:35,160 Tai vielä tarkemmin, mitä nämä koodauksia ovat, 278 00:17:35,160 --> 00:17:39,010 varsinkin kun tänä tarina teimme arvostele jossain vaiheessa. 279 00:17:39,010 --> 00:17:43,640 Muista, että meidän piti valita mielivaltaisesti välillä 2 eri 20% solmuja? 280 00:17:43,640 --> 00:17:49,800 Joten se ei pidä paikkaansa, että Bob, vastaanottaja, voi vain rekonstruoida puu omasta 281 00:17:49,800 --> 00:17:53,390 koska ehkä hän luo puun koskaan niin hieman eri Alice. 282 00:17:53,390 --> 00:17:56,670 Lisäksi Bob ei edes tiedä, mitä alkuperäisen viestin 283 00:17:56,670 --> 00:18:00,770 koska ainoa asia, Alice lähettää hänelle, tietenkin, on kompressoitu viesti. 284 00:18:00,770 --> 00:18:05,900 >> Joten saalis puristus näin on, että kyllä, Alice voi säästää paljon bittejä 285 00:18:05,900 --> 00:18:09,900 lähettämällä 1 E ja 01 varten ja niin edelleen, 286 00:18:09,900 --> 00:18:15,180 mutta hän on myös ilmoitettava Bob mitä kartoitus on kirjainten ja bittien 287 00:18:15,180 --> 00:18:19,620 koska he eivät voi selvästi tukeutua vain ASCII enää jos emme ASCII. 288 00:18:19,620 --> 00:18:22,200 Joten hän voi joko lähettää hänelle puun jotenkin - 289 00:18:22,200 --> 00:18:26,600 kirjoita se ylös, säilytä sitä binaaridataa tai jotain - 290 00:18:26,600 --> 00:18:30,280 tai vain lähettää hänelle hieman lunttilappua, Excel-tiedoston, joka osoittaa kuvaukset. 291 00:18:30,280 --> 00:18:36,480 Joten tehokkuutta puristus todella olettaa, että viestien lähetät 292 00:18:36,480 --> 00:18:40,230 ovat melko suuria, vähintään keskikokoinen, 293 00:18:40,230 --> 00:18:42,180 koska jos lähetät erittäin lyhyen viestin, 294 00:18:42,180 --> 00:18:45,390 Jos haluat vain lähettää viestin BAD, joka sattuu olemaan sana voimme tavata täällä, 295 00:18:45,390 --> 00:18:49,550 B--D, olet todennäköisesti aio käyttää vähemmän bittejä, 296 00:18:49,550 --> 00:18:53,130 mutta saalis on, jos sinulla on myös ilmoitettava Bob mitä puu on 297 00:18:53,130 --> 00:18:57,530 tai mitä nuo koodauksia ovat, tulet todennäköisesti suuremmat kaikki säästöt 298 00:18:57,530 --> 00:19:00,110 ottaa pakattu asioita aluksi. 299 00:19:00,110 --> 00:19:02,210 Joten se voi todella olla niin, että jos yrität pakata 300 00:19:02,210 --> 00:19:05,330 vaikka jotain zip tai tiedostomuotojen saatat olla perehtynyt - 301 00:19:05,330 --> 00:19:07,780 melko pieniä tiedostoja, vaikka tyhjiä tiedostoja - 302 00:19:07,780 --> 00:19:10,930 Joskus nämä tiedostot voivat saada isompi eikä pienempi. 303 00:19:10,930 --> 00:19:14,320 Mutta realistisesti, että tapahtuu vain pienet tiedostokoot, 304 00:19:14,320 --> 00:19:16,920 joten se ei aio tehdä gigatavun tiedosto on 2 gigatavua; 305 00:19:16,920 --> 00:19:19,480 me todella puhumme tavua tai vain pari kilotavua. 306 00:19:19,480 --> 00:19:22,330 >> Jotkin ohjelmat, kuten zip ovat tarpeeksi älykkäitä ymmärtämään, että 307 00:19:22,330 --> 00:19:24,590 "Aiotko viettää enemmän bittejä pakkaamalla tätä." 308 00:19:24,590 --> 00:19:27,460 "Sallikaa minun vaivautua pakkaamalla sen sinulle ollenkaan." 309 00:19:27,460 --> 00:19:30,160 Joten tämä on vain yksi tapa sitten pakkaamaan tekstimuodossa. 310 00:19:30,160 --> 00:19:32,300 Voisimme toteuttaa jotain tämän C. 311 00:19:32,300 --> 00:19:35,370 Esimerkiksi tässä on, miten voisimme edustaa solmun tämä puu 312 00:19:35,370 --> 00:19:39,320 jossa meillä on char varten symbolin, kelluva arvo taajuuden, 313 00:19:39,320 --> 00:19:42,250 ja kuten olemme nähneet meidän muiden tietorakenteiden, 2 osoittimia, 314 00:19:42,250 --> 00:19:47,080 1 vasen lapsi, 1 oikealle, joista kumpi tahansa voi olla NULL, 315 00:19:47,080 --> 00:19:50,850 mutta jos ei, se viittaa vasen lapsi ja oikea lapsi. 316 00:19:50,850 --> 00:19:55,130 Joten tämä sitten on Huffman koodaus, ja se on yksi tapa, että voit mennä noin puristamalla tiedot, 317 00:19:55,130 --> 00:19:57,880 ja se on varmasti yksi helppo toteuttaa 318 00:19:57,880 --> 00:20:00,830 yhteydessä vaikkapa viime viikon tietorakenteita, 319 00:20:00,830 --> 00:20:03,250 vaikka vieläkin kehittyneempiä algoritmeja olemassa 320 00:20:03,250 --> 00:20:08,220 joka voi tehdä entistä kehittyneempiä mutaatioita tietosi. 321 00:20:08,220 --> 00:20:11,640 Kaikki kysymykset sitten puita, binääripuita tai puristus tekstiä? 322 00:20:11,640 --> 00:20:15,590 [Opiskelija] Onko joitakin epäselvyyksiä, kuten jos [kuulumattomissa] jakaantui 01, 323 00:20:15,590 --> 00:20:19,160 Sitten 011 olisi epäselvä, eikö? 324 00:20:19,160 --> 00:20:22,730 [Kuulumattomissa] >> Hyvä kysymys. Epäselvyyttä. 325 00:20:22,730 --> 00:20:25,940 Saanen tiivistää viittaamalla tätä kuvaa tänne. 326 00:20:25,940 --> 00:20:29,650 Koska merkit olet puristamalla, esityksiä, 327 00:20:29,650 --> 00:20:32,850 määritelmän Tämän algoritmin pysyvät aina lehdet, 328 00:20:32,850 --> 00:20:41,870 et koskaan vahingossa käytä samaa mallia bittiä etuliite useita kirjeitä. 329 00:20:41,870 --> 00:20:46,740 Eli toisin sanoen, olet huolissasi, se kuulostaa, epäselvyys jotka 330 00:20:46,740 --> 00:20:51,580 jolloin 001 voisi olla alku B tai alku C tai jotain. 331 00:20:51,580 --> 00:20:56,780 Mutta se ei voi olla kyse, koska huomaa, että kaikki aakkosten olemme koodaa 332 00:20:56,780 --> 00:20:58,290 ovat lehtiä. 333 00:20:58,290 --> 00:21:01,910 >> Epäselvyys voi syntyä vain, kuten tapauksessa morseaakkoset, 334 00:21:01,910 --> 00:21:06,770 jos esimerkiksi C oli jonnekin pitkin polkua juuresta B. 335 00:21:06,770 --> 00:21:12,290 [Opiskelija] Oikea. Joten siinä tapauksessa, sanovat on 2 lehteä. >> Say on - Sano se uudestaan. 336 00:21:12,290 --> 00:21:18,760 [Opiskelija] Say on 2 lehtiä, F ja G, ja sitten G - >> Okei. Mutta se ei voi. 337 00:21:18,760 --> 00:21:23,230 Ei itsessään ole lehtiä F ja G koska nämä kirjeet F ja G 338 00:21:23,230 --> 00:21:27,560 itsellään olisi jättää jonnekin vasemmalle B tai oikealle E. 339 00:21:27,560 --> 00:21:28,900 Niin määritelmän, niiden täytyy olla lehtiä. 340 00:21:28,900 --> 00:21:32,940 Muuten, olet aivan oikeassa, olemme ei ratkaista ongelma morseaakkoset kasvot. 341 00:21:32,940 --> 00:21:38,150 Hyvä kysymys. Muita kysymyksiä? Selvä. 342 00:21:38,150 --> 00:21:42,050 Tämä käsite bittiä, se kääntyy pois meillä ollut valtaa koko ajan, että olemme todellisuudessa käytetä 343 00:21:42,050 --> 00:21:44,200 kun se tuli manipuloimalla näitä 0s ja 1s. 344 00:21:44,200 --> 00:21:46,600 Kysyimme tästä on yksi varhaisimmista ongelman sarjaa: 345 00:21:46,600 --> 00:21:52,340 eli miten edetä muuntaa isoja ja pieniä kirjaimia tai päinvastoin? 346 00:21:52,340 --> 00:21:55,460 Tai konkreettisemmin, yksi ensimmäisinä psets kysyi 347 00:21:55,460 --> 00:22:01,090 kuinka monta bittiä sinun todella täytyy kääntää, jotta voidaan muuttaa pieniksi tai päinvastoin? 348 00:22:01,090 --> 00:22:05,580 Tässä nopea muistutus siitä, mitä 65 ja 97 näyttää binary. 349 00:22:05,580 --> 00:22:08,060 Ja vaikka tämä kysymys on tavallaan haalistuneet muistin, 350 00:22:08,060 --> 00:22:11,290 voit nähdä taas täällä, että kuinka monta bittiä on selattava 351 00:22:11,290 --> 00:22:15,810 vaihtaa pääoman pieniksi? Vain yksi. 352 00:22:15,810 --> 00:22:19,650 >> Ne eroavat toisistaan ​​vain yhdessä paikassa, kolmas bitti vasemmalta. 353 00:22:19,650 --> 00:22:24,240 Taas on 010, pieni on 011. 354 00:22:24,240 --> 00:22:26,250 Eli jotenkin meidän on vain kyettävä kääntää että bitti, 355 00:22:26,250 --> 00:22:29,410 ja voimme sitten hyödyntää tai pieniä kirjaimia. 356 00:22:29,410 --> 00:22:32,720 Olemme tehneet tämän aiemmin todellisuudessa käyttävät, jos olosuhteet 357 00:22:32,720 --> 00:22:35,930 ja tarkistaa, jos kirje on välillä pääoma ja pääoman Z, 358 00:22:35,930 --> 00:22:41,480 Sitten lähdöt kuin - + 26 tai jotain. 359 00:22:41,480 --> 00:22:46,130 Luultavasti ei aritmeettinen muutos aakkosten. 360 00:22:46,130 --> 00:22:49,270 Mutta mitä jos voisimme vain kääntää että yhden vähän? 361 00:22:49,270 --> 00:22:59,080 Miten te sitten ottaa yhden tavun verran bittejä, joten 8 bittiä kuten 01000001 ja 01100001? 362 00:22:59,080 --> 00:23:03,170 Jos sinulla on ollut näitä malleja bittejä, miten voimme edetä muuttuvat vain yksi niistä? 363 00:23:03,170 --> 00:23:07,610 Mitä jos otamme käyttöön keltaisella täällä muita malli bittiä? 364 00:23:07,610 --> 00:23:13,420 Jos teen koko keltainen merkkijono 0s paitsi yhden bitin että haluan vaihtaa 365 00:23:13,420 --> 00:23:17,900 ja sitten esitellä uusi toimija tunnetaan bittioperaattori - 366 00:23:17,900 --> 00:23:21,210 biteittäin siinä mielessä, että se toimii yksittäisiä bittejä, 367 00:23:21,210 --> 00:23:25,360 ei koko tavu tai neljän tavun kaikki kerralla. 368 00:23:25,360 --> 00:23:31,170 Tämä pystypalkki siellä keltaisella ehdottaa, että mitä jos otamme edustus pääoman 369 00:23:31,170 --> 00:23:37,060 ja peiton OR se keltaisella bittijono? 370 00:23:37,060 --> 00:23:41,300 Toisin sanoen, muistelen meidän keskustelua Boolen Scratch ja sitten C. 371 00:23:41,300 --> 00:23:47,520 >> Doing Boolen tai sitä, että on totta, joko ensimmäinen asia on ollakseen totta 372 00:23:47,520 --> 00:23:50,700 tai toinen asia on ollakseen totta tai ne molemmat olla totta, 373 00:23:50,700 --> 00:23:53,270 ja sen jälkeen tuloksena lähtö on itse totta. 374 00:23:53,270 --> 00:24:00,230 Tässä tapauksessa täällä, mitä saamme, jos otamme 0 "tai" ed, 0? Väärät tai väärä? 375 00:24:00,230 --> 00:24:04,280 Se on edelleen väärä, joten pieniä pysyy odotetusti. 376 00:24:04,280 --> 00:24:07,540 Mitä jos sen sijaan teemme 1 tai 0? 377 00:24:07,540 --> 00:24:12,640 Tämä nyt on edelleen 1, mutta huomaa, mitä on tapahtumassa täällä. 378 00:24:12,640 --> 00:24:18,630 Jos aloitamme pääomaan ja jatkamme "tai" sen yksittäisiä bittejä kuin me teemme täällä, 379 00:24:18,630 --> 00:24:25,180 0 tai keltainen antaa meille mitä tänne? Tämä antaa meille 1. 380 00:24:25,180 --> 00:24:35,120 Itse kai emme tiedä, mitä isot versio pikku todellisuudessa oli. 381 00:24:35,120 --> 00:24:38,270 Mennään tähän. Jatkan tästä takaisin tänne. 382 00:24:38,270 --> 00:24:42,340 Tehdään tämä uudestaan. 0 tai 0 antaa minulle 0. 383 00:24:42,340 --> 00:24:45,020 1 tai 0 antaa minulle 1. 384 00:24:45,020 --> 00:24:48,020 0 tai 1 antaa minulle 1. 385 00:24:48,020 --> 00:24:52,880 0 tai 0 antaa minulle 0. Seuraava on 0, seuraava on 0, seuraava on 0. 386 00:24:52,880 --> 00:24:55,660 1 tai 0 antaa minulle 1. 387 00:24:55,660 --> 00:24:59,140 Ja joten vaikka emme etukäteen tiedä, mikä pieniksi oli, 388 00:24:59,140 --> 00:25:04,770 yksinkertaisesti "tai" ta tähän malliin bittien olemme esitetty täällä keltainen, 389 00:25:04,770 --> 00:25:09,400 voit pieniksi pääomaa kääntämällä että vähän. 390 00:25:09,400 --> 00:25:11,580 Käytimme tätä ilmaisua viikkoa sitten: flipping hieman. 391 00:25:11,580 --> 00:25:13,710 Miten todella tehdä ohjelmallisesti? 392 00:25:13,710 --> 00:25:16,390 Voit käyttää mitä yleisesti kutsutaan naamio, bittijono, 393 00:25:16,390 --> 00:25:19,980 että tässä tapauksessa sattuu näyttää tämän numeron täällä, 394 00:25:19,980 --> 00:25:22,980 ja sitten sinä "tai" se yhteen käyttämällä tätä uutta C toimija, 395 00:25:22,980 --> 00:25:29,940 ei | |, käytät yhden | ja te todella saada vastaus tänne koska miksi? 396 00:25:29,940 --> 00:25:35,120 Tämä on 1s paikka, 2s paikka, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Joten näyttää siltä, ​​että jos otat kirjain ja peiton OR se kokonaisluku 32, 398 00:25:42,280 --> 00:25:47,520 koska kokonaisluku 32, kun katsot sitä bittiä, näyttää tältä, 399 00:25:47,520 --> 00:25:50,860 se tarkoittaa, että voit kääntää hieman että te todella haluavat. 400 00:25:50,860 --> 00:25:52,630 Ja samoin - ja me tutustumme koodia vain hetken - 401 00:25:52,630 --> 00:25:54,210 Oletetaan haluamme mennä toiseen suuntaan. 402 00:25:54,210 --> 00:25:58,210 >> Miten siirtyä pieniä pääoman? Joka bittinen tarvitsee vaihtaa? 403 00:25:58,210 --> 00:25:59,820 Se on sama. 404 00:25:59,820 --> 00:26:03,970 Haluamme muuttaa kyseisen kolmannen bitin 1 0. 405 00:26:03,970 --> 00:26:06,310 Ja miten me menemme noin tekee tästä? 406 00:26:06,310 --> 00:26:10,130 Miten sammuttaa hieman? Millä malli bittien voisimme sammuttaa hieman? 407 00:26:11,580 --> 00:26:14,070 Mitä jos me tavallaan inverttisokeri maskin? 408 00:26:14,070 --> 00:26:17,350 Taas ennen, teimme koko keltainen maski 0s 409 00:26:17,350 --> 00:26:19,930 lukuun ottamatta yhden bitin halusimme päälle, 410 00:26:19,930 --> 00:26:25,580 Mitä jos tällä kertaa teemme koko maski 1S paitsi bitti haluamme poistaa 411 00:26:25,580 --> 00:26:28,330 ja sitten käyttää mitä operaattori? 412 00:26:28,330 --> 00:26:30,560 Mitä jos me "ja" asioita? Katsotaanpa katsomaan. 413 00:26:30,560 --> 00:26:34,880 Jos me nyt kääntää tämän Oletetaan, että jälleen luon naamion, että kaikki 1s 414 00:26:34,880 --> 00:26:37,650 lukuun ottamatta yhden bitin että haluan sammuttaa 415 00:26:37,650 --> 00:26:43,860 ja sitten kuin "tai" valkoiset numerot ylös keltaisella numerot tänne, 416 00:26:43,860 --> 00:26:46,940 Mitä jos minä sen sijaan "ja" ne yhteen? Sitä kutsutaan peiton ja. 417 00:26:46,940 --> 00:26:49,450 Loogisesti se on sama asia kuin Boolen ja. 418 00:26:49,450 --> 00:26:55,160 Tämä antaa minulle 0 ja 1 on 0. Niin vääriä ja tosi on epätosi. 419 00:26:55,160 --> 00:26:58,160 True ja totta on totta. 420 00:26:58,160 --> 00:27:04,020 Ja tässä on taikaa: tosi ja epätosi on nyt väärä, joten olemme sammutettu että vähän. 421 00:27:04,020 --> 00:27:06,560 Ja nyt loput tarina on hieman yksinkertainen. 422 00:27:06,560 --> 00:27:11,970 Koska muu maski on 1s, sillä ei ole väliä, mitä luvut ovat valkoisia. 423 00:27:11,970 --> 00:27:15,580 Kun "ja" jotain totta, et aio muuttaa sen arvoa. 424 00:27:15,580 --> 00:27:20,200 Jos se on totta, se pysyy uskollisena. Jos se oli väärä, se pysyy vääriä. 425 00:27:20,200 --> 00:27:23,190 >> Mutta taika tapahtuu, kun otat jotain, joka oli totta 426 00:27:23,190 --> 00:27:25,430 ja voit sitten "ja" sille vääriä. 427 00:27:25,430 --> 00:27:30,030 Tämä vaikutus on sammuttamalla että vähän. 428 00:27:30,030 --> 00:27:31,980 Joten hieman arvoituksellisesti siellä. 429 00:27:31,980 --> 00:27:35,390 Katsotaanpa todella katsoa koodia, joka saattaisi näyttää vieläkin salamyhkäinen, 430 00:27:35,390 --> 00:27:38,220 mutta katsotaanpa katsomaan täällä tolower. 431 00:27:38,220 --> 00:27:45,880 Jos katson tolower, menee pääoman pieniksi, 432 00:27:45,880 --> 00:27:47,730 Katsotaanpa, miten voisimme toteuttaa tämän ohjelman. 433 00:27:47,730 --> 00:27:51,280 Tässä tärkeimmät, ja se ei ole minkään komentorivin argumentteja. 434 00:27:51,280 --> 00:27:55,980 Olen julistamisesta merkin C kirjeessä, että käyttäjä on menossa tyypin tuumaa 435 00:27:55,980 --> 00:28:00,690 Sitten käyttää tuttua tehdä, kun silmukka vain varmistaa, että käyttäjä varmasti antaa minulle pääomaa 436 00:28:00,690 --> 00:28:05,010 tai B tai C. .. Z, joten he antavat minulle jotain välillä ja Z. 437 00:28:05,010 --> 00:28:08,580 Ja nyt, mitä minä teen täällä? 438 00:28:08,580 --> 00:28:14,870 Olen "tai" ta tätä 0x20, mutta se on oikeastaan ​​sama kuin - 439 00:28:14,870 --> 00:28:19,500 ja me palaamme tähän hetken - 32. 440 00:28:19,500 --> 00:28:24,830 Joten jälleen, 32 on tämä malli bittien tässä. Miksi me tiedämme tämän? 441 00:28:24,830 --> 00:28:26,320 Ajatelkaapa takaisin viikossa 0. 442 00:28:26,320 --> 00:28:31,010 Tämä on 1s paikka, 2s paikka, 4s, 8s, 16s, 32s paikka. 443 00:28:31,010 --> 00:28:33,470 Joten tämä keltainen numero sattuu olemaan 32. 444 00:28:33,470 --> 00:28:40,570 Voin sitten ottaa kirjeen kaltainen char täällä bittikohtainen "tai" se kirjaimellisesti numero 32, 445 00:28:40,570 --> 00:28:45,250 ja mitä saan takaisin? Pieniä versio että char. 446 00:28:45,250 --> 00:28:48,830 Hetki sitten, vaikka olen ilmaissut tämän eri pohja merkintä. 447 00:28:48,830 --> 00:28:51,370 Mitä tämä edustaa? >> [Opiskelija] Heksadesimaali. 448 00:28:51,370 --> 00:28:53,050 [Malan] Tämä tapahtuu edustamaan heksadesimaalinen. 449 00:28:53,050 --> 00:28:55,170 Emme ole puhuneet heksadesimaali kovinkaan paljon, 450 00:28:55,170 --> 00:28:57,330 mutta se on todella kätevä tällaisissa tapauksissa. 451 00:28:57,330 --> 00:29:01,730 >> Vaikka se näyttää enemmän monimutkaisia ​​ja vaikka se näyttää 20 eikä 32, 452 00:29:01,730 --> 00:29:06,240 käy ilmi, että heksadesimaali on todella super kätevä notaatio 453 00:29:06,240 --> 00:29:10,810 koska heksadesimaali jokaisen numeron jälkeen 0x - ja tämä ei tarkoita mitään; 454 00:29:10,810 --> 00:29:13,960 tämä on vain ihmisen yleissopimus, joka sanoo tässä tulee heksadesimaaliluvuksi - 455 00:29:13,960 --> 00:29:18,590 kukin näistä numeroa, 2 ja sitten 0, voivat itse olla edustettuina 456 00:29:18,590 --> 00:29:20,800 täsmälleen 4 bittiä. 457 00:29:20,800 --> 00:29:27,840 Joten jos teemme näin, anna minun avata tekstinkäsittelyohjelmassa täällä - weird autocomplete - 458 00:29:27,840 --> 00:29:35,940 jos teemme pienen tekstieditori täällä, numero 0x20 tarkoittaa tässä on 4 bittiä, tässä on toinen 4 bittiä. 459 00:29:35,940 --> 00:29:38,050 Tehdään oikeanpuoleisin 4 bitti ensin. 460 00:29:38,050 --> 00:29:44,690 0, kun edustettuna 4 bittiä on mitä? Super helppoa. Vain kaikki 0s. 461 00:29:44,690 --> 00:29:46,780 Joten 4 bittiä 0s. 462 00:29:46,780 --> 00:29:53,510 Miten te edustatte 2? Se on ollut jonkin aikaa, koska teimme tätä, mutta se on 0100. 463 00:29:53,510 --> 00:29:57,310 Joten tämä on 1s paikka, tämä on 2s paikassa, ja sitten sillä ei ole väliä, mitä muut paikat ovat. 464 00:29:57,310 --> 00:30:00,610 Toisin sanoen, heksadesimaali saatat sanoa 0x20, 465 00:30:00,610 --> 00:30:04,340 mutta jos sitten miettiä, mikä on 2 ja miten se edustaa binary, 466 00:30:04,340 --> 00:30:07,130 Mikä on 0 ja miten se edustaa binary, 467 00:30:07,130 --> 00:30:10,440 vastaukset näihin kysymyksiin ovat tämä ja tämä vastaavasti. 468 00:30:10,440 --> 00:30:14,380 Niin 0x20 tapahtuu edustamaan tätä kuviota 8 bittiä, 469 00:30:14,380 --> 00:30:16,880 joka on juuri maski että halusimme. 470 00:30:16,880 --> 00:30:20,140 Joten tämä on tällä hetkellä vain henkinen harjoitus, 471 00:30:20,140 --> 00:30:24,520 mutta todellisuus on koodi on tyypillisesti yleisempää kirjoittaa vakioita näin 472 00:30:24,520 --> 00:30:28,360 heksadesimaalimuodossa koska silloin ohjelmoija voi melko helposti, 473 00:30:28,360 --> 00:30:32,560 vaikka se vaatii jonkin verran paperia ja kynä, selvittää mitä se malli bittien on 474 00:30:32,560 --> 00:30:35,960 koska et voi vain ilmaista 0s ja 1s tyypillisesti koodin. 475 00:30:35,960 --> 00:30:38,540 Et voi mennä 00010 ja niin edelleen. 476 00:30:38,540 --> 00:30:42,380 >> Sinun täytyy valita desimaali tai heksadesimaali-tai oktaali tai muita muistiinpanoja. 477 00:30:42,380 --> 00:30:47,540 Useimmat ihmiset yleensä poimia heksadesimaaliluvuksi yksinkertaisesti niin, että jokainen numero on 4 bittiä 478 00:30:47,540 --> 00:30:49,320 ja voit tehdä tämän nopeasti matematiikkaa. 479 00:30:49,320 --> 00:30:54,990 Ja minä vilkuttaa käteni toupper, mikä on lähes sama, se näyttää melkein identtiset. 480 00:30:54,990 --> 00:31:01,900 Toupper sattuu käyttämään ei tai operaattorin vaan tämä kaveri ja df. 481 00:31:01,900 --> 00:31:09,300 Mitä df edustaa? df? Kukaan? >> [Opiskelija] 255. 482 00:31:09,300 --> 00:31:12,780 255? Ei 255. Se olisi FF. 483 00:31:12,780 --> 00:31:15,210 Jätämme tämän yhden vähän liikuntaa. 484 00:31:15,210 --> 00:31:23,460 Mutta jos mennä 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ja sitten mitä tulee sen jälkeen 9? 485 00:31:23,460 --> 00:31:26,510 Olemme tavallaan pois desimaalilukujen, mutta heksadesimaali mitä tulee 9 jälkeen? 486 00:31:26,510 --> 00:31:29,510 [Opiskelija]. >> Joten a, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Voit selvittää sieltä mitä mallia bittien d todellisuudessa edustaa. 488 00:31:33,470 --> 00:31:38,850 Ja jos teemme matematiikka, näemme, että maski voit lopulta saada takaisin on identtinen tämän. 489 00:31:38,850 --> 00:31:45,580 Tämä on f, kaikki 1s, ja tämä on d. Joten df kertoo, että maski. Selvä. 490 00:31:45,580 --> 00:31:50,980 Ja lopuksi, ettei asioita äänen super, super teknisiä, 491 00:31:50,980 --> 00:31:53,840 mutta kai halusimme kirjoittaa ohjelma, joka tekee tämän. 492 00:31:53,840 --> 00:31:58,960 Anna minun mennä eteenpäin ja tehdä binary, joka on ohjelma tiedostoon nimeltä binary.c. 493 00:31:58,960 --> 00:32:02,050 Ja nyt haluan juosta binary ja anna minulle ei-negatiivinen kokonaisluku. 494 00:32:02,050 --> 00:32:03,960 Aloitetaanpa helppoa ja kirjoita 0. 495 00:32:03,960 --> 00:32:09,010 Tämä nyt on ohjelma, joka tulostaa kokonaisluvun sen binääriesityksessä. 496 00:32:09,010 --> 00:32:13,470 Joten jos pelaan tätä peliä uudestaan ​​ja kirjoita vain 1, minun pitäisi saada 32-bittinen edustus 1. 497 00:32:13,470 --> 00:32:15,490 Jos teen tämän jälleen 2, minun pitäisi saada se. 498 00:32:15,490 --> 00:32:19,310 Jos teen 7, minun pitäisi saada muutama 1s lopussa ja niin edelleen. 499 00:32:19,310 --> 00:32:22,740 Osoittautuu Mainitsen tämän siksi kanssa bittioperaatioita 500 00:32:22,740 --> 00:32:25,490 voit itse tehdä yhden asian samoin. 501 00:32:25,490 --> 00:32:29,130 Voit luoda näitä naamioita dynaamisesti. 502 00:32:29,130 --> 00:32:32,800 Katsokaa tämä viimeinen esimerkki, jossa bittioperaatioita. 503 00:32:32,800 --> 00:32:35,490 Tässä on ensimmäinen osa koodia, pyytää käyttäjältä numeron, 504 00:32:35,490 --> 00:32:38,130 ja se vaatii, että annatte minulle ei-negatiivinen kokonaisluku. 505 00:32:38,130 --> 00:32:39,780 Joten se on tavallaan vanhan koulun kamaa. 506 00:32:39,780 --> 00:32:41,980 Mutta tässä on jotain, joka on tavallaan mielenkiintoista. 507 00:32:41,980 --> 00:32:44,910 >> Miten edetä tulostaa numeron binääri? 508 00:32:44,910 --> 00:32:48,970 Haluan ensin kerrata mistä mihin? 509 00:32:48,970 --> 00:32:52,270 Mitä kokoa int tyypillisesti ainakin laitteen? >> [Opiskelija] 4. 510 00:32:52,270 --> 00:32:57,130 Se on 4. Joten 4 * 8 on 32-1 on 31. 511 00:32:57,130 --> 00:33:02,590 Joten jos olen alkanut laskea 31 päivästä, joka edustaa, se kääntyy pois, 512 00:33:02,590 --> 00:33:07,630 vain käsitteellisesti, 31. bitti tai eniten merkitsevään bittiin, mikä on tämä kaveri täällä, 513 00:33:07,630 --> 00:33:09,650 tämä tulee olemaan bitti 0. 514 00:33:09,650 --> 00:33:12,850 Joten tämä on vähän 01 ... bitti 31. 515 00:33:12,850 --> 00:33:14,950 Joten mitä tämä koodi tekee? 516 00:33:14,950 --> 00:33:20,140 Huomaa tämä silmukka, vaikka se näyttää arvoituksellisesti, on vain iteroimalla 31 alas 0. Siinä kaikki. 517 00:33:20,140 --> 00:33:24,530 Niin mielenkiintoinen osa nyt on näissä 5 riviä tänne. 518 00:33:24,530 --> 00:33:28,110 Huomaa, että tätä linjaa olen julistaa muuttuja nimeltä naamio 519 00:33:28,110 --> 00:33:30,790 oltava johdonmukaisia ​​meidän tarina nämä keltaiset numerot. 520 00:33:30,790 --> 00:33:32,200 Ja mitä sitten on tämä tekee? 521 00:33:32,200 --> 00:33:35,720 Tämä on toinen bittioperaattori emme ole nähnyt aiemmin, todennäköisesti. 522 00:33:35,720 --> 00:33:38,300 Se VASEN VAIHTO operaattori. 523 00:33:38,300 --> 00:33:40,060 Tämä operaattori tekee tämän. 524 00:33:40,060 --> 00:33:44,920 Tässä on numero 1, ja jos et lähdin muutos, vasen shift, 525 00:33:44,920 --> 00:33:49,260 mitä mieltä olette siitä, että on vaikutus tekee että yksittäisten 1? 526 00:33:49,260 --> 00:33:51,290 Kirjaimellisesti siirtämällä sen yli. 527 00:33:51,290 --> 00:33:57,540 Joten jos numero 1 on mitä on vasemmalla ja aloitat alustamalla i 31, 528 00:33:57,540 --> 00:34:03,490 mitä se aikoo tehdä? Se tulee ottaa tämä numero 1 ja siirrä se 31 paikkaa täällä. 529 00:34:03,490 --> 00:34:06,210 Ja koska siellä ilmeisesti ole muuta numeroa takana, 530 00:34:06,210 --> 00:34:10,350 ne tulevat oletusarvoisesti korvataan 0s. 531 00:34:10,350 --> 00:34:15,120 Joten voit alkaa ulos numero 1, joka tietenkin näyttää tältä - 532 00:34:15,120 --> 00:34:18,659 ja esitän sen tänne keskellä. 533 00:34:18,659 --> 00:34:22,139 Ja sitten kun siirtää asioita vasemmalle, tämä kaveri lähinnä menee näin. 534 00:34:22,139 --> 00:34:24,659 Mutta heti kun näin, 0 Kympin sisään 535 00:34:24,659 --> 00:34:28,360 Jos siirrät sen toisen kerran, se menee näin, ja toisella 0 Kympin sisään 536 00:34:28,360 --> 00:34:31,000 >> Voit siirtää sen uudelleen ja sitten toinen 0 Kympin sisään 537 00:34:31,000 --> 00:34:37,900 Joten jos teet näin asia 1 << i 31 paikkaa, voit päätyä saada maskia 538 00:34:37,900 --> 00:34:42,550 , joka on 32 merkkiä pitkä, semmanpuoleisimmat, joka on 1, 539 00:34:42,550 --> 00:34:45,199 kaikki muut, jotka ovat 0. 540 00:34:45,199 --> 00:34:50,880 Ja se kääntyy pois, niin syrjään, siirtää numero vasemmalle näin 541 00:34:50,880 --> 00:34:53,530 Myös sattumalta, ja joskus sopivasti, 542 00:34:53,530 --> 00:34:57,520 vaikutus on tehdä mitä tähän numeroon? >> [Opiskelija] kaksinkertaistaminen sitä. 543 00:34:57,520 --> 00:35:00,980 Kaksinkertaistaminen, koska jokaiseen sarakkeeseen - 1s paikka, 2s paikka, 4s paikka, 544 00:35:00,980 --> 00:35:05,030 8s paikka, 16s sija - He ovat kaikki tuplaamista niin menet vasemmalle. 545 00:35:05,030 --> 00:35:09,500 Tai pikemminkin, kun siirtää 1s aiot päätyä kaksinkertaistaa määrän arvon. 546 00:35:09,500 --> 00:35:12,070 Voit päätyä tekemään mielenkiintoisia muutoksia numeroita 547 00:35:12,070 --> 00:35:15,640 siirtämällä kaiken yli tällä tavalla toimivalta 2. 548 00:35:15,640 --> 00:35:17,150 Joten miten tämä toimii? 549 00:35:17,150 --> 00:35:22,580 Tämä sitten antaa minulle maski, kaikki 0s paitsi 1 juuri paikassa haluan sen, 550 00:35:22,580 --> 00:35:27,920 ja sitten tämä ilmaisu, joka on varastettu toupper.c, 551 00:35:27,920 --> 00:35:31,770 on yksinkertaisesti sanomalla ottaa luku n, että käyttäjä kirjoitettu, 552 00:35:31,770 --> 00:35:34,730 "Ja" se, että maski, ja mitä aiot saada? 553 00:35:34,730 --> 00:35:39,200 Olet menossa saada 1 jos siellä 1 että naamioituneet paikassa, 554 00:35:39,200 --> 00:35:41,570 tai aiot saada 0, jos siellä ei ole. 555 00:35:41,570 --> 00:35:44,370 Ja niin kaikki tämä ohjelma ei käytännössä se on silmukka, 556 00:35:44,370 --> 00:35:48,340 ja se luo naamio 1 täällä, sitten 1 täällä, sitten 1 täällä, 557 00:35:48,340 --> 00:35:52,950 ja se käyttää tämän peiton ja temppu sanoa onko 1 bitti käyttäjän panos täällä? 558 00:35:52,950 --> 00:35:59,220 >> Onko 1 bitti käyttäjän panos täällä? Ja jos niin, kirjaimellisesti tulostaa 1, muuten tulosta 0. 559 00:35:59,220 --> 00:36:03,780 Teemme tätä ints vain koska siksi teemme 32 bittiä sijasta 8, 560 00:36:03,780 --> 00:36:06,900 mutta olemme ottaneet käyttöön niin tämä bittikohtainen ja tällä bittikohtainen OR, 561 00:36:06,900 --> 00:36:10,450 ja tämä VASEN VAIHTO operaattori, jotka eivät ole useinkaan kovin hyödyllistä, 562 00:36:10,450 --> 00:36:12,230 mutta se osoittautuu ne voivat olla. 563 00:36:12,230 --> 00:36:16,560 Itse asiassa, jos olisit edustaa jotain joukko booleans 564 00:36:16,560 --> 00:36:21,260 vain edustaa tosi tai epätosi, kai halusi seurata vai ei 565 00:36:21,260 --> 00:36:24,630 huone täynnä 300 opiskelijaa on läsnä, 566 00:36:24,630 --> 00:36:29,420 voisit julistaa joukko koko 300 tyypin bool niin että saat 300 bools, 567 00:36:29,420 --> 00:36:33,090 ja voit asettaa jokaisen true jos joku on täällä ja epätosi muuten. 568 00:36:33,090 --> 00:36:37,550 Miksi se edustus että tietorakenne tehoton? 569 00:36:39,370 --> 00:36:44,800 Mitä huonoa suunnittelua että tietorakenne, joukko 300 bools? 570 00:36:46,190 --> 00:36:49,600 Mikä on bool, itse asiassa, alla huppu? 571 00:36:49,600 --> 00:36:52,310 Tämäkin on jotain, joka voi olla tuttu. 572 00:36:52,310 --> 00:36:53,720 On käynyt ilmi, ei bool. 573 00:36:53,720 --> 00:36:56,620 Muistakaa me tavallaan luotu että cs50.h tiedosto, 574 00:36:56,620 --> 00:36:58,630 joka itsessään sisältää standardin bool. 575 00:36:58,630 --> 00:37:00,930 C on eräänlainen mykkä, mutta kun se tulee bool. 576 00:37:00,930 --> 00:37:04,880 Se käyttää 8 bittiä edustamaan jokaista bool, joka on täysin turhaa 577 00:37:04,880 --> 00:37:09,040 koska ilmeisesti, kuinka monta bittiä tarvitset edustamaan bool? Vain 1. 578 00:37:09,040 --> 00:37:13,190 Joten näyttää siltä, ​​että jos teillä on nyt kyky kanssa bittioperaatioiden 579 00:37:13,190 --> 00:37:17,760 manipuloida yksittäisiä bittejä jopa char, jopa yhden tavun, 580 00:37:17,760 --> 00:37:21,380 se osoittautuu voisit vähentää muistia tarvitaan edustamaan jotain tyhmää 581 00:37:21,380 --> 00:37:25,490 kuten että osallistuminen tyylistä datarakenne tekijällä 8. 582 00:37:25,490 --> 00:37:29,820 Sen sijaan käyttäen kahdeksan bitin tosi tai epätosi, voit kirjaimellisesti käyttää yhtä 583 00:37:29,820 --> 00:37:34,500 käyttämällä yhden tavun jokaista kahdeksan opiskelijaa luokassa 584 00:37:34,500 --> 00:37:41,990 ja siirrytään 0-1 yksittäisiä bittejä käyttämällä tällaisia ​​matalan tason temppuja. 585 00:37:43,850 --> 00:37:49,460 Se todella lopettaa energian. Onko kysyttävää bittioperaatioita? 586 00:37:49,460 --> 00:37:52,710 >> Joo. >> [Opiskelija] Onko yksinomainen tai operaattori? 587 00:37:52,710 --> 00:37:56,440 Kyllä. On yksinomainen tai toimija, joka näyttää tältä, ^, porkkana symboli, 588 00:37:56,440 --> 00:38:02,070 mikä tarkoittaa vain ensimmäinen asia tai toinen asia voi olla 1, lähtö on 1. 589 00:38:02,070 --> 00:38:07,750 On myös ole, ~, jonka avulla voit kääntää 0-1 tai päinvastoin samoin. 590 00:38:07,750 --> 00:38:11,600 Ja siellä on myös oikeus siirtymistä operaattori, >>, mikä on vastakohta yhden näimme. 591 00:38:11,600 --> 00:38:13,850 Selvä. Viedään asiat nyt korkeammalle tasolle. 592 00:38:13,850 --> 00:38:16,770 Aloitimme puhumalla tekstin ja sitten puristamalla sitä 593 00:38:16,770 --> 00:38:19,650 ja edustavat tekstiä vähemmän bittimäärät; 594 00:38:19,650 --> 00:38:22,890 puhuimme vähän siitä, miten voimme nyt aloittaa manipuloi asioita peiton tasolla. 595 00:38:22,890 --> 00:38:26,640 Katsotaanpa nyt zoomata takaisin jopa 10000 jalkaa edustamiseen 596 00:38:26,640 --> 00:38:29,250 Monimutkaisten asioita, kuten grafiikkaa. 597 00:38:29,250 --> 00:38:32,950 Täällä meillä on Saksan lipun, täällä on yksi Ranskan. 598 00:38:32,950 --> 00:38:36,350 Nämä saattavat olla edustettuna tiedostomuotoja ehkä tiedätkin - GIF, esimerkiksi. 599 00:38:36,350 --> 00:38:40,030 Jos olet koskaan nähnyt kuvan Webissä, joka päättyy. Gif, 600 00:38:40,030 --> 00:38:43,000 tämä on Graphics Interchange Format. 601 00:38:43,000 --> 00:38:47,530 Nämä kaksi lippua tässä tavallaan ajankäytön puristus 602 00:38:47,530 --> 00:38:52,050 mitä kenties selvää syytä? >> [Äänetön opiskelijan vastausta] 603 00:38:52,050 --> 00:38:53,440 Siellä on paljon toistoa, eikö? 604 00:38:53,440 --> 00:38:57,270 Jotta lähettää Saksan lippu, ajatella tämän olevan kuvan näytöllä 605 00:38:57,270 --> 00:38:59,030 takaisin teidän Scratch päivää. 606 00:38:59,030 --> 00:39:02,380 Saatat muistaa, että on olemassa yksittäisiä pikseleitä tai pisteitä, jotka muodostavat kuvan. 607 00:39:02,380 --> 00:39:06,650 >> On koko rivi mustia pisteitä ja toinen koko rivi mustia pisteitä. 608 00:39:06,650 --> 00:39:10,110 On joukko riviä mustia pisteitä, että voisimme nähdä, jos todella zoomataan, 609 00:39:10,110 --> 00:39:13,370 mielelläni kun zoomataan Rob kasvot Photoshop. 610 00:39:13,370 --> 00:39:15,500 Heti kun saimme syvemmälle ja syvemmälle ja syvemmälle kuvan, 611 00:39:15,500 --> 00:39:19,990 olet alkanut nähdä pikselöitymistä, kaikki ruudut jotka sävelsi silmä tässä tapauksessa. 612 00:39:19,990 --> 00:39:24,130 Sama käsitellä täällä. Jos me zoomataan varsin vähän, voit nähdä yksittäisiä pisteitä. 613 00:39:24,130 --> 00:39:27,110 No, tämä on eräänlainen jätteen bittejä. 614 00:39:27,110 --> 00:39:32,120 Jos kolmasosa lipun on musta ja kolmasosa lipun on keltainen, ja niin edelleen, 615 00:39:32,120 --> 00:39:34,860 miksi emme jotenkin pakata tämä lippu? 616 00:39:34,860 --> 00:39:39,560 Ja vaikka Ranskan lipun voi pakata vaikka malli on hieman erilainen. 617 00:39:39,560 --> 00:39:44,120 On käynyt ilmi, GIF-tiedostomuoto on häviötön pakkausmuoto, 618 00:39:44,120 --> 00:39:48,420 mikä tarkoittaa, että voit ottaa kuvan kaltainen Saksan lippu täällä, 619 00:39:48,420 --> 00:39:53,540 voit heittää pois paljon sen bittien laadusta tinkimättä. 620 00:39:53,540 --> 00:39:55,340 Tämä on päinvastoin kuin jotain JPEG, 621 00:39:55,340 --> 00:39:57,050 jonka useimmat meistä ovat todennäköisesti tuttuja. 622 00:39:57,050 --> 00:39:59,000 Facebook-valokuvia ja Flickr-valokuvia ja vastaavat 623 00:39:59,000 --> 00:40:02,200 ovat lähes aina tallennetaan JPEG, kun ne ladataan, 624 00:40:02,200 --> 00:40:08,100 mutta JPEG on häviöllinen - häviöllinen - muodossa, että et heittää pois bittiä 625 00:40:08,100 --> 00:40:10,430 mutta voit myös heittää pois laatuun. 626 00:40:10,430 --> 00:40:13,890 Joten jos voit pakata valokuvia Photoshop tai ladata niitä Facebook 627 00:40:13,890 --> 00:40:15,580 tai ottaa ne todella kehno puhelin, 628 00:40:15,580 --> 00:40:19,510 tiedät että kuva alkaa saada hyvin laikukkailta ja pixelated, 629 00:40:19,510 --> 00:40:22,290 ja että koska se on puristamista tietokoneen tai puhelimen 630 00:40:22,290 --> 00:40:24,550 kirjaimellisesti heittää tietoa pois. 631 00:40:24,550 --> 00:40:28,500 Mutta GIF on hämmästyttävää, että se voi käyttää vähemmän bittejä kuin se voisi oletusarvoisesti 632 00:40:28,500 --> 00:40:30,750 menettämättä mitään tietoja. 633 00:40:30,750 --> 00:40:32,410 >> Ja se pohjimmiltaan tekee niin seuraavasti. 634 00:40:32,410 --> 00:40:38,740 Sen sijaan säilytä tiedosto kuten BMP olisi RGB kolminkertainen musta, musta, musta, musta, 635 00:40:38,740 --> 00:40:42,570 musta, musta, musta, musta, musta, musta, musta, musta ja niin edelleen, 636 00:40:42,570 --> 00:40:45,640 pikemminkin, GIF aikoo sanoa, "musta" 637 00:40:45,640 --> 00:40:48,330 ja sitten "Toista tämä 100 kertaa," tai jotain sinne päin. 638 00:40:48,330 --> 00:40:52,280 "Musta, toista tämä 100 kertaa, musta, toista tämä 100 kertaa ..." 639 00:40:52,280 --> 00:40:54,530 "Keltainen, toista 100 kertaa." 640 00:40:54,530 --> 00:40:57,200 Ja niin se muistaa lähinnä vasemmanpuoleisin pikselin 641 00:40:57,200 --> 00:41:02,160 ja sitten koodaa jotenkin käsite toistamalla, että pikselin uudestaan ​​ja uudestaan. 642 00:41:02,160 --> 00:41:06,110 Joten GIF voi sitten puristaa itseään menettämättä mitään tietoja. 643 00:41:06,110 --> 00:41:09,510 Mutta jos pitäisi arvata, jos se on algoritmi, joka GIF käyttöä, 644 00:41:09,510 --> 00:41:13,180 mikä näistä lippuja, vaikka ne näyttävät samankokoisia, 645 00:41:13,180 --> 00:41:19,620 tulee olemaan pienempi kun tallennetaan levylle GIF? >> [Opiskelija] Saksa. 646 00:41:19,620 --> 00:41:21,660 Saksa tulee olemaan pienempi? Miksi? 647 00:41:21,660 --> 00:41:26,620 [Opiskelija] Koska toistat sitä monta, monta kertaa vaakasuunnassa 648 00:41:26,620 --> 00:41:29,010 ja sitten toista toisen kerran. >> Aivan. 649 00:41:29,010 --> 00:41:32,020 Koska ihmiset keksivät GIF juuri sellainen mielivaltaisesti päätetty 650 00:41:32,020 --> 00:41:36,040 että toisto on panostettava horisontaalisesti ja ei sivusuunnassa. 651 00:41:36,040 --> 00:41:40,900 Siellä on paljon enemmän toistoa sivusuunnassa täällä Saksan lipun kuin Ranskan lipun. 652 00:41:40,900 --> 00:41:44,430 Joten jos me todella avata kansio kiintolevyllä, jolla on nämä GIF, 653 00:41:44,430 --> 00:41:51,920 voit itse nähdä, että Saksan lippu täällä on 2 kilotavua ja ranskalaisten on 4 kilotavua. 654 00:41:51,920 --> 00:41:54,080 Se sattuu olemaan sattumaa, että yksi on kaksi kertaa muita, 655 00:41:54,080 --> 00:41:57,960 mutta se on itse asiassa siinä tapauksessa, että Ranskan lipun on paljon suurempi. 656 00:41:57,960 --> 00:42:01,250 >> Vaikka me puhumme täällä grafiikkaa, samoja ideoita voi soveltaa 657 00:42:01,250 --> 00:42:05,150 ei asioita kuten lippuja, mutta kuvat ovat hieman monimutkaisempia. 658 00:42:05,150 --> 00:42:08,170 Jos otat kuvan omena, varmasti siellä on paljon päällekkäisyyttä siellä, 659 00:42:08,170 --> 00:42:11,040 jotta voisimme jotenkin muistaa, että oletuksena tausta on sininen 660 00:42:11,040 --> 00:42:13,230 eikä, kuten oikeanpuoleisessa kuvassa ehdottaa, 661 00:42:13,230 --> 00:42:16,830 täytyy muistaa värin jokaisen pikselin tätä kuvaa. 662 00:42:16,830 --> 00:42:21,060 Joten voimme heittää bittiä pois siellä menettämättä tietoja. 663 00:42:21,060 --> 00:42:23,340 Apple näyttää silti aivan sama. 664 00:42:23,340 --> 00:42:27,510 Tässä esimerkki tästä, saatat nähdä mitä tapahtuu elokuvassa. 665 00:42:27,510 --> 00:42:31,970 Nämä ovat vanhan koulun elokuva rullat jolloin parhaan kuvan siellä 666 00:42:31,970 --> 00:42:36,900 sinulla RV ajo ohi talon ja puun. 667 00:42:36,900 --> 00:42:42,130 Ja kuin van ajaa ohi vasemmalta oikealle, mitä ilmeisesti ei muutu? 668 00:42:42,130 --> 00:42:45,320 Talo ei ole menossa minnekään, ja puu ei ole menossa minnekään. 669 00:42:45,320 --> 00:42:47,700 Ainoa asia, joka liikkuu on van tässä asiassa. 670 00:42:47,700 --> 00:42:51,650 Niin Taustaa Muuttumaton ehdottaa, mitä voit tehdä elokuvia 671 00:42:51,650 --> 00:42:56,530 on samalla vain heittää pois tietoa, joka ei muutu kehysten välillä. 672 00:42:56,530 --> 00:42:58,900 Tämä tunnetaan yleisesti välisen tiivistyksen 673 00:42:58,900 --> 00:43:02,120 jolloin jos tämä runko näyttää lähes identtinen tämän yhden, 674 00:43:02,120 --> 00:43:05,390 älkäämme vaivata tallentamisen levylle mitään samat tiedot 675 00:43:05,390 --> 00:43:09,250 Näiden välikehykset, katsotaanpa käyttää vain avainkuvia kerran kun 676 00:43:09,250 --> 00:43:13,420 tosiasiallisesti tallentaa nämä tiedot redundantisti yhtä vähän järki tarkistaa. 677 00:43:13,420 --> 00:43:18,620 >> Sitä vastoin toinen lähestymistapa pakkaamalla video on tässä toisessa ja alempi esimerkki tästä, 678 00:43:18,620 --> 00:43:23,970 jos sen sijaan tallentaa 30 kuvaa, mikset vain tallentaa 15 kuvaa sekunnissa sijaan? 679 00:43:23,970 --> 00:43:27,070 Sen sijaan elokuva sellaista virtaa kauniisti, täydellisesti, 680 00:43:27,070 --> 00:43:30,060 Se saattaa näyttää se pätkivä hieman, hieman vanha koulu, 681 00:43:30,060 --> 00:43:37,190 mutta nettovaikutus on käyttää huomattavasti vähemmän bittejä kuin muuten saattaisi olla tarpeen. 682 00:43:37,190 --> 00:43:39,240 Joten mistä tämä sitten jättää meidät? 683 00:43:39,240 --> 00:43:41,700 Se oli hieman sivuun missä muualla voit mennä puristus. 684 00:43:41,700 --> 00:43:45,140 Lisätietoja siitä, että ottaa luokassa kuin CS175 täällä. 685 00:43:45,140 --> 00:43:46,990 Tässä toinen esimerkki videosta. 686 00:43:46,990 --> 00:43:49,190 Jos mehiläinen on ainoa asia liikkuu, 687 00:43:49,190 --> 00:43:51,790 voit todella heittää pois tiedot näiden keskellä kehykset 688 00:43:51,790 --> 00:43:55,260 koska kukka ja taivas ja lehdet eivät muutu. 689 00:43:55,260 --> 00:43:57,960 Mutta katsotaanpa nyt harkita yhden asian. 690 00:43:57,960 --> 00:44:03,890 Seuraavan 5 minuuttia jätämme C taakse ikuisesti luento? Kyllä. Ei psets, tosin. 691 00:44:03,890 --> 00:44:10,210 Viimeinen tarina C ja sitten pääsemme hyvin seksikäs juttuja 692 00:44:10,210 --> 00:44:13,870 johon HTML ja Web-ja Woo-hoo. Selvä. 693 00:44:13,870 --> 00:44:16,050 Täällä mennään. Se motivaatio. 694 00:44:16,050 --> 00:44:20,020 On käynyt ilmi, kaikki tämä kun olemme kirjallisesti ohjelmia otamme clang. 695 00:44:20,020 --> 00:44:23,890 Ja clang, olemme sanoneet, koska ensimmäisellä viikolla melko paljon, vie lähdekoodi 696 00:44:23,890 --> 00:44:25,740 ja muuntaa sen kohdekoodilla. 697 00:44:25,740 --> 00:44:28,540 Se vie C ja muuntaa sen 0s ja 1s. 698 00:44:28,540 --> 00:44:32,150 Olen tavallaan valehdellut teille muutaman viikon, koska se ei ole aivan niin yksinkertaista. 699 00:44:32,150 --> 00:44:36,750 >> Siellä on paljon enemmän tekeillä alla huppu, kun suoritat ohjelman kaltainen clang. 700 00:44:36,750 --> 00:44:39,560 Itse asiassa laadintaprosessin ohjelma voidaan todella tiivistää, 701 00:44:39,560 --> 00:44:42,210 kuten ehkä muistatte Rob video kerääjiä, 702 00:44:42,210 --> 00:44:47,580 näitä 4 vaiheet: esikäsittely, kokoamiseen itse kokoonpano, ja yhdistää. 703 00:44:47,580 --> 00:44:51,950 Mutta me luokassa ja useimmat ihmiset maailmassa tyypillisesti yhteenveto kaikista näistä toimista 704 00:44:51,950 --> 00:44:54,410 vain "kokoamisessa." 705 00:44:54,410 --> 00:44:58,070 Mutta jos aloitamme lähdekoodi näin, muistaa tämä on ehkä yksinkertaisin C-ohjelma 706 00:44:58,070 --> 00:45:03,530 olemme kirjoittaneet toistaiseksi, muistaa, että kun käännetty se päätyy näyttämään tätä. 707 00:45:03,530 --> 00:45:07,310 Mutta on todella välivaihe, ja nämä vaiheet ovat seuraavat. 708 00:45:07,310 --> 00:45:10,750 Ensimmäinen on tämä juttu huipulla tämän ja useimmat ohjelmat, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Mitä # include tehdä meille? 711 00:45:17,210 --> 00:45:24,150 Se aika paljon kopioita ja pastat sisältö stdio.h minun tiedoston niin, että miksi? 712 00:45:24,150 --> 00:45:27,220 Miksi välitä sisällöstä stdio.h? Mitä siellä kiinnostaa? 713 00:45:27,220 --> 00:45:32,310 Printf ilmoituksen, sen prototyyppi, jotta kääntäjä sitten tietää mitä tarkoitan 714 00:45:32,310 --> 00:45:34,900 kun mainitsen tämän toiminnon printf. 715 00:45:34,900 --> 00:45:39,390 Joten vaihe 1 kokoamisessa on esikäsittelyä, jolloin ohjelma kuten clang 716 00:45:39,390 --> 00:45:43,450 tai jotkut auttaja ohjelman clang mukana lukee koodi ylhäältä alas, 717 00:45:43,450 --> 00:45:47,740 vasemmalta oikealle, ja aina se näkee # symbolin jälkeen avainsanaksi sisältyy 718 00:45:47,740 --> 00:45:53,980 se suorittaa kyseisen operaation, kopiointi ja liittäminen tässä tapauksessa stdio.h omaan tiedostoon. 719 00:45:53,980 --> 00:45:55,510 Tuo vaihe 1. 720 00:45:55,510 --> 00:45:59,620 Sitten sinulla on paljon suurempi C-tiedosto, koska valtava kopioida, liittää työn, joka on juuri tapahtunut. 721 00:45:59,620 --> 00:46:01,710 >> Vaihe 2 Nyt on kokoamassa. 722 00:46:01,710 --> 00:46:04,880 Mutta se osoittautuu kokoamiseen vie lähdekoodi, joka näyttää tältä 723 00:46:04,880 --> 00:46:08,160 ja muuntaa sen jotain, joka näyttää tältä, 724 00:46:08,160 --> 00:46:12,560 joka niille tuttuja kutsutaan? >> [Opiskelija] Assembly. >> Konekielellä. 725 00:46:12,560 --> 00:46:16,700 Tämä on todella jotain jos otat CS61 sinun sukeltaa tarkemmin. 726 00:46:16,700 --> 00:46:22,380 Tämä on aivan yhtä lähellä kuin voit saada kirjallisesti 0s ja 1s itse 727 00:46:22,380 --> 00:46:25,850 mutta kirjoittaa asiat siten, että vielä tekee ainakin vähän järkeä. 728 00:46:25,850 --> 00:46:30,760 Nämä ovat kone ohjeet, ja jos me selaa päätehtävä täällä, 729 00:46:30,760 --> 00:46:35,470 huomaa, että tämä push ohje, siirrä opetusta, vähennä opetusta, 730 00:46:35,470 --> 00:46:38,550 soittaa opetusta, ja niin edelleen. 731 00:46:38,550 --> 00:46:42,930 Kun kuulet, että tietokoneessa on Intel Inside, 732 00:46:42,930 --> 00:46:46,180 sinulla on Intel CPU Macin tai PC, mitä se tarkoittaa? 733 00:46:46,180 --> 00:46:51,200 CPU tulee sisäänrakennettu yritykset, kuten Intel ymmärtämään tiettyjä ohjeita. 734 00:46:51,200 --> 00:46:55,770 Heillä ei ole aavistustakaan, mitä toimintoja kuten swap tai tärkeimmät ovat sinänsä, 735 00:46:55,770 --> 00:47:00,060 mutta he eivät tiedä, mitä hyvin matalan tason ohjeet, kuten lisätä, vähentää, työnnä, 736 00:47:00,060 --> 00:47:02,430 liikkua, soittaa, ja niin edelleen ovat. 737 00:47:02,430 --> 00:47:06,170 Joten kun käännät C koodin konekielellä, 738 00:47:06,170 --> 00:47:11,820 voit hyvin käyttäjäystävällinen näyttäviä koodi muunnetaan jotain, joka näyttää tältä, 739 00:47:11,820 --> 00:47:21,670 että kirjaimellisesti liikkuu tavua tai 4 tavua ympärillä niin pieniä yksiköitä ja ulos CPU. 740 00:47:21,670 --> 00:47:26,820 Mutta lopulta, kun clang on valmis ottamaan tämän edustus ohjelma 741 00:47:26,820 --> 00:47:30,940 osaksi 0s ja 1s, sitten vaihe nimeltään kokoonpano tapahtuu, 742 00:47:30,940 --> 00:47:33,850 ja tämä taas kaikki tapahtuu silmänräpäyksessä ajettaessa clang. 743 00:47:33,850 --> 00:47:39,300 Alkaa tässä, se tuottaa tiedoston, kuten tämä, ja sitten se muuntaa sen nämä 0s ja 1s. 744 00:47:39,300 --> 00:47:42,000 Ja jos haluat mennä takaisin jossain vaiheessa, ja todella nähdä tämän toiminnassa, 745 00:47:42,000 --> 00:47:48,220 jos menen hello1.c--tämä on yksi ensimmäisistä ohjelmista tarkastelimme - 746 00:47:48,220 --> 00:47:53,710 normaalisti olisimme koota tätä clang hello1.c ja tämä antaa meille a.out. 747 00:47:53,710 --> 00:47:59,890 Jos sitä vastoin olet vaan antaa sille-S lippua, mitä saat on hello1.s 748 00:47:59,890 --> 00:48:02,750 ja voit itse nähdä konekielellä. 749 00:48:02,750 --> 00:48:05,750 >> Teen tämän hyvin lyhyt ohjelma, mutta jos et mene takaisin Scramble 750 00:48:05,750 --> 00:48:08,740 tai talteen tai minkä tahansa ohjelman olet kirjoittanut ja vain uteliaisuudesta 751 00:48:08,740 --> 00:48:13,240 haluavat nähdä, mitä se todella näyttää, mitä todella syötetään CPU, 752 00:48:13,240 --> 00:48:15,700 voit käyttää sitä-S lippu clang. 753 00:48:15,700 --> 00:48:17,770 Mutta sitten lopuksi, siellä on vielä yksi Sainpas. 754 00:48:17,770 --> 00:48:21,810 Tässä ovat 0 ja 1s jotka edustavat minun täytäntöönpano Hello, world. 755 00:48:21,810 --> 00:48:25,530 Mutta käytin jonkun toisen funktion minun ohjelmaan. 756 00:48:25,530 --> 00:48:28,710 Joten vaikka prosessi on ollut Otan hello.c, 757 00:48:28,710 --> 00:48:34,280 se saa kootaan kokoonpano koodi, ja sitten se saa koota 0s ja 1s, 758 00:48:34,280 --> 00:48:37,460 ainoa 0s ja 1s, jotka on tulostettu tässä vaiheessa 759 00:48:37,460 --> 00:48:40,270 ovat niitä, jotka johtuvat minun koodi. 760 00:48:40,270 --> 00:48:44,400 Mutta henkilö, joka kirjoitti printf, he koonneet koodi 20 vuotta sitten 761 00:48:44,400 --> 00:48:47,000 ja se on nyt asennettu jonnekin laitteen 762 00:48:47,000 --> 00:48:51,610 joten jotenkin täytyy yhdistää hänen 0s ja 1s minun 0s ja 1s, 763 00:48:51,610 --> 00:48:56,160 ja että tuo meidät 4. ja viimeinen vaihe laatimisesta, tunnetaan yhdistää. 764 00:48:56,160 --> 00:48:58,680 Niin vasemmalla puolella meillä on täsmälleen sama kuva kuin ennen: 765 00:48:58,680 --> 00:49:02,580 hello.c tulee kokoonpano koodi tulee 0s ja 1s. 766 00:49:02,580 --> 00:49:05,960 Mutta muistuttaa, että käytin vakio I / O-kirjasto minun koodi, 767 00:49:05,960 --> 00:49:10,350 ja se tarkoittaa jonnekin tietokoneen siellä tiedosto nimeltä stdio.c 768 00:49:10,350 --> 00:49:13,980 tai ainakin käännetyn version sen takia joku joitakin vuosia sitten 769 00:49:13,980 --> 00:49:18,530 koottu stdio.c osaksi kokoonpanoon koodi ja sitten koko joukko 0s ja 1s. 770 00:49:18,530 --> 00:49:21,130 Tämä on mitä kutsutaan staattinen tai dynaaminen kirjasto. 771 00:49:21,130 --> 00:49:23,350 Se on joku tiedosto istuu jossain laitteessa. 772 00:49:23,350 --> 00:49:28,710 >> Mutta lopuksi minun on otettava minun 0s ja 1s ja kyseisen henkilön 0s ja 1s 773 00:49:28,710 --> 00:49:32,760 ja jotenkin yhdistää ne, kirjaimellisesti yhdistää nämä 0s ja 1s 774 00:49:32,760 --> 00:49:37,900 yhdeksi tiedosto nimeltä a.out tai hello1 tai mitä minä kutsuin ohjelma 775 00:49:37,900 --> 00:49:43,320 niin, että lopputulos on kaikki 1s ja 0s että olisi muodostavat oman ohjelman. 776 00:49:43,320 --> 00:49:45,660 Joten kaiken tämän ajan tällä lukukaudella kun olet käyttänyt clang 777 00:49:45,660 --> 00:49:48,750 ja vielä äskettäin käytetyistä tehdä, jotta ajaa clang, 778 00:49:48,750 --> 00:49:53,580 kaikki nämä vaiheet on tapahtunut eräänlainen hetkellisesti mutta hyvin tietoisesti. 779 00:49:53,580 --> 00:49:57,830 Ja niin jos jatkaa tietotekniikassa, nimittäin CS61, 780 00:49:57,830 --> 00:50:00,850 tämä on kerros, voit jatkaa kuori takaisin pois sieltä 781 00:50:00,850 --> 00:50:06,980 puhumme tehokkuudesta, turvallisuusnäkökohtia, ja kuten näiden alemman tason tiedot. 782 00:50:06,980 --> 00:50:09,220 Mutta se, olemme lähdössä C taakse. 783 00:50:09,220 --> 00:50:11,420 Mennään eteenpäin ja otamme 5 minuutin tauko nyt, 784 00:50:11,420 --> 00:50:14,190 ja kun tulemme takaisin: Internet. 785 00:50:17,280 --> 00:50:19,170 Selvä. Olemme takaisin. 786 00:50:19,170 --> 00:50:23,590 Nyt aloitamme tarkastella ei vain HTML, koska näette, 787 00:50:23,590 --> 00:50:26,050 HTML itsessään on oikeastaan ​​melko yksinkertainen 788 00:50:26,050 --> 00:50:29,270 mutta todella www ohjelmointi yleisemmin, verkostoituminen yleisemmin 789 00:50:29,270 --> 00:50:31,770 ja miten kaikki nämä teknologiat kohtaavat 790 00:50:31,770 --> 00:50:35,400 jotta voimme luoda paljon kehittyneempiä ohjelmia huipulla Internet 791 00:50:35,400 --> 00:50:38,690 kuin tähän asti olemme pystyneet näissä mustavalkoisena ikkunat. 792 00:50:38,690 --> 00:50:42,140 Itse asiassa tässä vaiheessa lukukauden, vaikka vietämme suhteellisesti vähemmän aikaa 793 00:50:42,140 --> 00:50:46,200 PHP, HTML, CSS, JavaScript, SQL ja enemmän, 794 00:50:46,200 --> 00:50:48,480 useimmat opiskelijat päätyvät tekemään lopullisen hankkeita, jotka ovat web-pohjaisia 795 00:50:48,480 --> 00:50:51,230 koska kuten näet, tausta sinulla on nyt C 796 00:50:51,230 --> 00:50:54,450 on hyvin soveltaa näitä korkeamman tason kielillä. 797 00:50:54,450 --> 00:50:56,800 >> Ja kun alkaa miettiä opinnäytetyö, 798 00:50:56,800 --> 00:50:59,940 joka, aivan kuten Problem Set 0, jossa kehotettiin 799 00:50:59,940 --> 00:51:02,160 tehdä useimmat mitään kiinnostaa sinua Scratch, 800 00:51:02,160 --> 00:51:05,790 Opinnäytetyö on teidän tilaisuus ottaa newfound tietoa ja taju kanssa C 801 00:51:05,790 --> 00:51:09,850 tai PHP tai JavaScript tms. ulos spin 802 00:51:09,850 --> 00:51:12,330 ja luoda ikioma pala ohjelmisto maailmassa nähdä. 803 00:51:12,330 --> 00:51:17,770 Ja siemen sinulle ideoita, tietävät, että voit suunnata tänne, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Joka vuosi, me pyydämme ideoita tiedekunnan ja henkilökunnan sekä opiskelijaryhmille kampuksella 805 00:51:21,800 --> 00:51:27,330 vain esittämään ideoita mielenkiintoisia asioita, jotka voidaan ratkaista käyttämällä tietokoneita, 806 00:51:27,330 --> 00:51:29,860 käyttävät sivustot käyttämällä ohjelmistoa. 807 00:51:29,860 --> 00:51:32,360 Joten jos olet kamppailee keksimään ajatus oman, 808 00:51:32,360 --> 00:51:35,790 kaikki keinot selata ideoita siellä tänä ja viime. 809 00:51:35,790 --> 00:51:39,990 Se on täysin kunnossa puuttua hankkeeseen, joka on ratkaistava ennen. 810 00:51:39,990 --> 00:51:44,540 Olemme nähneet monia apps nähdä tilan pyykin kampuksella, 811 00:51:44,540 --> 00:51:47,000 monet sovellukset navigointiin ruokasali valikosta 812 00:51:47,000 --> 00:51:49,540 monet sovellukset navigointiin kurssiluetteloon ja vastaavat. 813 00:51:49,540 --> 00:51:53,680 Ja todellakin, tulevassa luento ja tulevien seminaarien, 814 00:51:53,680 --> 00:51:57,750 tuomme sinulle joitakin julkisesti saatavilla API, niin kaupallisesti saatavilla 815 00:51:57,750 --> 00:52:02,520 sekä täällä saatavilla CS50 kampuksella niin, että sinulla on pääsy tietoihin 816 00:52:02,520 --> 00:52:04,910 ja voi sitten tehdä mielenkiintoisia asioita sen kanssa. 817 00:52:04,910 --> 00:52:09,380 Joten lisää lopullisesta hankkeita muutaman päivän kun vapautat erittely, 818 00:52:09,380 --> 00:52:12,990 mutta nyt tiedän, että voit työskennellä yksin tai yhden tai kahden ystävänsä 819 00:52:12,990 --> 00:52:16,010 useimmissa tahansa hanke kiinnostaa sinua. 820 00:52:16,010 --> 00:52:18,080 Internetissä. 821 00:52:18,080 --> 00:52:22,300 Voit mennä eteenpäin ja vedä kannettavan tietokoneen, voit mennä facebook.com ensimmäistä kertaa, 822 00:52:22,300 --> 00:52:27,020 se ei ole kirjautunut äskettäin, ja paina Enter. Mitä tarkalleen tapahtuu? 823 00:52:27,020 --> 00:52:30,150 >> Kun osut Anna tietokoneen, koko joukko toimenpiteitä 824 00:52:30,150 --> 00:52:32,600 aloittaa tavallaan maagisesti tapahtuu. 825 00:52:32,600 --> 00:52:35,960 Joten täällä vasemmalla, web-palvelin, kuten Facebook on täällä oikealla, 826 00:52:35,960 --> 00:52:42,500 ja jotenkin käytät tällä kielellä kutsutaan HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP ei ohjelmointikieli. Se on enemmän protokollan. 828 00:52:46,770 --> 00:52:52,310 Se on joukko yleissopimuksia, selaimet ja www-palvelimet käyttävät kun toisiinsa yhteydessä. 829 00:52:52,310 --> 00:52:54,360 Ja mitä tämä tarkoittaa on seuraavanlainen. 830 00:52:54,360 --> 00:52:56,790 Aivan kuten todellisessa maailmassa, meillä on nämä yleissopimukset 831 00:52:56,790 --> 00:53:00,140 jos jos tapaat joitakin ihmisen ensimmäistä kertaa, jos et pahastu humoring minua tänne, 832 00:53:00,140 --> 00:53:03,980 En voisi keksiä sinulle sanoa, "Hei, nimeni on David." >> Hei, David. Nimeni on Sammy. 833 00:53:03,980 --> 00:53:05,770 "Hei, David. Nimeni on Sammy." 834 00:53:05,770 --> 00:53:08,310 Joten nyt olemme juuri mukana tällainen typerä ihmisen protokollan 835 00:53:08,310 --> 00:53:12,200 jossa olen aloittanut protokollaa, Sammy on vastannut, 836 00:53:12,200 --> 00:53:15,060 olemme ravistetaan käsissä, ja kauppa on valmis. 837 00:53:15,060 --> 00:53:18,260 HTTP on hyvin samanlainen hengessä. 838 00:53:18,260 --> 00:53:23,350 Kun selaimen pyyntöjä www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 Mikä selain on todella tekee on laajentaa sen sijaan niin sanotusti, 840 00:53:27,020 --> 00:53:29,960 palvelimeen ja se lähettämällä sille sanoman. 841 00:53:29,960 --> 00:53:34,220 Ja se sanoma on tyypillisesti jotain jää - mitä haluat saada? - 842 00:53:34,220 --> 00:53:38,740 saada minut kotisivu, joka on tyypillisesti merkitty vinoviivalla lopussa URL. 843 00:53:38,740 --> 00:53:43,790 Ja juuri niin tiedät mitä kieltä puhun, minä selaimen aion kertoa teille 844 00:53:43,790 --> 00:53:46,930 että Puhun HTTP versio 1.1, 845 00:53:46,930 --> 00:53:51,980 Ja myös hyvä toimenpide, aion kertoa teille, että isäntä että haluan kotisivu 846 00:53:51,980 --> 00:53:54,120 on facebook.com. 847 00:53:54,120 --> 00:53:57,730 Tyypillisesti selain, tietämättä sinulle, ihminen, 848 00:53:57,730 --> 00:54:03,350 lähettää tämän viestin Internetin kautta, kun yksinkertaisesti kirjoittamalla www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Anna, selaimeesi. 850 00:54:05,370 --> 00:54:07,300 Ja mitä Facebook vastata? 851 00:54:07,300 --> 00:54:12,540 Se vastaa joidenkin samannäköisten arvoituksellinen yksityiskohtia, mutta myös paljon enemmän. 852 00:54:12,540 --> 00:54:14,310 Anna minun mennä eteenpäin Facebookin kotisivulle täällä. 853 00:54:14,310 --> 00:54:17,480 Tämä on näytön että useimmat meistä luultavasti koskaan nähdä jos pysyt kirjautuneena koko ajan, 854 00:54:17,480 --> 00:54:19,830 mutta tämä on todellakin heidän kotisivun. 855 00:54:19,830 --> 00:54:24,150 Jos teemme tämän Chrome, huomaat, että voit vetää nämä pikku pikavalikot. 856 00:54:24,150 --> 00:54:26,980 Käyttämällä Chrome, onko Mac OS, Windows, Linux tai vastaava, 857 00:54:26,980 --> 00:54:31,840 Jos ohjaat napsautuksella tai vasemmalle napsautuksella voit yleensä vetää jopa valikon, joka näyttää tältä, 858 00:54:31,840 --> 00:54:35,870 jossa muutamia vaihtoehtoja odottavat, joista yksi on View Page Source. 859 00:54:35,870 --> 00:54:39,920 Voit myös yleensä saada näitä asioita menemällä View-valikkoon ja tönäisi ympäri. 860 00:54:39,920 --> 00:54:42,750 Esimerkiksi tässä kohdassa View, kehittäjä on sama asia. 861 00:54:42,750 --> 00:54:45,780 Aion mennä eteenpäin ja katsoa View Page Source. 862 00:54:45,780 --> 00:54:50,800 Mitä näet on HTML että Mark on kirjoittanut edustamaan facebook.com. 863 00:54:50,800 --> 00:54:55,910 Se on täydellinen sotku täällä, mutta me näemme, että tämä tekee hieman järkeä ennen pitkää. 864 00:54:55,910 --> 00:54:59,840 Mutta on olemassa joitakin malleja täällä. Saanen selaa tavaraa kuten tämä. 865 00:54:59,840 --> 00:55:05,730 Tämä on vaikea ihmisen lukea, mutta huomaa, että tämä malli Asennuskiinnikkeet 866 00:55:05,730 --> 00:55:10,360 avainsanoilla kuten vaihtoehdossa avainsanat arvo, jotkut lainattu jouset. 867 00:55:10,360 --> 00:55:15,660 Tämä on silloin, kun loit ensimmäistä kertaa, on määritelty mitä syntymävuosi on. 868 00:55:15,660 --> 00:55:19,020 Että avattavasta valikosta syntymävuodet on jotenkin koodattu täällä 869 00:55:19,020 --> 00:55:23,870 tällä kielellä kutsutaan HTML, Hypertext Markup Language. 870 00:55:23,870 --> 00:55:27,730 Toisin sanoen, kun selain pyytää web-sivun, 871 00:55:27,730 --> 00:55:30,610 se puhuu tämän yleissopimuksen nimeltään HTTP. 872 00:55:30,610 --> 00:55:35,170 Mutta mitä facebook.com vastata tähän pyyntöön? 873 00:55:35,170 --> 00:55:38,260 >> Se vastaa joitakin näistä kryptisiä viestejä, kuten tulemme näkemään hetken. 874 00:55:38,260 --> 00:55:43,760 Mutta suurin osa sen vastaus on muodossa HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 Että on todellinen kieli, jolla web-sivulla on kirjoitettu. 876 00:55:47,170 --> 00:55:52,030 Ja mikä selain todella niin on, saatuaan jotain, joka näyttää tältä, 877 00:55:52,030 --> 00:55:57,120 lukee ylhäältä alas, vasemmalta oikealle, ja aina kun se näkee yhden näistä kulma suluissa 878 00:55:57,120 --> 00:56:03,370 seurasi avainsanaksi vaihtoehto, se näyttää että sivunkuvauskielen asianmukaisella tavalla. 879 00:56:03,370 --> 00:56:06,820 Tässä tapauksessa se näyttää pudotusvalikosta vuosia. 880 00:56:06,820 --> 00:56:09,240 Mutta jälleen kerran, tämä on täydellinen sotku katsomaan. 881 00:56:09,240 --> 00:56:16,630 Tämä ei johdu Facebook kehittäjät ilmenevät 0 5 tyyliä, esimerkiksi. 882 00:56:16,630 --> 00:56:20,190 Tämä johtuu siitä, useimmat koodin, että ne kirjoittavat on, itse asiassa, kirjoittaneet kauniisti, 883 00:56:20,190 --> 00:56:22,450 hyvin kommentoitu, kauniisti sisennetty, ja vastaavat, 884 00:56:22,450 --> 00:56:26,080 mutta tietenkin, tietokoneet, selaimet eivät todellakaan kiinnosta 885 00:56:26,080 --> 00:56:27,890 onko koodi on hyvin tyylistä. 886 00:56:27,890 --> 00:56:33,100 Ja itse asiassa se on täysin turhaa lyödä sarkainnäppäintä kaikki ajat 887 00:56:33,100 --> 00:56:37,650 ja laittaa kommentteja kaikki koko koodi ja valita todella kuvaavia muuttujan nimiä 888 00:56:37,650 --> 00:56:42,340 koska jos selain ei välitä, kaikki teette lopussa päivän tuhlaa tavua. 889 00:56:42,340 --> 00:56:46,660 >> Joten se osoittautuu mitä useimmat sivustot tehdä on vaikka lähdekoodi facebook.com, 890 00:56:46,660 --> 00:56:49,550 varten cs50.net ja kaikki nämä muut sivustot Internetissä 891 00:56:49,550 --> 00:56:53,730 ovat tyypillisesti hyvin kirjoitettu ja hyvin kommentoitu ja kauniisti sisennetään ja vastaavat, 892 00:56:53,730 --> 00:56:59,270 tyypillisesti ennen sivusto on otettu kiinni Internetissä, koodi on Minified, 893 00:56:59,270 --> 00:57:02,970 jolloin HTML ja CSS - jotain muuta me pian nähdä - 894 00:57:02,970 --> 00:57:05,960 JavaScript-koodia me pian nähdä puristetaan, 895 00:57:05,960 --> 00:57:09,250 jolloin pitkä muuttujanimet tullut X ja Y ja Z, 896 00:57:09,250 --> 00:57:13,900 ja kaikki tämä välilyönnillä, joka tekee kaiken näyttämään niin luettavassa on kaikki heitetään pois, 897 00:57:13,900 --> 00:57:17,700 koska jos ajattelee sitä tällä tavalla, Facebook saa miljardin sivun osumia päivässä - 898 00:57:17,700 --> 00:57:21,670 jotain hullua sellaista - niin mitä jos ohjelmoija vain olla anaali 899 00:57:21,670 --> 00:57:26,660 välilyöntiä yksi ylimääräinen aika vain luetelmakohdan joitakin koodirivin koskaan niin paljon enemmän? 900 00:57:26,660 --> 00:57:29,500 Mitä vaikutuksia jos Facebook säilyttää että whitespace 901 00:57:29,500 --> 00:57:32,880 kaikissa tavujen he lähettää takaisin ihmiset Internetissä? 902 00:57:32,880 --> 00:57:36,400 Lyömällä välilyöntinäppäintä kun saat ylimääräistä tavun tiedoston. 903 00:57:36,400 --> 00:57:39,730 Ja jos miljardi ihmistä jatka ladata kotisivulle sinä päivänä, 904 00:57:39,730 --> 00:57:42,060 kuinka paljon enemmän tietoa olet lähetetään internetin? 905 00:57:42,060 --> 00:57:45,200 Gigabyte mitään hyvää syytä. 906 00:57:45,200 --> 00:57:48,510 Ja myönnetään, on paljon sivustoja tämä ei ole sellainen skaalautuva asia, 907 00:57:48,510 --> 00:57:51,030 mutta Facebook, Google, joitakin suosituimmista sivustot 908 00:57:51,030 --> 00:57:54,860 siellä on hyvä kannustin taloudellisesti tehdä koodia näyttämään sotku 909 00:57:54,860 --> 00:57:58,980 niin että käytät mahdollisimman vähän tavua mahdollisimman lisäksi puristamalla sitä 910 00:57:58,980 --> 00:58:01,500 käyttäen jotain zip, algoritmi nimeltään gzip, 911 00:58:01,500 --> 00:58:04,250 että selain tekee sinulle automaattisesti. Mutta tämä on kamalaa. 912 00:58:04,250 --> 00:58:08,060 Emme koskaan opi mitään muiden ihmisten sivustoja ja miten suunnitella verkkosivuja 913 00:58:08,060 --> 00:58:09,680 jos meidän on tarkasteltava sitä näin. 914 00:58:09,680 --> 00:58:13,620 >> Joten onneksi selaimet kuten Chrome ja IE ja Firefox näinä päivinä 915 00:58:13,620 --> 00:58:16,450 tyypillisesti mukana sisäänrakennettu kehitystyökalut. 916 00:58:16,450 --> 00:58:21,730 Itse asiassa, jos menen tänne Tarkasta Element tai jos menen View, Developer, 917 00:58:21,730 --> 00:58:25,220 ja mene Developer Tools nimenomaisesti, 918 00:58:25,220 --> 00:58:27,640 Tämän ikkunan alareunassa minun tulee nyt näkyviin. 919 00:58:27,640 --> 00:58:31,230 Se on hieman uhkaava aluksi, koska siellä on paljon tuntemattomia välilehtiä tässä, 920 00:58:31,230 --> 00:58:34,510 mutta jos en klikkaa Elements aina alareunassa vasemmalla 921 00:58:34,510 --> 00:58:38,810 Chrome on ilmeisesti aika fiksu. Se osaa tulkita kaiken tämän koodin. 922 00:58:38,810 --> 00:58:42,320 Ja niin mitä Chrome ei se puhdistaa kaikki Facebookin HTML. 923 00:58:42,320 --> 00:58:45,680 Vaikka siellä ei ole välilyönnit siellä, siellä ei ole sisennys siellä, 924 00:58:45,680 --> 00:58:51,120 Nyt huomaan, että voin alkaa navigoida tällä sivulla sitäkin hierarkkisesti. 925 00:58:51,120 --> 00:58:56,910 On käynyt ilmi, että jokainen Web-sivu on kirjoitettu kielellä nimeltään HTML5 kannattaa aloittaa tästä, 926 00:58:56,910 --> 00:59:03,980 Tämän DOCTYPE ilmoitus, niin sanotusti: 927 00:59:03,980 --> 00:59:07,840 Se on tavallaan valoa ja harmaan siellä, mutta se on aivan ensimmäinen rivi koodia tässä tiedostossa, 928 00:59:07,840 --> 00:59:12,080 ja että vain kertoo selaimen, "Hei, tässä tulee joitakin HTML5. Täältä tulee sivun." 929 00:59:12,080 --> 00:59:18,490 Ensimmäinen alkusulkumerkki pidemmälle sattuu olemaan tämä asia, alkusulkumerkki HTML tag, 930 00:59:18,490 --> 00:59:22,320 ja sitten jos olen sukeltaa syvemmälle - nämä nuolet ovat täysin merkityksettömiä; 931 00:59:22,320 --> 00:59:25,140 ne vain esityksen vuoksi, ne eivät ole oikeastaan ​​tiedostoon - 932 00:59:25,140 --> 00:59:30,300 huomaa että sisällä Facebookin HTML tag, jotain, joka alkaa alkusulkumerkki 933 00:59:30,300 --> 00:59:32,910 ja sitten on sana kutsutaan tag. 934 00:59:32,910 --> 00:59:38,610 Joten sisällä HTML tagi on ilmeisesti pää tag ja body. 935 00:59:38,610 --> 00:59:41,930 Sisällä pään tag nyt koko sotku Facebook 936 00:59:41,930 --> 00:59:45,620 koska heillä on paljon metatietoja ja muita asioita markkinoinnin ja mainonnan. 937 00:59:45,620 --> 00:59:50,600 >> Mutta jos me selaa alas, alas, alas, alas, katsotaanpa missä se on. Tässä se on. 938 00:59:50,600 --> 00:59:52,210 Tämä on ainakin jonkin verran tuttuja. 939 00:59:52,210 --> 00:59:55,990 Otsikko Facebook-kotisivu, jos joskus katsoa välilehteä otsikkopalkissa, 940 00:59:55,990 --> 00:59:59,060 On Tervetuloa Facebook - Kirjaudu sisään, Rekisteröidy tai Lisätietoja. 941 00:59:59,060 --> 01:00:01,110 Sitähän sinä näkisit Chromen otsikkopalkissa, 942 01:00:01,110 --> 01:00:03,100 ja siitä se on edustettuna koodin. 943 01:00:03,100 --> 01:00:08,090 Jos jätämme kaiken muun päähän, useimmat rohkeutta verkkosivun ovat elin, 944 01:00:08,090 --> 01:00:10,940 ja käy ilmi, että Facebook-koodi tulee näyttämään monimutkaisempia 945 01:00:10,940 --> 01:00:14,540 kuin useimmat asiat me kirjoittaa aluksi vain koska se on rakennettu vuosien varrella, 946 01:00:14,540 --> 01:00:17,260 mutta siellä on koko paljon koodit itse, JavaScript-koodin, 947 01:00:17,260 --> 01:00:18,870 joka tekee sivustosta erittäin vuorovaikutteinen: 948 01:00:18,870 --> 01:00:22,330 nähdä tilapäivitykset heti käyttäen kieliä kuten JavaScript. 949 01:00:22,330 --> 01:00:25,270 Siinä on jotain kutsutaan div, joka on jako sivun. 950 01:00:25,270 --> 01:00:27,940 Mutta ennen kuin pääsemme siihen yksityiskohtia, yritetään loitontaa 951 01:00:27,940 --> 01:00:31,920 ja tarkastella yksinkertaisempi versio Facebook 1,0, niin sanoakseni. 952 01:00:31,920 --> 01:00:34,740 Tässä on Hello, world web-sivuja. 953 01:00:34,740 --> 01:00:37,370 Se on, että DOCTYPE ilmoitus huipulla 954 01:00:37,370 --> 01:00:40,280 joka on hieman erilainen kuin kaikki muu. 955 01:00:40,280 --> 01:00:46,130 Mitään muuta me kirjoittaa web-sivun aikoo aloittaa 01:00:48,880 ja lukuun ottamatta jotain kutsutaan kommentteja HTML. 957 01:00:48,880 --> 01:00:53,000 Mutta suurin osa, kaikki web-sivu on auki kiinnike, avainsanan, sulje kiinnike. 958 01:00:53,000 --> 01:00:56,220 >> Tällöin näet yksinkertaisin verkkosivujen mahdollista. 959 01:00:56,220 --> 01:01:00,260 HTML-tunniste sisältää pään tag ja se sisältää body, 960 01:01:00,260 --> 01:01:04,580 mutta huomaa, että tämä käsite käynnistys ja pysäytys tageja. 961 01:01:04,580 --> 01:01:11,360 Tämä on alku-tunniste HTML, tämä on lähellä tag tai lopputunnisteen. 962 01:01:11,360 --> 01:01:15,400 Huomaa, että he tavallaan vastakohtia siinä mielessä, että läheinen tag tai lopputunniste 963 01:01:15,400 --> 01:01:20,030 on tämä vinoviiva sisällä itse. 964 01:01:20,030 --> 01:01:23,540 Samalla siellä Avopäinen tag täällä ja sulje pää tag täällä. 965 01:01:23,540 --> 01:01:26,880 >> On avoin titteli ja tiivis otsikkokoodin täällä. 966 01:01:26,880 --> 01:01:29,850 Se, että olen laittanut otsikon yhdelle riville, täysin mielivaltainen. 967 01:01:29,850 --> 01:01:33,760 Se vain näytti se sopisi hyvin yhdelle riville, joten en vaivaudu Enteriä pari kertaa. 968 01:01:33,760 --> 01:01:38,200 Samaan aikaan, keho tein luetelmakohta vain olla koskaan niin selvä. 969 01:01:38,200 --> 01:01:41,050 Huomaa, että HTML on melko tyhmä kieli. 970 01:01:41,050 --> 01:01:43,410 Itse takaisin päivää ennen oli WYSIWYG editorit 971 01:01:43,410 --> 01:01:46,770 ja Microsoft Word jossa voit sanoa, "Tee tästä rohkea, jotta tämä kursiivilla" 972 01:01:46,770 --> 01:01:50,850 te todella kirjoittaa vähän komentoja esseitä 20 + vuotta sitten 973 01:01:50,850 --> 01:01:55,740 jolloin te sanotte: "Tehdään tämä lihavoida. lopettamaan tämän tekstin lihavoituna." 974 01:01:55,740 --> 01:01:59,010 "Alkaa tehdä tästä tekstistä kursiivilla. Lopettamaan tätä tekstiä kursiivilla." 975 01:01:59,010 --> 01:02:01,850 >> Sitähän HTML tai markup language on. 976 01:02:01,850 --> 01:02:05,530 Tämä ensimmäinen tag sanoo, "Hei, selaimen. Sieltä tulee joitakin HTML." 977 01:02:05,530 --> 01:02:09,880 Seuraava tag sanoo, "Hei, selain. Täältä tulee pään otsikkoa nettisivuilleni." 978 01:02:09,880 --> 01:02:11,650 "Hei, selain. Täältä tulee otsikko." 979 01:02:11,650 --> 01:02:15,880 Ja sitten tänne, "Hei, selain. Siinä se otsikko." 980 01:02:15,880 --> 01:02:20,000 Joten tämä on, miten selain tietää enää muita merkkejä kuin Hello, world 981 01:02:20,000 --> 01:02:21,860 vuonna otsikkorivillä. 982 01:02:21,860 --> 01:02:23,640 Samalla tämä sanoo, "Se on se pään." 983 01:02:23,640 --> 01:02:28,340 Tämä sanoo: "Täältä tulee ruumis. Tässä on todellinen kehon" - kirjaimellisesti, sanat Hello, world. 984 01:02:28,340 --> 01:02:33,190 Ja tämä sanoo tässä: "Se on se elin. Siinä on HTML." 985 01:02:33,190 --> 01:02:34,640 Joten selaimet ovat melko tyhmiä. 986 01:02:34,640 --> 01:02:39,920 He vain lukea tätä kamaa ylhäältä alas, vasemmalta oikealle, ja tehdä mitä he ovat kertoneet tehdä. 987 01:02:39,920 --> 01:02:41,860 Tehdään itse tehdä vähän esimerkiksi täällä. 988 01:02:41,860 --> 01:02:46,240 Saanen avata yksinkertaisin ohjelmien Macin täällä, nimittäin TextEdit. 989 01:02:46,240 --> 01:02:48,220 Windows voit käyttää Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Mutta tämä on kaikki mitä tarvitset alkaa tehdä web-sivuja. 991 01:02:50,520 --> 01:02:53,730 Aion mennä eteenpäin ja kopioi ja liitä tämä koodi tähän tiedostoon. 992 01:02:53,730 --> 01:02:57,210 Aion mennä eteenpäin ja tallenna se työpöydälle, 993 01:02:57,210 --> 01:03:01,220 ja aion tallentaa tämän hello.html, 994 01:03:01,220 --> 01:03:03,840 ja nyt tiedosto on nimetty hello.html. 995 01:03:03,840 --> 01:03:05,690 Täällä se on minun työpöydälle. 996 01:03:05,690 --> 01:03:11,130 Sallikaa minun nyt mennä selain ja vedä tiedosto selaimessa. 997 01:03:11,130 --> 01:03:14,060 Ja voila, tässä on minun ensimmäinen Web-sivu. 998 01:03:14,060 --> 01:03:17,340 Huomaa, että nimi-välilehti on Hello, world kohti otsikkokoodien 999 01:03:17,340 --> 01:03:20,040 ja huomaa, että hei, maailma on ruumis minun web-sivun, 1000 01:03:20,040 --> 01:03:22,190 ja Woo-hoo, olen internetissä. 1001 01:03:22,190 --> 01:03:24,700 >> En oikeastaan ​​ole, oikea, koska tämä tiedosto ei ole Internetissä. 1002 01:03:24,700 --> 01:03:28,330 Se sattuu olemaan minun paikalliselle kiintolevylle, että erityisesti polku. 1003 01:03:28,330 --> 01:03:32,720 Mutta ajatus on sama. Kaikki nyt tarvitsemme on web-palvelin, johon haluat ladata sen. 1004 01:03:32,720 --> 01:03:37,410 Mutta ensin itse ottaa hieman monimutkaisempaa ja hieman stylization. 1005 01:03:37,410 --> 01:03:39,890 Tämä on yksinkertainen, jos tylsää, web-sivun. 1006 01:03:39,890 --> 01:03:41,990 On käynyt ilmi, on olemassa muita tunnisteita voimme käyttää. 1007 01:03:41,990 --> 01:03:45,530 Esimerkiksi täällä keltainen Olen esitteli 2 uutta tageja. 1008 01:03:45,530 --> 01:03:49,630 Emme pelaa paljon näitä tänään, mutta huomaa, että linkki tag 1009 01:03:49,630 --> 01:03:52,520 jotenkin näyttää erilaiselta kaikesta muusta. 1010 01:03:52,520 --> 01:03:55,370 Link tag kestää mitä kutsutaan määritteitä, 1011 01:03:55,370 --> 01:03:59,770 ja attribuutti on jotain, joka muuttaa käyttäytymistä tunnisteen. 1012 01:03:59,770 --> 01:04:03,840 Tässä tapauksessa tämä ei ole paras valinta nimiä, linkin, koska se on tavallaan merkityksetön, 1013 01:04:03,840 --> 01:04:11,590 mutta tämä linkki tag sanoo, lähinnä kuuluu niminen tiedosto styles.css sisällä Web sivulla. 1014 01:04:11,590 --> 01:04:15,400 Voit ajatella tätä analoginen C: n # include direktiivi. 1015 01:04:15,400 --> 01:04:19,650 Styles.css viittaa eri kieltä kokonaan että emme pelaa tänään, 1016 01:04:19,650 --> 01:04:23,790 mutta se on estetiikkaa: fontin kokoa, värejä, täyte, sisennykset, reunukset, 1017 01:04:23,790 --> 01:04:26,040 ja kaikki tällaista estetiikkaa yksityiskohtia. 1018 01:04:26,040 --> 01:04:28,820 Samalla komentosarjatunnus on toiminnallisesti samanlainen, 1019 01:04:28,820 --> 01:04:33,140 mutta sen sijaan kuuluvat CSS, että kieli, se sisältää toisen kielen JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Eli toisin sanoen, nämä 2 tageja minä lopulta voi kirjoittaa oman web-sivun 1021 01:04:37,810 --> 01:04:41,490 mutta myös vetää koodissa että minä tai joku muu on kirjoittanut 1022 01:04:41,490 --> 01:04:44,350 jotta voimme seistä toisten harteille, voimme harjoitella hyvän suunnittelun, 1023 01:04:44,350 --> 01:04:46,120 factoring yhteiset koodia. 1024 01:04:46,120 --> 01:04:49,090 Jos minulla 10 eri verkkosivujen, tämä tarkoittaa, että jotkut estetiikka 1025 01:04:49,090 --> 01:04:52,490 voidaan laskea ulos, aivan kuten # include, erilliseen tiedostoon. 1026 01:04:52,490 --> 01:04:54,420 Joten me lähdemme sinne. 1027 01:04:54,420 --> 01:04:57,180 Mutta katsotaanpa todella ensin tehdä jotain mielenkiintoisempaa tämän tiedoston. 1028 01:04:57,180 --> 01:05:01,110 >> Tämäkin on vain TextEdit. En ole teknisesti internetissä, mutta me pääsemme sinne. 1029 01:05:01,110 --> 01:05:04,910 Haluaisin tehdä Hello, world hieman rohkeampi kuin se on. 1030 01:05:04,910 --> 01:05:10,890 Joten hei, nyt mielivaltaisesti sanoa lihavoitu. 1031 01:05:10,890 --> 01:05:15,910 Jälleen tarina on sama: Hei, pilkku, alkaa tehdä tätä rohkea, 1032 01:05:15,910 --> 01:05:19,730 Sitten maailma saa painettu lihavalla, ja tämä tarkoittaa pysäyttää tulostuksen tämä lihavoitu. 1033 01:05:19,730 --> 01:05:24,020 Anna minun mennä eteenpäin ja tallennan tiedoston, siirry takaisin Chrome, minä suurentaa vain, jotta voimme nähdä sen paremmin, 1034 01:05:24,020 --> 01:05:27,870 ja lataa, ja huomaat, että maailma on nyt lihavoitu. 1035 01:05:27,870 --> 01:05:31,810 Web on kyse hyperlinkit, joten mennään eteenpäin ja tehdä tämä: 1036 01:05:31,810 --> 01:05:38,550 Oma suosikki sivusto on, sanotaanko, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Tallenna, lataa. Okei. On pari ongelmista nyt lisäksi hideousness verkkosivuilla. 1038 01:05:43,810 --> 01:05:47,310 1, olen melko varma, että olen Enter täällä. Ja tein. 1039 01:05:47,310 --> 01:05:51,590 En ole vain Enter, olen myös sisennetty, harjoitellaan mitä olemme saarnata siitä tyylistä, 1040 01:05:51,590 --> 01:05:54,930 mutta minun on aivan maailman. 1041 01:05:54,930 --> 01:05:58,410 Miksi tämä? Selaimet vain tehdä mitä kerrot heille tehdä. 1042 01:05:58,410 --> 01:06:04,010 En ole kertonut selainta, "Break linjat täällä. Aseta kohta rikkoa täällä." 1043 01:06:04,010 --> 01:06:07,820 Joten selain, sillä ei ole väliä, jos osuin tuotto 30 kertaa, 1044 01:06:07,820 --> 01:06:10,820 se vielä menossa laittaa vieressä maailmaan. 1045 01:06:10,820 --> 01:06:15,930 Mitä minun on tehtävä täällä on sanoa jotain
, lisätä rivinvaihdon. 1046 01:06:15,930 --> 01:06:17,940 >> Ja itse asiassa, rivinvaihdon on sellainen outo juttu 1047 01:06:17,940 --> 01:06:21,650 koska et voi todella alkaa siirtymässä toiseen linja, tee jotain, 1048 01:06:21,650 --> 01:06:25,380 ja sitten lopettaa siirtymässä uudelle riville. Se on tavallaan atomi toimintaa. 1049 01:06:25,380 --> 01:06:28,140 Voit joko tehdä sitä tai et. Sinä Enter tai et. 1050 01:06:28,140 --> 01:06:33,390 Joten br on hieman erilainen tag, joten minun täytyy lajitella sekä avata ja sulkea 1051 01:06:33,390 --> 01:06:35,230 kaikki kerralla. 1052 01:06:35,230 --> 01:06:37,500 Syntaksin tämä. 1053 01:06:37,500 --> 01:06:41,760 Teknisesti, te voisi tehdä jotain tällaista joissakin versioissa HTML, 1054 01:06:41,760 --> 01:06:45,600 mutta tämä on vain tyhmä, koska ei ole mitään syytä aloittaa ja lopettaa jotain 1055 01:06:45,600 --> 01:06:48,420 jos voit sen sijaan tehdä kaiken kerralla. 1056 01:06:48,420 --> 01:06:52,310 Ymmärtäkää, että HTML5 ei ehdottomasti edellytä tätä slash, 1057 01:06:52,310 --> 01:06:55,410 niin näet oppikirjoja ja online-resursseja, jotka eivät ole sitä, 1058 01:06:55,410 --> 01:06:59,780 mutta hyvä toimenpide mennään harjoittelemaan symmetriaa että olemme nähneet tähän mennessä. 1059 01:06:59,780 --> 01:07:02,870 Tämä tarkoittaa sitä, että tunniste on sekä avata ja sulkea. 1060 01:07:02,870 --> 01:07:05,220 Joten nyt haluan pelastaa minun tiedoston, mene takaisin tänne. 1061 01:07:05,220 --> 01:07:10,240 Okei, joten se alkaa näyttää paremmalta, paitsi Web Tiedän sellainen klikattava, 1062 01:07:10,240 --> 01:07:13,610 ja vielä youtube täällä ei näytä johtavan mihinkään. 1063 01:07:13,610 --> 01:07:17,560 Se, koska vaikka se näyttää linkin, selain ei tiedä, että sinänsä, 1064 01:07:17,560 --> 01:07:20,670 joten minun täytyy kertoa selaimen tämä on linkki. 1065 01:07:20,670 --> 01:07:22,620 >> Tapa tehdä tämä on käyttää ankkuri tag: 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 ja haluaisin siirtää tämän uuden linjan juuri niin se on hieman luettavampi, 1069 01:07:38,490 --> 01:07:40,060 ja minä kutistuu fontin kokoa. 1070 01:07:40,060 --> 01:07:43,890 Olenko tehnyt vielä? No Siellä tulee olemaan tämän kahtiajako. 1071 01:07:43,890 --> 01:07:46,760 Tämä tagi, ankkuri tag, todellakin kestää määrite, 1072 01:07:46,760 --> 01:07:52,900 joka muuttaa käyttäytymistä, ja arvo joka määrite on ilmeisesti YouTuben URL. 1073 01:07:52,900 --> 01:07:56,380 Mutta huomaa kahtiajako on, että vain koska se URL aiot, 1074 01:07:56,380 --> 01:08:01,020 tämä ei tarkoita sitä, että on oltava sana, että olet korostaa ja tehdä linkin. 1075 01:08:01,020 --> 01:08:03,960 Pikemminkin se voi olla jotain tällaista. 1076 01:08:03,960 --> 01:08:10,870 Joten minun on sanottava lopettamaan tämän sanan hyperlinkin käyttämällä lähelle ankkuri tag. 1077 01:08:10,870 --> 01:08:12,650 Ilmoitus En tee tätä. 1078 01:08:12,650 --> 01:08:15,890 1, tämä olisi vain tuhlausta kaikkien aikaa ja se ei ole välttämätöntä. 1079 01:08:15,890 --> 01:08:19,290 >> Voit sulkea tunnisteen, vain mainita nimeä tag uudelleen. 1080 01:08:19,290 --> 01:08:21,800 Et maininnut mitään ominaisuuksia. 1081 01:08:21,800 --> 01:08:26,189 Joten tallentaa että, mene takaisin. Okei, voila, nyt se on sininen ja hyperlinkitettyjä. 1082 01:08:26,189 --> 01:08:29,430 Jos painan sitä, minä itse tehdä mennä YouTubeen. 1083 01:08:29,430 --> 01:08:32,529 Joten vaikka Web-sivu ei ole internetissä, se on ainakin HTML, 1084 01:08:32,529 --> 01:08:37,930 ja jos annamme Internet kiinni, olisimme todella päätyä täällä youtube.com. 1085 01:08:37,930 --> 01:08:40,670 Ja voin mennä takaisin ja tässä on minun sivun. Mutta huomaa tätä. 1086 01:08:40,670 --> 01:08:43,120 Jos olet joskus saanut roskapostia tai phishing-hyökkäys, 1087 01:08:43,120 --> 01:08:45,850 Nyt sinulla on mahdollisuus sen jälkeen vain viiden minuutin tekemään samoin. 1088 01:08:45,850 --> 01:08:50,920 Voimme mennä tänne ja tehdä jotain www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 tai mitä ylimalkaisia ​​sivusto on, ja sitten voit sanoa tarkistaa PayPal-tilin. 1090 01:08:59,319 --> 01:09:04,840 [Naurua] Ja nyt tämä tulee mennä badguy.com, joita en aio napsauta 1091 01:09:04,840 --> 01:09:08,000 koska minulla ei ole aavistustakaan mihin se johtaa. [Naurua] 1092 01:09:08,000 --> 01:09:10,859 >> Mutta meillä on nyt mahdollisuus todella päätyä sinne. 1093 01:09:10,859 --> 01:09:12,640 Joten olemme todella vain alkaa raapia pintaa. 1094 01:09:12,640 --> 01:09:15,830 Emme ohjelmointi sinänsä; Kirjoitamme markup language. 1095 01:09:15,830 --> 01:09:18,569 Mutta heti kun me pyöristää sanastosta HTML, 1096 01:09:18,569 --> 01:09:21,520 me käyttöön PHP, todellinen ohjelmointikieli 1097 01:09:21,520 --> 01:09:26,859 jonka avulla voimme luoda HTML automaattisesti, luoda CSS automaattisesti, 1098 01:09:26,859 --> 01:09:29,430 jotta voimme alkaa keskiviikkona toteuttaa vaikkapa 1099 01:09:29,430 --> 01:09:31,700 oman hakukoneen ja enemmän. 1100 01:09:31,700 --> 01:09:34,770 Mutta lisää, että pari päivää. Nähdään sitten. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]