1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Săptămâna 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Universitatea Harvard] 3 00:00:04,730 --> 00:00:07,490 [Acest lucru este CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Bine. Bine ai venit înapoi. Acest lucru este CS50, iar acest lucru este începutul săptămânii 7. 5 00:00:12,280 --> 00:00:14,690 Un tânăr de anunțuri mici: 6 00:00:14,690 --> 00:00:18,150 Pset5 este acum în curs de desfășurare, sau în curând va fi, 7 00:00:18,150 --> 00:00:21,590 și lasă-mă să spun, destul de sincer, aceasta are tendința de a fi printre cele mai provocatoare 8 00:00:21,590 --> 00:00:24,460 de seturi de probleme cursului, asa ca lasa-mi să menționez acest lucru acum 9 00:00:24,460 --> 00:00:28,190 astfel încât în ​​această săptămână mai mult decât oricând să nu așteptați până, să zicem, miercuri noapte 10 00:00:28,190 --> 00:00:29,920 sau joi seara să se scufunde inch 11 00:00:29,920 --> 00:00:32,369 Acest lucru este cu siguranta un PSET interesant. Credem că e distractiv. 12 00:00:32,369 --> 00:00:36,110 Dacă aveți de fapt corectă în totalitate și pot contesta apoi Consiliul de așa-numitul Big, 13 00:00:36,110 --> 00:00:39,830 veți avea posibilitatea de a se potrivi inteligența cu unii dintre angajații cursului 14 00:00:39,830 --> 00:00:41,620 și unii dintre colegii dumneavoastră. 15 00:00:41,620 --> 00:00:44,670 Ce este Consiliul de Big este o dată aveți dvs. de verificatorul ortografic de lucru, 16 00:00:44,670 --> 00:00:48,860 vei fi capabil de a merge la cs50.net după rularea unei comenzi, 17 00:00:48,860 --> 00:00:52,430 pur opta, și apoi cantitatea de timp și cantitatea de memorie RAM și mai mult 18 00:00:52,430 --> 00:00:56,130 care le-ați utilizat în punerea în aplicare dvs. vor fi expuse aici, pe pagina de start cursului. 19 00:00:56,130 --> 00:00:59,740 Veți observa că o grămadă de oameni aici aceste sunt enumerate ca personal 20 00:00:59,740 --> 00:01:04,220 deoarece peste week-end, personalul gandit ca ar fi distractiv pentru a încerca să întreacă unul pe altul. 21 00:01:04,220 --> 00:01:07,390 Deci dau seama că scopul aici nu este de a se întrece pe sine personalului. 22 00:01:07,390 --> 00:01:09,790 Chiar și eu sunt doar aici, la numărul 13. 23 00:01:09,790 --> 00:01:13,790 Pur opta, dar este o oportunitate de a vedea cât de puțin RAM 24 00:01:13,790 --> 00:01:16,790 și modul în care câteva secunde CPU puteți utiliza vis-a-vis de unele dintre colegii dumneavoastră. 25 00:01:16,790 --> 00:01:20,540 >> Și eu recunosc că Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 în prezent în număr de 1 post ca fiind unul dintre cele TFS, 27 00:01:23,750 --> 00:01:28,120 aceasta este o punere în aplicare pe care noi nu numim posibil 28 00:01:28,120 --> 00:01:32,700 dat fiind faptul că el folosește aproape de 0 RAM si aproape 0 secunde pentru încărcare. 29 00:01:32,700 --> 00:01:35,670 Deci, vom avea grijă de Kevin deconectat. [Râsete] 30 00:01:35,670 --> 00:01:40,950 Există anumite abilități, care este Kevin pune la încercare aici. 31 00:01:40,950 --> 00:01:45,280 Unul dintre lucrurile pe care le-am gândit să facem acum este prea CS50x este o saptamana in curs, 32 00:01:45,280 --> 00:01:49,520 si voi sunteti la fel de mult o parte a acestui experiment ca acei studenți sunt. 33 00:01:49,520 --> 00:01:53,720 Le-am cerut, ca parte a pset0 lor, care a fost în mod similar de a prezenta un proiect la zgârieturi 34 00:01:53,720 --> 00:01:58,280 de interes pentru ei - un joc, o piesă de artă interactivă, o animație, sau cum ar fi - 35 00:01:58,280 --> 00:02:03,700 o 1 - video de la 2 minute, în cazul în care ar dori, spune salut la lume și cine sunt ei de fapt sunt. 36 00:02:03,700 --> 00:02:06,780 M-am gândit să vă împărtășesc doar o pereche de videoclipuri care au fost prezentate până în prezent 37 00:02:06,780 --> 00:02:10,759 deoarece pentru noi, cu privire la personalul, cel puțin, într-adevăr a fost interesant 38 00:02:10,759 --> 00:02:14,220 și inspirație pentru a vedea aceste oameni din întreaga lume - de țări din întreaga lume - 39 00:02:14,220 --> 00:02:18,160 de tuning în, de toate lucrurile, la un curs de informatică pe internet, 40 00:02:18,160 --> 00:02:20,410 fie că este vorba pentru că vor să-și continue studiile lor, 41 00:02:20,410 --> 00:02:22,300 ei doresc să ia cariera lor într-o direcție nouă, 42 00:02:22,300 --> 00:02:24,390 doresc să umple golurile din cunoștințele lor, 43 00:02:24,390 --> 00:02:27,190 astfel încât unele din aceleași motive pe care voi, probabil, au fost aici. 44 00:02:27,190 --> 00:02:31,090 >> Așa că am să vă dau un elev astfel de aici. Ai putea ridica volumul doar un pic. 45 00:02:31,090 --> 00:02:35,520 Aici este una dintre studenți nostru de 1 minut observații. 46 00:02:35,520 --> 00:02:40,380 Bună ziua, lume. Sunt un student de inginerie industrială aici, în Malaga, Spania. 47 00:02:40,380 --> 00:02:45,840 Sunt încântat de acest curs online, pentru că îmi place informatica, eu chiar fac, 48 00:02:45,840 --> 00:02:48,880 și am cu adevărat apreciez că am ajunge să-l exploreze. 49 00:02:48,880 --> 00:02:51,940 Și faptul că pot învăța la fel de toate voi face 50 00:02:51,940 --> 00:02:57,040 dar în loc de a fi la Harvard sunt în Malaga, cât de minunat este asta? 51 00:02:57,040 --> 00:03:02,040 Ei bine, eu sunt Fernando, iar acest lucru este CS50. A se vedea voi. 52 00:03:02,040 --> 00:03:07,100 [Râsete] O altă clip ne place in mod deosebit, veți găsi că limba engleză pe acest domn nu este atât de puternică. 53 00:03:07,100 --> 00:03:11,520 Se pare ca el a avut-o masina de tradus, astfel încât traducerile în sine sunt un pic imperfect, 54 00:03:11,520 --> 00:03:15,790 dar aceasta a fost una dintre favoritele noastre de până acum, precum și. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Bună ziua, lume. [Vorbind în japoneză] 57 00:03:32,370 --> 00:03:39,830 [Trebuie sa salut în limba japoneză, deoarece engleza mea este foarte nesigur.] 58 00:03:39,830 --> 00:03:45,380 [Am dat mesajul la tine de la orașul Gifu, Japonia.] 59 00:03:45,380 --> 00:03:49,820 [Eu pot fi un student pentru prima dată în 20 de ani, după cum se poate vedea.] 60 00:03:49,820 --> 00:03:54,640 [Sunt foarte recunoscător pentru Universitatea Harvard, care mi-a dat aceasta oportunitate si EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf este o chitara si lucrul meu favorit de rulare.] [Râsete] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [De ce crezi că am încercat să participe la o cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Universitatea Harvard, este dorința mea.] 65 00:04:14,990 --> 00:04:19,740 [Mai ales dacă sunt la distanță prezența a trăit în Japonia.] 66 00:04:19,740 --> 00:04:26,680 [Am vrut să încerc imediat cunoștință de existența unui astfel de EDX când.] 67 00:04:26,680 --> 00:04:32,500 [Nu crezi, astfel încât să nu legată de vârsta de învățare I.] 68 00:04:32,500 --> 00:04:38,350 [CS50 este dorința mea. Numele meu este Kazu, iar acest lucru este CS50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [aplauze și aplauze] 70 00:04:43,090 --> 00:04:49,220 Un alt favorit al nostru a fost acest argument aici de la cineva. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google-l dacă nu sunteți familiarizat cu acest meme. 72 00:04:55,380 --> 00:05:01,480 >> Și apoi în cele din urmă, un tânăr de alții care s-au detașați, care, probabil, câștiga premiul adorabil. 73 00:05:01,480 --> 00:05:06,820 [Elevii] Aww! >> [Malan] Va trebui să ne asculte. Acest lucru este scurt, deci ascultați cu atenție. 74 00:05:08,580 --> 00:05:11,150 [Vorbitor de sex feminin] Care este numele tau? Louie >>. 75 00:05:11,150 --> 00:05:16,120 [Vorbitor de sex feminin] Ce e asta? [Chicotește >>] CS50. [Râsete] 76 00:05:16,120 --> 00:05:19,510 [Malan] El a făcut două ia, totuși. 77 00:05:19,510 --> 00:05:22,240 Aici mergem, ultima. 78 00:05:23,030 --> 00:05:26,980 Numele meu este Louie, iar acest lucru este CS50. 79 00:05:26,980 --> 00:05:30,250 [Râsete] Aceasta este deci CS50x. 80 00:05:30,250 --> 00:05:33,230 Vă mulțumesc tuturor acelora dintre voi timp ce în urma de-a lungul la domiciliu 81 00:05:33,230 --> 00:05:35,620 care au fost părtași până în prezent. 82 00:05:35,620 --> 00:05:39,510 Astăzi, putem concluziona discutia noastra de structuri de date, 83 00:05:39,510 --> 00:05:41,160 cel puțin unele dintre cele mai fundamentale, 84 00:05:41,160 --> 00:05:44,760 și apoi vom continua conversația noastră despre HTML si programare web. 85 00:05:44,760 --> 00:05:48,520 Într-adevăr, am petrecut ultimile câteva șapte săptămâni se uită la fundamentele de programare - 86 00:05:48,520 --> 00:05:50,450 algoritmi, structuri de date, cum ar fi - și 87 00:05:50,450 --> 00:05:53,050 și C, așa cum poate ați experimentat până acum, 88 00:05:53,050 --> 00:05:57,060 nu este neapărat cea mai accesibilă a limbilor 89 00:05:57,060 --> 00:05:59,090 cu care să pună în aplicare unele dintre aceste idei. 90 00:05:59,090 --> 00:06:01,880 Și astfel începând din această săptămână și săptămâna viitoare și apoi următoarele, 91 00:06:01,880 --> 00:06:07,110 vom fi în cele din urmă posibilitatea de a trecerea de la C, care este, în general, cunoscut ca un limbaj destul de low-level, 92 00:06:07,110 --> 00:06:11,190 la lucrurile la nivel superior, printre care PHP, JavaScript, și cum ar fi, 93 00:06:11,190 --> 00:06:14,850 pe care vom vedea trage pe aceleași lecții pe care le-am învățat de-a lungul ultimele săptămâni, 94 00:06:14,850 --> 00:06:19,430 dar veți găsi că declararea lucruri cum ar fi tablouri și tabele de dispersie și de căutarea și sortarea 95 00:06:19,430 --> 00:06:23,370 devenit atât de mult mai ușor, deoarece limbile înșiși vom începe să utilizați 96 00:06:23,370 --> 00:06:25,290 va deveni mai puternic. 97 00:06:25,290 --> 00:06:27,410 Dar, în primul rând, o cerere de copaci. 98 00:06:27,410 --> 00:06:30,240 Este foarte frecvente în aceste zile să aibă nevoie de informații pentru a comprima. 99 00:06:30,240 --> 00:06:34,770 În ce context ai vrea să comprimați un fel de informații digitale? 100 00:06:37,190 --> 00:06:39,670 >> Da. >> [Elev] Când aveți nevoie să-l trimită pe Web. 101 00:06:39,670 --> 00:06:41,450 Da, atunci când doriți să trimiteți ceva pe Web. 102 00:06:41,450 --> 00:06:44,950 Dacă doriți să descărcați un fișier mare, este ideal daca cineva de la celălalt capăt 103 00:06:44,950 --> 00:06:48,760 a comprimat ca fișier folosind un format zip sau ceva de genul asta 104 00:06:48,760 --> 00:06:53,760 astfel încât să te trimit mai puțini biți decât s-ar fi altfel transmise. 105 00:06:53,760 --> 00:06:55,500 Deci, cum a face tu comprima informatiile? 106 00:06:55,500 --> 00:07:00,540 Totul se reduce la utilizarea mai puțini biți decât sunt necesare în mod implicit. 107 00:07:00,540 --> 00:07:03,220 Dar aceasta este un fel de un lucru curios, deoarece cred că înapoi la săptămâna 0 și 1 108 00:07:03,220 --> 00:07:07,370 atunci când am vorbit despre ASCII și binar și am vorbit despre ASCII, în special, 109 00:07:07,370 --> 00:07:10,690 ca folosind 8 biți pentru a reprezenta litere ale alfabetului 110 00:07:10,690 --> 00:07:16,120 astfel încât litera A este reprezentat de 65 de ani, un minuscule este numărul 97, 111 00:07:16,120 --> 00:07:21,210 și cu toate acestea Reprezentati 65 sau 97, pe care îl utilizați 7 sau 8 biți. 112 00:07:21,210 --> 00:07:24,120 Dar captura este că există unele litere din alfabetul englez 113 00:07:24,120 --> 00:07:26,230 care nu sunt la fel de populare ca și ceilalți. 114 00:07:26,230 --> 00:07:31,600 Z nu este tot ceea ce mai populare, Q nu este tot ceea ce mai populare, dar A și E sunt super populare. 115 00:07:31,600 --> 00:07:37,280 Și totuși, pentru toate aceste scrisori, în mod implicit lumea folosește același număr de biți, la doar 8. 116 00:07:37,280 --> 00:07:42,690 Deci, nu ar fi fost mai inteligent dacă în loc de a folosi 8 biți pentru fiecare literă, 117 00:07:42,690 --> 00:07:47,440 chiar mai rar folosit ca Q și Z, 118 00:07:47,440 --> 00:07:51,910 Ce se întâmplă dacă am folosit mai puțini biți pentru A și E și S, precum și scrisorile cele mai populare 119 00:07:51,910 --> 00:07:55,000 și utilizate mai mulți biți pentru litere mai puțin populare, 120 00:07:55,000 --> 00:07:57,770 ideea fiind optimizarea hai pentru cazul comun, 121 00:07:57,770 --> 00:08:01,160 care este o temă în informatică de a încerca să optimizeze ceea ce se va întâmpla mai 122 00:08:01,160 --> 00:08:05,310 și petrece un pic de timp mai mult, un pic mai mult spatiu pe lucrurile pe care, da, s-ar putea întâmpla 123 00:08:05,310 --> 00:08:07,680 dar nu neapărat la fel de frecvent. 124 00:08:07,680 --> 00:08:09,330 Așa că haideți să luăm un exemplu. 125 00:08:09,330 --> 00:08:12,610 >> Să presupunem că dorim să codifica informații destul de eficient. 126 00:08:12,610 --> 00:08:15,090 S-ar putea au crescut știind ceva despre codul Morse, 127 00:08:15,090 --> 00:08:17,450 și șansele sunt că nu știi codul actual, 128 00:08:17,450 --> 00:08:21,750 dar s-ar putea aminti că este cel puțin această serie de puncte și linii. 129 00:08:21,750 --> 00:08:26,640 Aceasta este o codificare destul de eficiente, și observați că scrisoarea cele mai populare - de exemplu, E - 130 00:08:26,640 --> 00:08:28,980 folosește mai scurt de beep-uri. 131 00:08:28,980 --> 00:08:31,740 Codul Morse este totul despre bip-bip-bip-bip-bip-bip și deținerea de tone 132 00:08:31,740 --> 00:08:34,799 fie pentru perioade scurte de timp sau perioade lungi de timp. 133 00:08:34,799 --> 00:08:40,330 E, cum notată cu punct, este un bip scurt super-, doar bip, și că ar reprezenta E. 134 00:08:40,330 --> 00:08:43,960 Prin contrast, T ar fi un semnal sonor mai lung, cum ar fi semnalul sonor [prelungește sunet], 135 00:08:43,960 --> 00:08:45,710 și că ar reprezenta T. 136 00:08:45,710 --> 00:08:48,840 Dar asta e încă destul de scurt, deoarece, în schimb, daca te uiti la Z, 137 00:08:48,840 --> 00:08:52,690 să-și exprime Z v-ar merge bip, bip [mai mult sunet], bip, bip [sunet scurt]. 138 00:08:52,690 --> 00:08:55,360 Deci e mai mult pentru că este mai puțin comună. 139 00:08:55,360 --> 00:08:58,150 Dar Te-am prins aici este că codul Morse este un pic greșită 140 00:08:58,150 --> 00:09:00,610 în măsura în care nu este imediat decodable. 141 00:09:00,610 --> 00:09:07,350 De exemplu, să presupunem că ai auzit pe unele capătul firului bip [scurt], bip [lung]. 142 00:09:07,350 --> 00:09:12,480 Ce mesaj am primit doar? Un punct și o liniuță. Ce înseamnă asta reprezinta? 143 00:09:12,480 --> 00:09:15,330 [Elev] A. >> [Malan] Poate. 144 00:09:15,330 --> 00:09:18,270 Ar putea fi, de asemenea, E, urmată de T. 145 00:09:18,270 --> 00:09:23,390 Cu alte cuvinte, codul Morse, deși acest principiu pârghii de optimizare caz colț, 146 00:09:23,390 --> 00:09:26,250 ea nu se pretează la Decodării imediată. 147 00:09:26,250 --> 00:09:29,850 Asta este, omul care este ascultarea sau primește aceste puncte și linii 148 00:09:29,850 --> 00:09:34,540 trebuie să dau cumva de unde se rupe sunt între litere, 149 00:09:34,540 --> 00:09:39,660 pentru că dacă nu știi unde aceste pauze sunt, s-ar putea confunda A pentru ET sau invers. 150 00:09:39,660 --> 00:09:43,880 >> Deci, ce s-ar putea să faci? În cod Morse ai putea doar să întrerupeți între fiecare dintre litere. 151 00:09:43,880 --> 00:09:47,660 Dar oprindu-este un fel de contradicție cu ideea de a accelera lucrurile. 152 00:09:47,660 --> 00:09:52,880 Deci, ceea ce, dacă în loc am venit cu un cod în cazul în care nu a fost această situație rea 153 00:09:52,880 --> 00:09:56,570 unde E este un prefix, de exemplu, A - 154 00:09:56,570 --> 00:10:00,020 cu alte cuvinte, dacă am putea asigurați-vă că modelele sunt în continuare scurt pentru scrisorile populare 155 00:10:00,020 --> 00:10:04,850 mult timp pentru litere mai puțin populare, dar nu e nici o confuzie posibilă? 156 00:10:04,850 --> 00:10:08,930 Un om pe nume Huffman ani în urmă a inventat acest sistem de codare Huffman numit 157 00:10:08,930 --> 00:10:12,390 care foloseste de fapt, una dintre structurile de date care le-am petrecut un pic de timp vorbind despre 158 00:10:12,390 --> 00:10:16,560 în această săptămână trecut, ca de arbori, arbori binari în special - 159 00:10:16,560 --> 00:10:19,710 un arbore binar sensul că aceasta nu are mai mult de 2 copii. 160 00:10:19,710 --> 00:10:22,720 Ea are poate un copil la stânga, poate un copil drept, și asta e tot. 161 00:10:22,720 --> 00:10:26,510 Deci, să presupunem că doar de dragul discuției că cineva vrea să trimită un mesaj 162 00:10:26,510 --> 00:10:31,270 care arata ca acest lucru. E un nonsens total, dar este compusă din Ca, BS, CS, DS, și Es. 163 00:10:31,270 --> 00:10:34,890 Și dacă te numeri de fapt, tot de Ca, B, C, DS, și Es 164 00:10:34,890 --> 00:10:36,870 apoi să împartă cu numărul total de litere, 165 00:10:36,870 --> 00:10:42,710 această diagramă mic aici, spune că 45% dintre literele sunt Es, 20% sunt la fel de, 166 00:10:42,710 --> 00:10:45,010 10% B, și așa mai departe. 167 00:10:45,010 --> 00:10:47,330 Deci, cu alte cuvinte, să presupunem că șirul citat acolo 168 00:10:47,330 --> 00:10:49,080 este doar un mesaj pe care doriți să le trimiteți. 169 00:10:49,080 --> 00:10:52,180 Se întâmplă să fie prostii doar ca sa putem folosi ca litere puține posibil, 170 00:10:52,180 --> 00:10:55,220 dar e, într-adevăr cazul în care E ramane cel mai popular, 171 00:10:55,220 --> 00:11:01,450 și B și C sunt cel mai puțin populare, cel puțin din aceste 5 litere ale alfabetului. 172 00:11:01,450 --> 00:11:04,040 Deci, cum putem merge despre a veni cu o codificare, 173 00:11:04,040 --> 00:11:08,430 o codificare binară, un model de 0s și 1s pentru fiecare dintre aceste scrisori 174 00:11:08,430 --> 00:11:14,820 în așa fel încât E este un model scurt, și, poate, B și C sunt tipare putin mai lungi, 175 00:11:14,820 --> 00:11:19,270 din nou, ideea fiind că dorim să folosim mai puțini biți cea mai mare parte a timpului 176 00:11:19,270 --> 00:11:21,790 și mai mulți biți doar o singură dată într-un timp. 177 00:11:21,790 --> 00:11:26,070 Potrivit Huffman de codificare, aveți posibilitatea să creați o pădure de copaci. 178 00:11:26,070 --> 00:11:31,190 E un fel de linie de poveste aici, care implică, de asemenea, copaci și procesul de construire a le. 179 00:11:31,190 --> 00:11:32,420 Să începem. 180 00:11:32,420 --> 00:11:36,140 >> Eu propun să începeți cu această pădure, ca să spunem așa, de 5 arbori, 181 00:11:36,140 --> 00:11:38,260 fiecare dintre care este un copac destul de prost. 182 00:11:38,260 --> 00:11:42,800 Arbore este compus din doar un singur nod, reprezentată aici de un cerc. 183 00:11:42,800 --> 00:11:45,310 Deci, fiecare dintre aceste lucruri ar putea fi o struct C 184 00:11:45,310 --> 00:11:50,200 și interiorul struct C ar putea fi un flotor care reprezintă numărul de frecvența 185 00:11:50,200 --> 00:11:52,510 si apoi poate un caracter reprezentând scrisoarea. 186 00:11:52,510 --> 00:11:56,470 Deci, cred că aceste noduri ca orice fel de vechi struct C, dar, pentru moment, la nivel superior. 187 00:11:56,470 --> 00:12:01,230 Aceasta este o pădure de 5 arbori, fiecare dintre care au doar un singur nod. 188 00:12:01,230 --> 00:12:06,830 Ce Huffman propusă este că vom începe să combine aceste copaci 189 00:12:06,830 --> 00:12:11,140 care au cele mai mici conteaza frecvență în copaci ușor mai mari 190 00:12:11,140 --> 00:12:13,490 prin conectarea acestora cu un nod rădăcină nou. 191 00:12:13,490 --> 00:12:17,560 Deci, printre scrisorile de aici, constatăm că pentru comfortul le-am sortat de la stânga la dreapta, 192 00:12:17,560 --> 00:12:21,420 deși asta nu e strict necesar, și observați că cele mai mici noduri 193 00:12:21,420 --> 00:12:23,930 sunt în prezent, 10% și 10%. 194 00:12:23,930 --> 00:12:28,940 Deci, Huffman a propus ca noi uni aceste noduri mici 2 într-un copac nou 195 00:12:28,940 --> 00:12:34,450 prin introducerea unui nou nod parinte si apoi da-că părintele unui copil stânga și dreapta un copil 196 00:12:34,450 --> 00:12:37,720 în cazul în care B este arbitrar stânga și C este arbitrar dreapta. 197 00:12:37,720 --> 00:12:41,590 Și apoi Huffman propus, de asemenea, care este acum să cred că tocmai a copilului stânga 198 00:12:41,590 --> 00:12:44,790 într-una din aceste copaci întotdeauna ca fiind reprezentat de 0 199 00:12:44,790 --> 00:12:47,890 și copilul dreptul întotdeauna ca fiind reprezentată de numărul 1. 200 00:12:47,890 --> 00:12:50,680 >> Nu contează dacă le răsturnați atât timp cât ești consecvent. 201 00:12:50,680 --> 00:12:54,650 Deci, acum avem patru copaci în pădurea asta. 202 00:12:54,650 --> 00:12:58,050 Și eu zic patru, deoarece acum copac de pe stânga - 203 00:12:58,050 --> 00:13:00,570 și nu e atât de mult un copac, în sensul că aceasta crește în acest fel, 204 00:13:00,570 --> 00:13:05,170 E mai mult ca un arbore genealogic care acum 0.2 este un fel de mamă a doi copii - 205 00:13:05,170 --> 00:13:07,930 observă că, în această mamă am desenat 0.2. 206 00:13:07,930 --> 00:13:13,370 Am adăugat conteaza de frecvență ale celor doi copii și având în vedere noul nod suma totală. 207 00:13:13,370 --> 00:13:15,310 Așa că acum am doar repeta acest proces. 208 00:13:15,310 --> 00:13:19,490 Găsiți cele mai mici nodurile două și apoi li se alăture într-un copac nou 209 00:13:19,490 --> 00:13:21,380 și apoi repetați procesul de mai departe. 210 00:13:21,380 --> 00:13:26,390 Chiar acum avem o puțini candidați, 20%, 15%, și alți 20%. 211 00:13:26,390 --> 00:13:29,780 În acest caz, avem de a sparge cravată. Putem face asta arbitrar. 212 00:13:29,780 --> 00:13:31,540 Noi ar trebui să facem doar în mod consecvent. 213 00:13:31,540 --> 00:13:33,760 În acest caz, voi merge arbitrar cu cea de pe stânga, 214 00:13:33,760 --> 00:13:39,880 și am îmbinare acum 20% și 15% pentru a-mi dea un părinte nou numit 35%, 215 00:13:39,880 --> 00:13:46,310 al cărui stânga copil este 0, care are dreptul copilului este 1, iar acum avem doar trei copaci din pădure. 216 00:13:46,310 --> 00:13:47,960 Puteți vedea, probabil, în cazul în care acest lucru se întâmplă. 217 00:13:47,960 --> 00:13:51,150 Dacă vom repeta acest ori un cuplu mai mult, vom avea doar un copac mai mare, 218 00:13:51,150 --> 00:13:53,900 ale cărui margini sunt etichetate cu 0s și 1s. 219 00:13:53,900 --> 00:13:55,710 Hai să o facem din nou. 220 00:13:55,710 --> 00:14:02,600 35% este radacina acel copac a lui. 20% și 45%, deci vom fuziona 35% și 20%. 221 00:14:02,600 --> 00:14:05,610 Acum avem acest copac aici. Noi adăugăm pe cei împreună, avem 55%. 222 00:14:05,610 --> 00:14:07,910 Acum există doar două copaci în pădure. 223 00:14:07,910 --> 00:14:11,900 Noi facem de data asta definitiv, și sperăm că matematic toate frecvențele adăuga până 224 00:14:11,900 --> 00:14:15,570 pentru că acestea ar trebui să deoarece le-am calculat de la get-du-te pentru a adăuga până la 100%. 225 00:14:15,570 --> 00:14:17,960 Și acum avem un singur copac. 226 00:14:17,960 --> 00:14:20,580 Deci, aceasta este o Huffman copac codare. 227 00:14:20,580 --> 00:14:24,400 Este un fel de a luat un timp pentru a ajunge acolo verbal, dar realitatea este cu un pentru buclă 228 00:14:24,400 --> 00:14:27,620 sau cu o funcție recursivă, ai putea construi chestia asta destul de repede. 229 00:14:27,620 --> 00:14:32,440 Asa ca acum avem un nou nod, și toate aceste noduri interioare au fost malloc'd, 230 00:14:32,440 --> 00:14:34,690 probabil, de-a lungul drum. 231 00:14:34,690 --> 00:14:38,650 Deci, acum la partea de sus a acestui copac avem 100%, dar acum observăm că avem o cale 232 00:14:38,650 --> 00:14:43,780 din această nouă stră-stră-stră-bunic la toate stră-stră-stră-nepoții 233 00:14:43,780 --> 00:14:45,930 tot drumul de la partea de jos, la toate frunzele. 234 00:14:45,930 --> 00:14:52,840 >> Ceea ce am de gând să faci acum este să propună ca, în scopul de a reprezenta litera E, 235 00:14:52,840 --> 00:14:55,670 vom folosi pur și simplu numărul 1. De ce? 236 00:14:55,670 --> 00:15:01,000 Pentru că dacă vom parcurge acest copac de la rădăcină până la final de frunze cunoscut sub numele de E, 237 00:15:01,000 --> 00:15:06,050 ne trebuie doar să urmezi o margine, marginea dreaptă, și care este etichetat de curs la partea de sus dreapta 1. 238 00:15:06,050 --> 00:15:11,550 Deci, implicarea aici pentru Huffman a fost acea codificare E în binar va fi doar 1. 239 00:15:11,550 --> 00:15:14,490 Și asta e destul de al naibii de eficient. Nu se poate obține într-adevăr nici mai mică decât cea. 240 00:15:14,490 --> 00:15:18,350 Prin contrast, A este de gând să fie reprezentat, dacă urmați logica, 241 00:15:18,350 --> 00:15:21,610 de ce model de biți în loc? 01. 242 00:15:21,610 --> 00:15:25,500 Deci, pentru a ajunge la o, vom începe de la rădăcină și să mergem la stânga și la dreapta, apoi mergem, 243 00:15:25,500 --> 00:15:28,580 ceea ce înseamnă că a urmat un 0 si apoi o 1. 244 00:15:28,580 --> 00:15:32,810 Deci, vom reprezenta litera A cu modelul 0 și 1. 245 00:15:32,810 --> 00:15:36,010 Și acum observați, avem deja o proprietate de Decodării imediate 246 00:15:36,010 --> 00:15:38,090 că nu am avut în codul Morse. 247 00:15:38,090 --> 00:15:42,840 Chiar dacă ambele aceste modele sunt destul de scurte - E este de 1 bit, A este 2 biți - 248 00:15:42,840 --> 00:15:45,080 observa că acestea nu pot fi confundate una sau alta, 249 00:15:45,080 --> 00:15:54,870 pentru că, dacă vedeți un 1 se Trebuie să fie un E, dacă vedeți un 0, atunci a 1 e, evident, trebuie să fie un A. 250 00:15:54,870 --> 00:15:58,410 În mod similar, ce e D? 001. 251 00:15:58,410 --> 00:16:01,440 Ce este C? 0001. 252 00:16:01,440 --> 00:16:05,320 Și ce este B? 0000. 253 00:16:05,320 --> 00:16:09,550 Și din nou, deoarece toate scrisorile ne pasă sunt la frunzele 254 00:16:09,550 --> 00:16:13,890 și nici unul dintre ele sunt un fel de intermediari în calea de la radacina la frunze, 255 00:16:13,890 --> 00:16:18,760 nu e nici un risc de conflating codificări 2 literele "diferite 256 00:16:18,760 --> 00:16:22,300 deoarece toate aceste modele de biți sunt deterministe. 257 00:16:22,300 --> 00:16:25,280 0000 va fi întotdeauna B. 258 00:16:25,280 --> 00:16:29,480 Nu e nici un nod undeva între care v-ar confunda o scrisoare pentru celălalt. 259 00:16:29,480 --> 00:16:31,150 Deci, ce e implicație aici? 260 00:16:31,150 --> 00:16:35,080 >> Scrisoarea cele mai populare - în acest caz, E - a ajuns cel mai scurt codificare, 261 00:16:35,080 --> 00:16:37,430 O codificare a ajuns cel mai scurt următoare, 262 00:16:37,430 --> 00:16:41,390 și B și C, pe care le știam deja de la natură get-du-te au fost de cel mai puțin popular 263 00:16:41,390 --> 00:16:45,390 la frecvența de 10% fiecare, au ajuns mai lungă de codificare. 264 00:16:45,390 --> 00:16:49,410 Și deci ce înseamnă acum este că, dacă doriți să trimiteți un mesaj care este comprimat 265 00:16:49,410 --> 00:16:51,950 pe Internet sau într-un e-mail sau ca, 266 00:16:51,950 --> 00:16:56,730 mai degrabă decât folosind ASCII standard, puteți trimite un mesaj codat Huffman 267 00:16:56,730 --> 00:17:01,720 prin care, dacă doriți să trimiteți litera E, trimite doar un singur bit. 268 00:17:01,720 --> 00:17:05,680 Dacă doriți să trimiteți un A, trimite 2 biți, 01, în loc să trimită 8 biți 269 00:17:05,680 --> 00:17:10,190 urmată de încă 8 biți, urmată de încă 8 biți și așa mai departe. 270 00:17:10,190 --> 00:17:11,940 Dar există o Te-am prins aici. 271 00:17:11,940 --> 00:17:17,079 Nu e suficient doar pentru a construi acest copac și apoi începe trimiterea de la Alice la Bob 272 00:17:17,079 --> 00:17:20,010 modelul pic mai scurt, string din ASCII, 273 00:17:20,010 --> 00:17:23,140 Alice, de asemenea, că trebuie să informeze Bob a ceea ce 274 00:17:23,140 --> 00:17:26,880 în cazul în care Bob este de gând să fie capabil să citească mesajul său comprimat? 275 00:17:26,880 --> 00:17:30,770 [Răspuns studentul nu pot fi auzite] >> Ce e asta? 276 00:17:30,770 --> 00:17:32,310 [Răspuns studentul nu pot fi auzite] >> Din ce copac este. 277 00:17:32,310 --> 00:17:35,160 Sau chiar mai precis, ceea ce aceste codificări sunt, 278 00:17:35,160 --> 00:17:39,010 mai ales că în această poveste am făcut un apel hotărâre la un moment dat. 279 00:17:39,010 --> 00:17:43,640 Amintiți-vă că am avut de a alege arbitrar între cele 2 noduri diferite 20%? 280 00:17:43,640 --> 00:17:49,800 Deci, nu e cazul in care Bob, destinatarul, poate reconstitui doar copacul pe cont propriu 281 00:17:49,800 --> 00:17:53,390 pentru că poate că el va crea arborele vreodată atât de ușor diferit de la Alice. 282 00:17:53,390 --> 00:17:56,670 Mai mult decât atât, Bob nu știe nici măcar ce este mesajul original 283 00:17:56,670 --> 00:18:00,770 deoarece singurul lucru Alice îl trimite, desigur, este mesajul comprimat. 284 00:18:00,770 --> 00:18:05,900 >> Deci, captura cu compresie ca acest lucru este faptul că, da, Alice poate salva o mulțime de biți 285 00:18:05,900 --> 00:18:09,900 prin trimiterea 1 pentru E și 01 pentru A și așa mai departe, 286 00:18:09,900 --> 00:18:15,180 dar ea, de asemenea, trebuie să informeze Bob ceea ce este de cartografiere între litere și biți 287 00:18:15,180 --> 00:18:19,620 deoarece acestea nu pot invoca în mod clar doar pe ASCII mai, dacă nu suntem folosind ASCII. 288 00:18:19,620 --> 00:18:22,200 Deci, ea poate transmite fie el cumva copac - 289 00:18:22,200 --> 00:18:26,600 scrie-l jos, păstrați-l ca date binare sau ceva de genul asta - 290 00:18:26,600 --> 00:18:30,280 sau trimite-l o foaie de ieftin pic, un fișier Excel, care arată mapările. 291 00:18:30,280 --> 00:18:36,480 Deci, eficacitatea de compresie într-adevăr presupune că mesajele pe care le trimiți 292 00:18:36,480 --> 00:18:40,230 sunt destul de mari, cel puțin mijlocii, 293 00:18:40,230 --> 00:18:42,180 pentru că dacă trimiteți un mesaj de super-scurt, 294 00:18:42,180 --> 00:18:45,390 dacă doriți doar să trimiteți mesajul BAD, care se întâmplă să fie un cuvânt, putem scrie aici, 295 00:18:45,390 --> 00:18:49,550 B-A-D, esti, probabil, de gând să folosească mai puțini biți, 296 00:18:49,550 --> 00:18:53,130 dar captura este dacă aveți, de asemenea, trebuie să informeze Bob ceea ce copac este 297 00:18:53,130 --> 00:18:57,530 sau ce aceste codificări sunt, ai de gând să depășească, probabil, toate economiile 298 00:18:57,530 --> 00:19:00,110 de a avea lucruri comprimate pentru a începe cu. 299 00:19:00,110 --> 00:19:02,210 Deci, poate fi de fapt cazul în care, dacă încercați comprimare 300 00:19:02,210 --> 00:19:05,330 chiar si cu ceva de genul formate zip sau fișierul pe care s-ar putea să fie familiarizat cu - 301 00:19:05,330 --> 00:19:07,780 fișiere destul de mici, chiar și fișiere goale - 302 00:19:07,780 --> 00:19:10,930 uneori, aceste fișiere s-ar putea obține mai mari și mai mici, nu. 303 00:19:10,930 --> 00:19:14,320 Dar realist, acest lucru se întâmplă doar pentru fișiere de dimensiuni mici, 304 00:19:14,320 --> 00:19:16,920 asa ca nu va face un fisier gigabyte fie de 2 gigaocteți; 305 00:19:16,920 --> 00:19:19,480 vorbim într-adevăr octeți sau doar un cuplu kilobytes. 306 00:19:19,480 --> 00:19:22,330 >> Unele programe, cum ar fi zip sunt destul de inteligenti pentru a realiza că, 307 00:19:22,330 --> 00:19:24,590 "Ai de gând să-și petreacă mai mulți biți de comprimare acest lucru." 308 00:19:24,590 --> 00:19:27,460 "Lasă-mă să nu deranjez comprima-l pentru tine, la toate." 309 00:19:27,460 --> 00:19:30,160 Deci, aceasta este doar o modalitate de a comprima apoi format text. 310 00:19:30,160 --> 00:19:32,300 Am putea implementa asa ceva in C. 311 00:19:32,300 --> 00:19:35,370 De exemplu, aici este modul în care am putea reprezenta un nod în acest copac 312 00:19:35,370 --> 00:19:39,320 în cazul în care avem un char de simbol, o valoare plutitor pentru frecvența, 313 00:19:39,320 --> 00:19:42,250 și după cum am văzut, cu structurile noastre a altor date, 2 pointeri, 314 00:19:42,250 --> 00:19:47,080 1 la copil stânga, de la 1 la dreapta, fie din care poate fi NULL, 315 00:19:47,080 --> 00:19:50,850 dar dacă nu, se referă la un copil la stânga și la dreapta un copil. 316 00:19:50,850 --> 00:19:55,130 Deci, aceasta este atunci Huffman de codificare, și este o modalitate prin care poti sa te duci cu privire la comprimare de informații, 317 00:19:55,130 --> 00:19:57,880 și este cu siguranță, una dintre cele mai ușor să pună în aplicare 318 00:19:57,880 --> 00:20:00,830 în contextul de, să zicem, structurile de date săptămâna trecută, 319 00:20:00,830 --> 00:20:03,250 deși chiar și algoritmi mai sofisticate există 320 00:20:03,250 --> 00:20:08,220 , care poate face chiar mai mult mutatii sofisticate ale datelor. 321 00:20:08,220 --> 00:20:11,640 Orice întrebări Apoi, pe arbori, arbori binari, sau de comprimare a textului? 322 00:20:11,640 --> 00:20:15,590 [Elev] Există o anumită ambiguitate, cum ar fi în cazul în care [neauzit] divizat în 01, 323 00:20:15,590 --> 00:20:19,160 atunci ar fi ambiguă 011, corect? 324 00:20:19,160 --> 00:20:22,730 [Imperceptibil] >> Bună întrebare. Ambiguitate. 325 00:20:22,730 --> 00:20:25,940 Permiteți-mi să rezum prin referire la această imagine aici. 326 00:20:25,940 --> 00:20:29,650 Deoarece caracterele pe care le sunt de comprimare, reprezentanțele, 327 00:20:29,650 --> 00:20:32,850 prin definiție acestui algoritm rămâne întotdeauna frunze, 328 00:20:32,850 --> 00:20:41,870 nu vei folosi accidental același model de biți pentru prefixul de mai multe litere. 329 00:20:41,870 --> 00:20:46,740 Deci, cu alte cuvinte, ești preocupat, se pare, o ambiguitate care rezultă 330 00:20:46,740 --> 00:20:51,580 prin care 001 ar putea fi începutul B sau C la începutul sau ceva de genul asta. 331 00:20:51,580 --> 00:20:56,780 Dar care nu poate fi cazul, deoarece anunțul că toate literele din alfabet suntem codare 332 00:20:56,780 --> 00:20:58,290 sunt la frunzele. 333 00:20:58,290 --> 00:21:01,910 >> Ambiguitatea poate apărea numai, ca și în cazul codului Morse, 334 00:21:01,910 --> 00:21:06,770 în cazul în care, de exemplu, C a fost undeva pe drumul de la rădăcină la B. 335 00:21:06,770 --> 00:21:12,290 [Elev] Corect. Deci, în acest caz, spun O are 2 frunze. Spune >> A are - Spune asta din nou. 336 00:21:12,290 --> 00:21:18,760 [Elev] Spune O are 2 frunze, F și G, și apoi g - >> Bine. Dar nu se poate. 337 00:21:18,760 --> 00:21:23,230 Un însăși nu ar putea avea frunze F și G, deoarece aceste scrisori F și G 338 00:21:23,230 --> 00:21:27,560 s-ar fi părăsește undeva la stânga B sau dreptul de E. 339 00:21:27,560 --> 00:21:28,900 Deci, prin definiție, acestea trebuie să fie frunze. 340 00:21:28,900 --> 00:21:32,940 În caz contrar, ai dreptate exact, nu ne-am rezolvat problema cu care se confruntă codul Morse. 341 00:21:32,940 --> 00:21:38,150 Bună întrebare. Alte întrebări? Bine. 342 00:21:38,150 --> 00:21:42,050 Această noțiune de biți, se pare că am avut puterea tot timpul că nu ne-am folosit de fapt, 343 00:21:42,050 --> 00:21:44,200 atunci când a venit vorba de manipularea aceste 0s și 1s. 344 00:21:44,200 --> 00:21:46,600 Am întrebat despre acest lucru unul din seturile de mai timpurii probleme: 345 00:21:46,600 --> 00:21:52,340 anume, cum te duci despre convertirea majuscule la litere mici sau invers? 346 00:21:52,340 --> 00:21:55,460 Sau, mai concret, una din acele psets prima cerut 347 00:21:55,460 --> 00:22:01,090 câți biți ai de fapt, să răsturnați, în scopul de a schimba de la A la litere mici sau o invers? 348 00:22:01,090 --> 00:22:05,580 Iată un memento rapidă a ceea ce 65 si 97 arata ca in binar. 349 00:22:05,580 --> 00:22:08,060 Și chiar dacă această întrebare a fel de stins în memorie, 350 00:22:08,060 --> 00:22:11,290 puteti vedea din nou aici, ca câți biți trebuie să fie oglindită 351 00:22:11,290 --> 00:22:15,810 pentru a schimba capitala de la A la litere mici o? Doar unul. 352 00:22:15,810 --> 00:22:19,650 >> Ele diferă doar într-o singură locație, bitul treilea din stânga. 353 00:22:19,650 --> 00:22:24,240 Întrucât A are un 010, un pic are un 011. 354 00:22:24,240 --> 00:22:26,250 Deci, cumva, trebuie să fim în stare să flip care biți, 355 00:22:26,250 --> 00:22:29,410 și putem valorifica apoi sau litere mici. 356 00:22:29,410 --> 00:22:32,720 Am făcut acest lucru în trecut de fapt, folosind cazul în care condițiile 357 00:22:32,720 --> 00:22:35,930 și verificarea dacă scrisoarea este între A și Z de capital de capital, 358 00:22:35,930 --> 00:22:41,480 apoi ieșiri cum ar fi A - + 26 o sau ceva de genul asta. 359 00:22:41,480 --> 00:22:46,130 Ai făcut-o, probabil, o schimbare de aritmetică la litere ale alfabetului. 360 00:22:46,130 --> 00:22:49,270 Dar ce se întâmplă dacă am putea răsturna doar că pic singur? 361 00:22:49,270 --> 00:22:59,080 Cum ai putut să mergi despre luarea în valoare de un octet de biți, deci 8 biți ca și 01000001 01100001? 362 00:22:59,080 --> 00:23:03,170 Dacă ați avut acele modele de biți, cum putem merge despre schimbarea doar unul dintre ei? 363 00:23:03,170 --> 00:23:07,610 Ce se întâmplă dacă am introduce în galben aici, acest model a altor biți? 364 00:23:07,610 --> 00:23:13,420 Dacă aș face 0s întregi galbene șir, cu excepția pentru bit unul care doresc să se schimbe 365 00:23:13,420 --> 00:23:17,900 si apoi am introduce un nou operator cunoscut ca un operator de la nivel de bit - 366 00:23:17,900 --> 00:23:21,210 bit, în sensul că acesta funcționează pe biți individuali, 367 00:23:21,210 --> 00:23:25,360 nu pe un octet întreg sau patru octeți pe toate odată. 368 00:23:25,360 --> 00:23:31,170 Aceasta bara verticală există în galben sugerează că ceea ce, dacă luăm reprezentare a capitalului A 369 00:23:31,170 --> 00:23:37,060 și la nivel de bit SAU cu secvența galben de biți? 370 00:23:37,060 --> 00:23:41,300 Cu alte cuvinte, cred că înapoi la discuția noastră de expresii booleene în Scratch si apoi in C. 371 00:23:41,300 --> 00:23:47,520 >> Făcând un Boolean sau înseamnă că pentru a fi adevărat, fie primul lucru pe care trebuie să fie adevărat 372 00:23:47,520 --> 00:23:50,700 sau al doilea lucru trebuie să fie adevărat sau că ambele trebuie să fie adevărat, 373 00:23:50,700 --> 00:23:53,270 și apoi producția rezultată este ea însăși adevărat. 374 00:23:53,270 --> 00:24:00,230 În acest caz aici, ce facem rost dacă luăm 0 "sau" ed cu 0? False sau fals? 375 00:24:00,230 --> 00:24:04,280 E încă fals, asa minuscule un ramane cum era de asteptat. 376 00:24:04,280 --> 00:24:07,540 Ce se întâmplă dacă în loc să facem 1 sau 0? 377 00:24:07,540 --> 00:24:12,640 Această acum rămâne 1, dar observați ce e pe cale să se întâmple aici. 378 00:24:12,640 --> 00:24:18,630 Dacă începem cu capital A și vom continua să "sau" biti sale individuale, așa cum facem noi aici, 379 00:24:18,630 --> 00:24:25,180 0 sau galbenă ce ne-o dă aici? Acest lucru ne dă 1. 380 00:24:25,180 --> 00:24:35,120 De fapt, să presupunem că nu știam ce versiunea majuscule de mic a fost de fapt o. 381 00:24:35,120 --> 00:24:38,270 Hai să mergem să facem acest lucru. Lasă-mă să mut asta înapoi aici. 382 00:24:38,270 --> 00:24:42,340 Hai să facem asta din nou. 0 sau 0-mi dă 0. 383 00:24:42,340 --> 00:24:45,020 1 sau 0-mi dă 1. 384 00:24:45,020 --> 00:24:48,020 0 sau 1 prezintă mine 1. 385 00:24:48,020 --> 00:24:52,880 0 sau 0-mi dă 0. Următorul este 0, urmatorul este 0, următoarea este 0. 386 00:24:52,880 --> 00:24:55,660 1 sau 0-mi dă 1. 387 00:24:55,660 --> 00:24:59,140 Și astfel, chiar dacă nu am ști dinainte ce o litere mici a fost, 388 00:24:59,140 --> 00:25:04,770 pur și simplu prin "sau" ING A cu acest model de biti pe care le-am prezentat aici, în galben, 389 00:25:04,770 --> 00:25:09,400 puteți litere mici o majorare de capital de către o flipping că pic. 390 00:25:09,400 --> 00:25:11,580 Am folosit această expresie săptămâni în urmă: flipping un pic. 391 00:25:11,580 --> 00:25:13,710 Cum ai făcut asta, de fapt programare? 392 00:25:13,710 --> 00:25:16,390 Puteți utiliza ceea ce se numește, în general, o mască, o secvență de biți, 393 00:25:16,390 --> 00:25:19,980 că, în acest caz, doar așa se întâmplă să arate ca acest număr aici, 394 00:25:19,980 --> 00:25:22,980 și apoi "sau" folosind impreuna acest nou operator de C, 395 00:25:22,980 --> 00:25:29,940 Nu | |, puteți utiliza un singur | și v-ar obține de fapt, acest răspuns de aici, pentru că de ce? 396 00:25:29,940 --> 00:25:35,120 Acesta este locul 1s, 2s loc, 16s 4s, 8s,, 32s. 397 00:25:35,120 --> 00:25:42,280 Deci, se dovedește că, dacă luați o scrisoare de capital la nivel de bit SAU A și cu întreg 32, 398 00:25:42,280 --> 00:25:47,520 deoarece întreg 32, atunci când te uiți la ea ca biti, arata ca acest lucru, 399 00:25:47,520 --> 00:25:50,860 înseamnă că aveți posibilitatea să răsturnați biți pe care tu de fapt vrei. 400 00:25:50,860 --> 00:25:52,630 Și în mod similar - și ne vom uita la codul într-o clipă - 401 00:25:52,630 --> 00:25:54,210 presupunem că vrem să mergem în altă direcție. 402 00:25:54,210 --> 00:25:58,210 >> Cum te duci la litere mici un capital la A? Care biți trebuie să se schimbe? 403 00:25:58,210 --> 00:25:59,820 E aceeași. 404 00:25:59,820 --> 00:26:03,970 Dorim să schimbăm acest bit treia de la o la 1 la 0. 405 00:26:03,970 --> 00:26:06,310 Și cum am putea merge despre a face acest lucru? 406 00:26:06,310 --> 00:26:10,130 Cum putem opri un pic? Cu ce ​​model de biți am putea opri un pic? 407 00:26:11,580 --> 00:26:14,070 Ce se întâmplă dacă am rezolva invertit masca? 408 00:26:14,070 --> 00:26:17,350 Întrucât înainte, ne-am facut 0s întreaga masca galben 409 00:26:17,350 --> 00:26:19,930 , cu excepția pentru un pic ne-am dorit pentru a porni, 410 00:26:19,930 --> 00:26:25,580 Ce se întâmplă dacă de data asta, vom face 1s masca intreaga, cu excepția biți pe care ne-o dorim pentru a opri 411 00:26:25,580 --> 00:26:28,330 și de a folosi apoi ce operatorul? 412 00:26:28,330 --> 00:26:30,560 Ce se întâmplă dacă noi "și" lucrurile? Să aruncăm o privire. 413 00:26:30,560 --> 00:26:34,880 Dacă ne da un bobârnac acum la acest lucru, presupunem că din nou am crea o masca asta e tot 1s 414 00:26:34,880 --> 00:26:37,650 cu excepția bit unul care vreau să dezactivați 415 00:26:37,650 --> 00:26:43,860 și apoi, mai degrabă decât "sau" numerele albe până sus cu numere galbene aici, 416 00:26:43,860 --> 00:26:46,940 Ce se întâmplă dacă am loc "și" ei împreună? Se numește la nivel de bit și. 417 00:26:46,940 --> 00:26:49,450 În mod logic, e acelasi lucru ca un Boolean și. 418 00:26:49,450 --> 00:26:55,160 Acest lucru îmi dă 0 & 1 este 0. Deci, fals și adevărat este fals. 419 00:26:55,160 --> 00:26:58,160 Adevărată și adevărată este adevărat. 420 00:26:58,160 --> 00:27:04,020 Și aici este magia: Adevarat si fals este acum falsă, așa că am oprit asta biți. 421 00:27:04,020 --> 00:27:06,560 Și acum restul poveștii este oarecum simplă. 422 00:27:06,560 --> 00:27:11,970 Deoarece restul masca este 1s, nu contează ce numere sunt în alb. 423 00:27:11,970 --> 00:27:15,580 Atunci când "și" ceva cu adevarat, nu vei schimba valoarea. 424 00:27:15,580 --> 00:27:20,200 Dacă este adevărat, va rămâne adevărat. Dacă era falsă, ea va rămâne fals. 425 00:27:20,200 --> 00:27:23,190 >> Dar magia se intampla atunci cand iei ceva care era adevărat 426 00:27:23,190 --> 00:27:25,430 și tu, apoi "și" cu falsă. 427 00:27:25,430 --> 00:27:30,030 Acest lucru are ca efect oprirea că pic. 428 00:27:30,030 --> 00:27:31,980 Deci, un pic de acolo criptic. 429 00:27:31,980 --> 00:27:35,390 Să ne uităm, de fapt, la un cod, care ar putea uita de fapt, chiar mai criptic, 430 00:27:35,390 --> 00:27:38,220 dar haideți să aruncăm o privire aici, la tolower. 431 00:27:38,220 --> 00:27:45,880 Dacă mă uit la tolower, care merge de la A la litere mici de capital o, 432 00:27:45,880 --> 00:27:47,730 hai sa vedem cum putem să pună în aplicare acest program. 433 00:27:47,730 --> 00:27:51,280 Iată principal, și nu este de a lua orice argumente de linie de comandă. 434 00:27:51,280 --> 00:27:55,980 Sunt de declarare a unei c caracter de literă pe care utilizatorul este de gând să tastați inch 435 00:27:55,980 --> 00:28:00,690 Eu folosesc apoi o buclă în timp ce do familiar pentru a asigurați-vă doar că utilizatorul cu siguranta da-mi un capital A 436 00:28:00,690 --> 00:28:05,010 sau B sau C. .. Z, așa că dă-mi ceva între A și Z. 437 00:28:05,010 --> 00:28:08,580 Și acum ce fac eu aici? 438 00:28:08,580 --> 00:28:14,870 Sunt "sau" ING asta cu 0x20, dar asta e de fapt la fel ca - 439 00:28:14,870 --> 00:28:19,500 și ne vom întoarce la acest intr-un moment - 32. 440 00:28:19,500 --> 00:28:24,830 Deci, din nou, acest model este 32 de biți de aici. De ce nu știm acest lucru? 441 00:28:24,830 --> 00:28:26,320 Gândește-te înapoi la săptămâna 0. 442 00:28:26,320 --> 00:28:31,010 Acesta este locul 1s, 2s loc, 4s, 8s, 16s, 32s loc. 443 00:28:31,010 --> 00:28:33,470 Deci, acest număr galben se întâmplă să fie 32. 444 00:28:33,470 --> 00:28:40,570 Pot lua apoi o scrisoare ca char aici, la nivel de bit "sau" cu literalmente numărul 32, 445 00:28:40,570 --> 00:28:45,250 și ceea ce primesc inapoi? Versiunea cu litere mici de asta char. 446 00:28:45,250 --> 00:28:48,830 Un moment în urmă, însă, mi-am exprimat aceasta într-o notație bază diferită. 447 00:28:48,830 --> 00:28:51,370 Ce-a făcut asta reprezinta? >> [Elev] Hexadecimal. 448 00:28:51,370 --> 00:28:53,050 [Malan] Acest lucru se întâmplă pentru a reprezenta hexazecimal. 449 00:28:53,050 --> 00:28:55,170 Nu am vorbit despre hexazecimal tot atât de mult, 450 00:28:55,170 --> 00:28:57,330 dar de fapt e convenabil, în cazuri de acest gen. 451 00:28:57,330 --> 00:29:01,730 >> Chiar dacă pare mult mai complexă și, chiar dacă se pare ca 20 și nu 32, 452 00:29:01,730 --> 00:29:06,240 se dovedește că hexazecimal este de fapt notatia super convenabil 453 00:29:06,240 --> 00:29:10,810 pentru că în hexazecimal fiecare digit după 0x - și acest lucru nu înseamnă nimic; 454 00:29:10,810 --> 00:29:13,960 aceasta este doar convenție umană care spune că aici vine un număr hexazecimal - 455 00:29:13,960 --> 00:29:18,590 fiecare dintre aceste cifre, 2 și apoi 0, s-au poate fi reprezentat 456 00:29:18,590 --> 00:29:20,800 cu exact 4 biți. 457 00:29:20,800 --> 00:29:27,840 Deci, dacă am face asta, lasă-mă să deschid un editor de text aici - ciudat completarea automată - 458 00:29:27,840 --> 00:29:35,940 dacă facem un mic editor de text aici, 0x20 numărul înseamnă aici este de 4 biți, aici e încă 4 biți. 459 00:29:35,940 --> 00:29:38,050 Să facem din dreapta 4 biți primul. 460 00:29:38,050 --> 00:29:44,690 0 când a reprezentat cu 4 biți este ceea ce? Super usor. Doar toate 0s. 461 00:29:44,690 --> 00:29:46,780 Deci, 4 biți, ca 0s. 462 00:29:46,780 --> 00:29:53,510 Cum vă reprezintă 2? A trecut ceva timp de când am făcut asta, dar e 0100. 463 00:29:53,510 --> 00:29:57,310 Deci, acesta este locul 1s, acesta este locul 2s, iar apoi nu contează ce alte locuri sunt. 464 00:29:57,310 --> 00:30:00,610 Cu alte cuvinte, în hexazecimal s-ar putea spune 0x20, 465 00:30:00,610 --> 00:30:04,340 dar daca atunci cred că despre ceea ce este 2 si cum se reprezentat în binar, 466 00:30:04,340 --> 00:30:07,130 ceea ce este 0 și cum este ea a reprezentat în binar, 467 00:30:07,130 --> 00:30:10,440 răspunsurile la aceste întrebări sunt asta și asta, respectiv. 468 00:30:10,440 --> 00:30:14,380 Deci, 0x20 se întâmplă pentru a reprezenta acest model de 8 biți, 469 00:30:14,380 --> 00:30:16,880 care este exact masca pe care ne-am dorit. 470 00:30:16,880 --> 00:30:20,140 Deci, aceasta este pentru moment, doar un exercițiu intelectual, 471 00:30:20,140 --> 00:30:24,520 dar realitatea este în cod este de obicei mai comune pentru a scrie constante, cum ar fi acest 472 00:30:24,520 --> 00:30:28,360 în hexazecimal, deoarece, atunci programatorul poate relativ ușor, 473 00:30:28,360 --> 00:30:32,560 chiar dacă este necesară o hârtie și creion, dau seama ce model de biți este 474 00:30:32,560 --> 00:30:35,960 pentru că nu își pot exprima doar 0s și 1s de obicei în cod. 475 00:30:35,960 --> 00:30:38,540 Tu nu poate merge 00010 și așa mai departe. 476 00:30:38,540 --> 00:30:42,380 >> Trebuie sa alegi notatii zecimale sau hexazecimale sau octal sau altul. 477 00:30:42,380 --> 00:30:47,540 Cei mai mulți oameni au tendința de a alege hexazecimal pur și simplu, astfel încât fiecare cifră reprezintă 4 biți 478 00:30:47,540 --> 00:30:49,320 și puteți face acest lucru matematica rapid. 479 00:30:49,320 --> 00:30:54,990 Și voi flutura mâna mea la toupper, care este aproape la fel, se pare aproape identic. 480 00:30:54,990 --> 00:31:01,900 Toupper se întâmplă să folosească nu operatorul sau, ci, mai degrabă tipul ăsta și df. 481 00:31:01,900 --> 00:31:09,300 Ce se df reprezinta? df? Oricine? >> [Elev] 255. 482 00:31:09,300 --> 00:31:12,780 255? Nu este 255. Asta ar fi sq. 483 00:31:12,780 --> 00:31:15,210 Vom lăsa aceasta ca un mic exercitiu. 484 00:31:15,210 --> 00:31:23,460 Dar dacă te duci de la 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 și apoi ceea ce vine după data de 9? 485 00:31:23,460 --> 00:31:26,510 Suntem un fel de cifre zecimale din, dar în hexazecimal ceea ce vine după data de 9? 486 00:31:26,510 --> 00:31:29,510 [Elev] o. Deci >> a, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Vă puteți da seama de acolo ce model de biți reprezintă de fapt d.. 488 00:31:33,470 --> 00:31:38,850 Și dacă facem calculele, vom vedea că masca te termina obtinerea înapoi este identică cu aceasta. 489 00:31:38,850 --> 00:31:45,580 Acest lucru este f, toate 1s, iar acest lucru este d. Deci, df reprezinta acea masca. Bine. 490 00:31:45,580 --> 00:31:50,980 Și, în fine, să nu facă lucrurile sunet super, super tehnic, 491 00:31:50,980 --> 00:31:53,840 dar să presupunem că am vrut să scrie un program care face acest lucru. 492 00:31:53,840 --> 00:31:58,960 Lasă-mă să mergeți mai departe și a face binar, care este un program de într-un fișier numit binary.c. 493 00:31:58,960 --> 00:32:02,050 Și acum să-mi alerga binar și dă-mi un număr întreg non-negativ. 494 00:32:02,050 --> 00:32:03,960 Să începem ușor și tipul de la 0. 495 00:32:03,960 --> 00:32:09,010 Acest lucru este acum un program care imprimă un număr întreg în reprezentarea binară său. 496 00:32:09,010 --> 00:32:13,470 Deci, dacă am juca acest joc din nou și tastați doar 1, ar trebui să mă o reprezentare pe 32 de biți de 1. 497 00:32:13,470 --> 00:32:15,490 Dacă aș face acest lucru din nou cu 2, ar trebui să mă asta. 498 00:32:15,490 --> 00:32:19,310 Dacă fac 7, ar trebui să mă un 1s câteva la capăt și așa mai departe. 499 00:32:19,310 --> 00:32:22,740 Se pare că menționez acest lucru deoarece, cu operațiuni la nivel de bit 500 00:32:22,740 --> 00:32:25,490 puteți face de fapt, un singur lucru, precum și alte. 501 00:32:25,490 --> 00:32:29,130 Puteți crea aceste măști dinamic. 502 00:32:29,130 --> 00:32:32,800 Aruncati o privire la acest exemplu cel final care implică operațiuni la nivel de bit. 503 00:32:32,800 --> 00:32:35,490 Aici este prima parte a codului, solicita utilizatorul pentru un număr, 504 00:32:35,490 --> 00:32:38,130 și insistă asupra faptului că ai să-mi dai un număr întreg non-negativ. 505 00:32:38,130 --> 00:32:39,780 Deci, asta e un fel de chestii old school. 506 00:32:39,780 --> 00:32:41,980 Dar aici este ceva care e un fel de interesant. 507 00:32:41,980 --> 00:32:44,910 >> Cum pot să merg despre imprimarea unui număr în binar? 508 00:32:44,910 --> 00:32:48,970 Am itera prima din ceea ce la ce? 509 00:32:48,970 --> 00:32:52,270 Care este dimensiunea unui int de obicei, cel puțin în aparat? >> [Elev] 4. 510 00:32:52,270 --> 00:32:57,130 E 4. Deci, 4 * 8 este de 32 - 1 este 31. 511 00:32:57,130 --> 00:33:02,590 Deci, dacă Încep să număr de la 31, care reprezintă, se pare, 512 00:33:02,590 --> 00:33:07,630 doar conceptual, 31 biți sau mai mare biți comanda, care este tipul ăsta de aici, 513 00:33:07,630 --> 00:33:09,650 întrucât acest lucru este de gând să fi 0 biți. 514 00:33:09,650 --> 00:33:12,850 Deci, asta este cam 01 ... 31 biți. 515 00:33:12,850 --> 00:33:14,950 Deci, ce este acest cod face? 516 00:33:14,950 --> 00:33:20,140 Aviz pentru această buclă, deși se pare criptic, este la doar iterarea de la 31 la 0. Asta e tot. 517 00:33:20,140 --> 00:33:24,530 Deci, partea interesantă acum trebuie să fie în aceste 5 linii aici. 518 00:33:24,530 --> 00:33:28,110 Observați că, în această linie am declara o mască variabilă numită 519 00:33:28,110 --> 00:33:30,790 să fie în concordanță cu povestea noastră a acestor numere galbene. 520 00:33:30,790 --> 00:33:32,200 Și atunci ce este aceasta face? 521 00:33:32,200 --> 00:33:35,720 Acesta este un alt operator de la nivel de bit nu ne-am mai văzut înainte, cel mai probabil. 522 00:33:35,720 --> 00:33:38,300 E operatorul deviere la stânga. 523 00:33:38,300 --> 00:33:40,060 Acest operator face acest lucru. 524 00:33:40,060 --> 00:33:44,920 Aici este numărul 1, și, dacă ai face-am lăsat schimbare, schimbare la stânga, 525 00:33:44,920 --> 00:33:49,260 Ce crezi că are efectul de a face acest individ 1? 526 00:33:49,260 --> 00:33:51,290 Literalmente se schimbă peste. 527 00:33:51,290 --> 00:33:57,540 Deci, dacă numărul 1 este ceea ce ai pe stânga și începeți prin a initializarea I-31, 528 00:33:57,540 --> 00:34:03,490 ceea ce este că de gând să faci? Se va lua acest număr 1 si schimba-l 31 de locuri pe aici. 529 00:34:03,490 --> 00:34:06,210 Și pentru că nu e, evident, nici alte cifre în spatele ei, 530 00:34:06,210 --> 00:34:10,350 acestea vor fi în mod implicit înlocuite cu 0s. 531 00:34:10,350 --> 00:34:15,120 Deci, veți începe cu numărul 1, care, desigur, arata ca acest lucru - 532 00:34:15,120 --> 00:34:18,659 și lasă-mă să-l atragă pe aici, în centru. 533 00:34:18,659 --> 00:34:22,139 Și atunci, ca te deplasa lucruri de stânga, acest tip se duce în esență, în acest fel. 534 00:34:22,139 --> 00:34:24,659 Dar, de îndată ce ai făcut asta, un 0 se umple inch 535 00:34:24,659 --> 00:34:28,360 Dacă vă schimba-l a doua oară, merge în acest fel și un alt 0 devine umplut inch 536 00:34:28,360 --> 00:34:31,000 >> Ai schimba din nou și apoi un alt 0 devine umplut inch 537 00:34:31,000 --> 00:34:37,900 Deci, dacă tu a face acest lucru un număr de 1 << i 31 de locuri, vă sfârșesc prin obtinerea o masca 538 00:34:37,900 --> 00:34:42,550 care este de 32 de caractere lungime, cea mai din stânga care este un 1, 539 00:34:42,550 --> 00:34:45,199 toate celelalte, care sunt un 0. 540 00:34:45,199 --> 00:34:50,880 Și se pare, ca o parte, un număr de trecerea la stânga ca aceasta 541 00:34:50,880 --> 00:34:53,530 De asemenea, o coincidență, și, uneori, convenabil, 542 00:34:53,530 --> 00:34:57,520 are efectul de a face ceea ce la acel număr? >> [Elev] Dublarea ea. 543 00:34:57,520 --> 00:35:00,980 Dublarea pentru că fiecare dintre coloane - locul 1s, 2s loc, loc 4s, 544 00:35:00,980 --> 00:35:05,030 Asezare 8s, 16s asezare - Sunt pe toate dublarea ca te duci la stânga. 545 00:35:05,030 --> 00:35:09,500 Sau, mai degrabă, atunci când trecerea 1s ai de gând să ajung dublarea valorii numărului. 546 00:35:09,500 --> 00:35:12,070 Puteți ajunge să faci transformări interesante de cifre 547 00:35:12,070 --> 00:35:15,640 prin schimbarea totul în acest mod de către puterile 2. 548 00:35:15,640 --> 00:35:17,150 Deci, cum face acest lucru? 549 00:35:17,150 --> 00:35:22,580 Acest lucru îmi dă apoi o masca asta e tot 0s, cu excepția pentru un 1 în exact locul în care am o vreau, 550 00:35:22,580 --> 00:35:27,920 și apoi această expresie, care este furat de la toupper.c, 551 00:35:27,920 --> 00:35:31,770 este pur și simplu să ia spune numărul n care utilizatorul tastat, 552 00:35:31,770 --> 00:35:34,730 "Și" cu masca, și ce ai de gând să obțineți? 553 00:35:34,730 --> 00:35:39,200 Ai de gând să obțineți un 1 dacă există un 1 în acea locație mascată, 554 00:35:39,200 --> 00:35:41,570 sau ai de gând să obțineți un 0 daca nu e. 555 00:35:41,570 --> 00:35:44,370 Și astfel toate acest program nu este eficient are o buclă, 556 00:35:44,370 --> 00:35:48,340 și creează o mască cu un 1 aici, apoi un 1 aici, apoi un 1 aici, 557 00:35:48,340 --> 00:35:52,950 și-l folosește acest nivel de bit SI truc să spun este că un pic de intrare 1 în ghidul de aici? 558 00:35:52,950 --> 00:35:59,220 >> Este acolo un pic de intrare 1 în ghidul de aici? Și dacă este așa, imprimați literalmente 1, altfel 0 imprimați. 559 00:35:59,220 --> 00:36:03,780 Facem acest lucru cu Ints doar pentru că asta facem noi de 32 de biți în loc de 8, 560 00:36:03,780 --> 00:36:06,900 dar ceea ce am introdus, atunci este acest nivel de bit SI, SAU la nivel de bit această, 561 00:36:06,900 --> 00:36:10,450 și acest operator deviere la stânga, care nu sunt de multe ori foarte utile, 562 00:36:10,450 --> 00:36:12,230 dar se pare ca acestea pot fi. 563 00:36:12,230 --> 00:36:16,560 De fapt, dacă ar fi să reprezinte ceva de genul o serie de Booleans 564 00:36:16,560 --> 00:36:21,260 doar pentru a reprezenta adevărate sau false, să presupunem că ai vrut să urmăriți dacă este sau nu 565 00:36:21,260 --> 00:36:24,630 o cameră plină de 300 de elevi este prezent, 566 00:36:24,630 --> 00:36:29,420 ai putea declara o matrice de dimensiunea 300 de tip bool, astfel incat sa obtii 300 bools, 567 00:36:29,420 --> 00:36:33,090 și puteți seta fiecare la true dacă cineva este aici și false în caz contrar. 568 00:36:33,090 --> 00:36:37,550 De ce este faptul că reprezentarea în care structura de date ineficientă? 569 00:36:39,370 --> 00:36:44,800 Ce e rău că proiectarea structurii de date, o serie de 300 de bools? 570 00:36:46,190 --> 00:36:49,600 Ce este un bool, de fapt, sub capota? 571 00:36:49,600 --> 00:36:52,310 Acest lucru, de asemenea, este ceva care ar putea să nu fie familiarizați. 572 00:36:52,310 --> 00:36:53,720 Se pare că nu există nici o bool. 573 00:36:53,720 --> 00:36:56,620 Amintiți-vă am creat un fel de care cu dosarul cs50.h, 574 00:36:56,620 --> 00:36:58,630 care se include standardul bool. 575 00:36:58,630 --> 00:37:00,930 C este un fel de prost, deși, atunci când vine vorba de bool. 576 00:37:00,930 --> 00:37:04,880 Acesta utilizează 8 biți pentru a reprezenta fiecare bool, care este complet risipitor 577 00:37:04,880 --> 00:37:09,040 deoarece, evident, câți biți ai nevoie pentru a reprezenta o bool? Doar 1. 578 00:37:09,040 --> 00:37:13,190 Deci, se dovedește că, dacă aveți acum posibilitatea de operatori la nivel de bit cu 579 00:37:13,190 --> 00:37:17,760 pentru a manipula biți individuale, chiar și într-un char, chiar și într-un singur octet, 580 00:37:17,760 --> 00:37:21,380 se pare că ai putea scădea de memorie necesară pentru a reprezenta ceva stupid 581 00:37:21,380 --> 00:37:25,490 cum ar fi faptul că structura de date participarea stil cu un factor de 8. 582 00:37:25,490 --> 00:37:29,820 În loc de a folosi opt biți pentru a reprezenta adevărate sau false, ai putea folosi literalmente una 583 00:37:29,820 --> 00:37:34,500 prin utilizarea unui singur octet pentru fiecare opt elevi din clasa 584 00:37:34,500 --> 00:37:41,990 și comutare 0 - 1 biți individuali prin utilizarea acestor tipuri de low-level trucuri. 585 00:37:43,850 --> 00:37:49,460 Care a pus capăt într-adevăr energie. Sunt acolo orice întrebări legate de operațiuni la nivel de bit? 586 00:37:49,460 --> 00:37:52,710 >> Da. >> [Elev] Există un operator exclusiv sau? 587 00:37:52,710 --> 00:37:56,440 Da. Există un operator exclusiv sau care arata ca acest lucru, ^, simbolul morcov, 588 00:37:56,440 --> 00:38:02,070 ceea ce înseamnă doar primul lucru sau al doilea lucru poate fi un 1 pentru ieșire să fie un 1. 589 00:38:02,070 --> 00:38:07,750 Există, de asemenea, nu o, ~, care vă va permite să invertit o de la 0 la 1 sau vice-versa, precum și. 590 00:38:07,750 --> 00:38:11,600 Și există, de asemenea, un operator de schimbare drept, >>, care este opusul care am văzut-o. 591 00:38:11,600 --> 00:38:13,850 Bine. Să luăm lucrurile acum la un nivel superior. 592 00:38:13,850 --> 00:38:16,770 Am început prin a vorbi despre text și apoi comprimarea 593 00:38:16,770 --> 00:38:19,650 și reprezentarea textului cu numere mai mici de biți; 594 00:38:19,650 --> 00:38:22,890 am vorbit un pic despre modul în care putem începe acum manipularea lucrurile la un nivel la nivel de bit. 595 00:38:22,890 --> 00:38:26,640 Să zoom înapoi până acum 10.000 de picioare la reprezentare 596 00:38:26,640 --> 00:38:29,250 de lucruri mai complexe, cum ar fi grafica. 597 00:38:29,250 --> 00:38:32,950 Aici avem un steag al Germaniei, aici avem una din Franța. 598 00:38:32,950 --> 00:38:36,350 Acestea ar putea fi reprezentate în formate de fișiere pe care le-ar putea cunoașteți - GIF-uri, de exemplu. 599 00:38:36,350 --> 00:38:40,030 Dacă ați văzut vreodată o imagine de pe Web care se termină în. Gif, 600 00:38:40,030 --> 00:38:43,000 Acesta este un format grafic de schimb. 601 00:38:43,000 --> 00:38:47,530 Aceste două steaguri aici un fel de se pretează la comprimare 602 00:38:47,530 --> 00:38:52,050 pentru ce, probabil, evident motiv? >> [Elevului răspunsul neauzit] 603 00:38:52,050 --> 00:38:53,440 Există o mulțime de repetiție, nu? 604 00:38:53,440 --> 00:38:57,270 În scopul de a trimite pavilion Germania, cred că de acest lucru ca fiind o imagine pe ecran 605 00:38:57,270 --> 00:38:59,030 Înapoi în zi răzuibile tale. 606 00:38:59,030 --> 00:39:02,380 S-ar putea aminti ca exista pixeli individuali sau puncte care compun o imagine. 607 00:39:02,380 --> 00:39:06,650 >> E un rând întreg de puncte negre și o altă rând întreg de puncte negre. 608 00:39:06,650 --> 00:39:10,110 Există o grămadă de rânduri de puncte negre pe care le-ar putea vedea, dacă vrem cu adevărat mărită, 609 00:39:10,110 --> 00:39:13,370 de mult ca atunci când am mărită pe fata lui Rob în Photoshop. 610 00:39:13,370 --> 00:39:15,500 De îndată ce ne-am mai adânc și mai adânc și mai adânc în imagine, 611 00:39:15,500 --> 00:39:19,990 ați început să văd pixelare, toate pătrate care compuse ochiul său în acest caz. 612 00:39:19,990 --> 00:39:24,130 Aceeași afacere aici. Dacă ne mărită destul de un pic, te-ar vedea puncte individuale. 613 00:39:24,130 --> 00:39:27,110 Ei bine, aceasta este un fel de deșeuri de biți. 614 00:39:27,110 --> 00:39:32,120 În cazul în care o treime din pavilion este negru și o treime din pavilion este galben și așa mai departe, 615 00:39:32,120 --> 00:39:34,860 de ce nu putem comprima cumva acest steag? 616 00:39:34,860 --> 00:39:39,560 Și chiar de pavilion francez ar putea fi comprimat, chiar dacă modelul este un pic diferit. 617 00:39:39,560 --> 00:39:44,120 Se pare că formatul de fișier GIF este un format de compresie fără pierderi, 618 00:39:44,120 --> 00:39:48,420 ceea ce înseamnă că puteți lua o imagine ca steagul german aici, 619 00:39:48,420 --> 00:39:53,540 puteți arunca o mulțime de biți sale, fără a sacrifica calitatea. 620 00:39:53,540 --> 00:39:55,340 Acest lucru este în contrast cu ceva de genul JPEG, 621 00:39:55,340 --> 00:39:57,050 cu care cele mai multe dintre noi sunt, probabil, mult mai familiare. 622 00:39:57,050 --> 00:39:59,000 Facebook și Flickr fotografii fotografii și cum ar fi 623 00:39:59,000 --> 00:40:02,200 sunt aproape întotdeauna salvate ca imagini JPEG atunci când acestea sunt încărcate, 624 00:40:02,200 --> 00:40:08,100 dar JPEG este o cu pierderi - format, prin care se arunca biți - lossy 625 00:40:08,100 --> 00:40:10,430 dar, de asemenea, arunca departe de calitate. 626 00:40:10,430 --> 00:40:13,890 Și așa că, dacă comprima fotografii cu Photoshop sau încărcați-le pe Facebook 627 00:40:13,890 --> 00:40:15,580 sau le iau de pe un telefon cu adevarat nasol, 628 00:40:15,580 --> 00:40:19,510 știți că imaginea începe pentru a obține foarte pătat și pixelat, 629 00:40:19,510 --> 00:40:22,290 și asta pentru că e fiind comprimat de computer sau un telefon 630 00:40:22,290 --> 00:40:24,550 prin aruncarea literalmente informații la distanță. 631 00:40:24,550 --> 00:40:28,500 Dar GIF este uimitor în faptul că se poate folosi mai puțini biți decât ar putea în mod implicit 632 00:40:28,500 --> 00:40:30,750 fără a pierde nici o informație. 633 00:40:30,750 --> 00:40:32,410 >> Și este, în esență face acest lucru, după cum urmează. 634 00:40:32,410 --> 00:40:38,740 Mai degrabă decât într-un magazin ca un fișier BMP ar fi un triplet RGB pentru negru, negru, negru, negru, 635 00:40:38,740 --> 00:40:42,570 negru, negru, negru, negru, negru, negru, negru, negru și așa mai departe, 636 00:40:42,570 --> 00:40:45,640 mai degrabă, formatul GIF este de gând să spună, "negru", 637 00:40:45,640 --> 00:40:48,330 și apoi, "Repetă asta de 100 de ori", sau ceva de genul asta. 638 00:40:48,330 --> 00:40:52,280 "Negru, repeta asta de 100 de ori, negre, repeta asta de 100 de ori ..." 639 00:40:52,280 --> 00:40:54,530 "Galben, repeta asta de 100 de ori." 640 00:40:54,530 --> 00:40:57,200 Și așa își amintește, în esență, pixel stânga 641 00:40:57,200 --> 00:41:02,160 și apoi codifica oarecum noțiunea de repetăm ​​că pixel din nou și din nou. 642 00:41:02,160 --> 00:41:06,110 Deci, GIF poate comprima, atunci ei înșiși, fără a pierde nici o informație. 643 00:41:06,110 --> 00:41:09,510 Dar dacă ar trebui să ghicesc, în cazul în care este algoritmul care gif-uri de utilizare, 644 00:41:09,510 --> 00:41:13,180 care dintre aceste steaguri, chiar dacă ele arata identic ca marime, 645 00:41:13,180 --> 00:41:19,620 va fi mai mic atunci când sunt salvate pe disc ca un GIF? >> [Elev] Germania. 646 00:41:19,620 --> 00:41:21,660 Germania va fi mai mic? De ce? 647 00:41:21,660 --> 00:41:26,620 [Elev] Pentru ca tu ai repeta de mai multe ori, de multe orizontal 648 00:41:26,620 --> 00:41:29,010 și apoi repetați-un alt timp. Exact >>. 649 00:41:29,010 --> 00:41:32,020 Pentru că oamenii care au inventat GIF doar un fel de arbitrar decis 650 00:41:32,020 --> 00:41:36,040 că repetarea vor fi extinse la nivel orizontal și nu lateral. 651 00:41:36,040 --> 00:41:40,900 E repetiție mult mai mult aici, în lateral pavilion german decât în ​​pavilion francez. 652 00:41:40,900 --> 00:41:44,430 Deci, dacă am deschide de fapt un folder de pe hard-disk care are aceste GIF-uri, 653 00:41:44,430 --> 00:41:51,920 puteți vedea de fapt, că pavilionul german aici este de 2 kilobytes și cel francez este de 4 kilobytes. 654 00:41:51,920 --> 00:41:54,080 Se întâmplă să fie o coincidență că unul este de două ori alta, 655 00:41:54,080 --> 00:41:57,960 dar e, de fapt, cazul în care pavilion francez este mult mai mare. 656 00:41:57,960 --> 00:42:01,250 >> Chiar dacă vorbim aici despre grafică, aceleași idei se pot aplica la 657 00:42:01,250 --> 00:42:05,150 nu lucruri, cum ar fi steaguri, dar imaginile care sunt un pic mai complexe. 658 00:42:05,150 --> 00:42:08,170 Dacă ați face o imagine a unui măr, va exista cu siguranță o mulțime de duplicare acolo, 659 00:42:08,170 --> 00:42:11,040 asa ca am putea aminti cumva că fundal implicită este albastru 660 00:42:11,040 --> 00:42:13,230 și nu, așa cum imaginea din dreapta sugerează, 661 00:42:13,230 --> 00:42:16,830 Trebuie să ne amintim culoarea fiecare pixel din această imagine. 662 00:42:16,830 --> 00:42:21,060 Deci, putem arunca biți la distanță, fără a pierde informații acolo. 663 00:42:21,060 --> 00:42:23,340 Mere arată în continuare la fel. 664 00:42:23,340 --> 00:42:27,510 În acest exemplu aici, este posibil să vedeți ce se întâmplă într-un film. 665 00:42:27,510 --> 00:42:31,970 Acestea reprezintă old-school role de film prin care în imaginea de sus acolo 666 00:42:31,970 --> 00:42:36,900 aveți o conducere RV trecut o casă și un copac. 667 00:42:36,900 --> 00:42:42,130 Și ca van conduce trecut de la stânga la dreapta, ceea ce, evident, nu se schimba? 668 00:42:42,130 --> 00:42:45,320 Casa nu este nicăieri, iar pomul nu se întâmplă nicăieri. 669 00:42:45,320 --> 00:42:47,700 Singurul lucru care se mișcă este van în acest caz. 670 00:42:47,700 --> 00:42:51,650 Deci, ca fundal Neschimbat sugerează, ceea ce se poate face în filme 671 00:42:51,650 --> 00:42:56,530 este similar arunca doar la distanță de informații, care nu se schimbă între cadre. 672 00:42:56,530 --> 00:42:58,900 Acest lucru este, în general, cunoscut sub numele de compresie interframe 673 00:42:58,900 --> 00:43:02,120 prin care, dacă acest cadru arata aproape identic cu acesta, 674 00:43:02,120 --> 00:43:05,390 hai să nu deranjeze stocarea pe disc orice informații identice 675 00:43:05,390 --> 00:43:09,250 pe aceste cadre intermediare, să utilizați numai cadre cheie din când în când 676 00:43:09,250 --> 00:43:13,420 că stoca de fapt, că informațiile redundant doar ca o sanatatea mintala puțin verifica. 677 00:43:13,420 --> 00:43:18,620 >> În schimb, o altă abordare a comprimarea video este în acest al doilea exemplu și mai mici aici, 678 00:43:18,620 --> 00:43:23,970 în cazul în care, mai degrabă decât magazin de 30 de cadre, de ce nu te stoca doar 15 de cadre pe secundă în schimb? 679 00:43:23,970 --> 00:43:27,070 Mai degrabă decât tipul de film care curge frumos, perfect, 680 00:43:27,070 --> 00:43:30,060 s-ar putea arata ca e balbism un pic, o școală pic vechi, 681 00:43:30,060 --> 00:43:37,190 dar efectul net va fi de a folosi mult mai puține decât biți ar putea fi altfel necesar. 682 00:43:37,190 --> 00:43:39,240 Deci, în cazul în care face acest lucru lasă apoi ne? 683 00:43:39,240 --> 00:43:41,700 Asta a fost un pic de o parte pe unde altundeva poti sa te duci cu compresie. 684 00:43:41,700 --> 00:43:45,140 Pentru mai multe despre asta, să ia o clasă ca CS175 aici. 685 00:43:45,140 --> 00:43:46,990 Iată un alt exemplu în cadrul video. 686 00:43:46,990 --> 00:43:49,190 Dacă albine este singurul lucru în mișcare, 687 00:43:49,190 --> 00:43:51,790 te poate arunca într-adevăr departe de informații în aceste cadre medii 688 00:43:51,790 --> 00:43:55,260 deoarece flori și frunze și cer nu se schimbă. 689 00:43:55,260 --> 00:43:57,960 Dar haideți să considerăm acum un ultim lucru. 690 00:43:57,960 --> 00:44:03,890 În următoarele 5 minute lăsăm în urmă pentru totdeauna C în curs? Da. Nu în psets, totuși. 691 00:44:03,890 --> 00:44:10,210 Ultima poveste despre C si apoi ajungem la lucruri foarte sexy 692 00:44:10,210 --> 00:44:13,870 implică HTML și Web și Woo-hoo. Bine. 693 00:44:13,870 --> 00:44:16,050 Aici vom merge. Asta e motivația. 694 00:44:16,050 --> 00:44:20,020 Se pare tot acest timp, atunci când am fost scris programele pe care le execută zăngănit. 695 00:44:20,020 --> 00:44:23,890 Și zăngănit, am spus de la prima saptamana destul de mult, ia codul sursă 696 00:44:23,890 --> 00:44:25,740 și îl convertește în cod obiect. 697 00:44:25,740 --> 00:44:28,540 Este nevoie de C și îl convertește în 0s și 1s. 698 00:44:28,540 --> 00:44:32,150 Am un fel de a mințit pentru câteva săptămâni, pentru că nu e chiar așa de simplu. 699 00:44:32,150 --> 00:44:36,750 >> Există o mult mai mult întâmplă pe sub capota, atunci când executați un program ca zăngănit. 700 00:44:36,750 --> 00:44:39,560 De fapt, procesul de elaborare a unui program poate fi într-adevăr rezumate, 701 00:44:39,560 --> 00:44:42,210 cum s-ar putea retrage de la filme lui Rob pe compilatoare, 702 00:44:42,210 --> 00:44:47,580 în aceste 4 etape: pre-procesare, compilarea în sine, asamblare, și legarea. 703 00:44:47,580 --> 00:44:51,950 Dar noi în clasă și cei mai mulți oameni din lume rezuma de obicei toate aceste etape 704 00:44:51,950 --> 00:44:54,410 ca doar "compilarea." 705 00:44:54,410 --> 00:44:58,070 Dar, dacă începem cu codul sursă așa, reamintesc acest lucru este, probabil, cel mai simplu program C 706 00:44:58,070 --> 00:45:03,530 am scris până acum, amintim că atunci când sunt compilate se termină până cautati ca asta. 707 00:45:03,530 --> 00:45:07,310 Dar există, de fapt un pas intermediar, iar aceste etape sunt după cum urmează. 708 00:45:07,310 --> 00:45:10,750 În primul rând e chestia asta la foarte de sus a acest lucru și cele mai multe dintre programele noastre, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Ce nu include # face pentru noi? 711 00:45:17,210 --> 00:45:24,150 Acesta copii destul de mult și paste conținutul stdio.h în dosarul meu, astfel încât de ce? 712 00:45:24,150 --> 00:45:27,220 De ce-mi pasă mie conținutul stdio.h? Ce e acolo de interes? 713 00:45:27,220 --> 00:45:32,310 Printf declarație, prototipul său, astfel încât compilatorul atunci știe ce vreau să spun 714 00:45:32,310 --> 00:45:34,900 când am menționa această funcție printf. 715 00:45:34,900 --> 00:45:39,390 Deci, pasul 1 în compilarea este pre-procesare, prin care un program de genul zăngănit 716 00:45:39,390 --> 00:45:43,450 sau un alt program care face să răsune ajutor vine cu partea de sus citește codul în jos, 717 00:45:43,450 --> 00:45:47,740 la stânga la dreapta, și ori de câte ori vede un simbol # urmat de un cuvânt cheie cum ar fi includ, 718 00:45:47,740 --> 00:45:53,980 care efectuează această operațiune, copierea și lipirea în acest caz, stdio.h în fișierul. 719 00:45:53,980 --> 00:45:55,510 Asta e pasul 1. 720 00:45:55,510 --> 00:45:59,620 Apoi, aveți o mult mai mare fișier C din cauza copiere imens, de locuri de muncă lipiți ce sa întâmplat. 721 00:45:59,620 --> 00:46:01,710 >> 2 Pasul acum este compilarea. 722 00:46:01,710 --> 00:46:04,880 Dar se pare că ia compilarea codului sursă, care arata ca acest lucru 723 00:46:04,880 --> 00:46:08,160 și se transformă în ceva care arata ca acest lucru, 724 00:46:08,160 --> 00:46:12,560 care pentru cei familiarizați se numeste? >> [Elev] Adunării. Adunarea >> limbă. 725 00:46:12,560 --> 00:46:16,700 Aceasta este, de fapt ceva dacă luați CS61 vei arunca cu capul în mai în detaliu. 726 00:46:16,700 --> 00:46:22,380 Acest lucru este doar despre cât de aproape puteți obține la scrierea 0s și 1s-te 727 00:46:22,380 --> 00:46:25,850 dar scrie lucrurile în așa fel încât face încă cel puțin un pic de sens. 728 00:46:25,850 --> 00:46:30,760 Acestea sunt instrucțiuni mașină, și dacă ne defilați în jos la funcția principală aici, 729 00:46:30,760 --> 00:46:35,470 observați că există această instrucțiune împinge, a muta instruire, scade de instrucțiuni, 730 00:46:35,470 --> 00:46:38,550 apel de instruire, și așa mai departe. 731 00:46:38,550 --> 00:46:42,930 Când auziți că computerul are Intel interior, 732 00:46:42,930 --> 00:46:46,180 aveți un procesor Intel în Mac sau PC-ul, ce înseamnă asta? 733 00:46:46,180 --> 00:46:51,200 Un procesor vine construită de companii precum Intel înțelegerea anumite instrucțiuni. 734 00:46:51,200 --> 00:46:55,770 Ei nu au nici o idee despre ceea ce funcții, cum ar fi swap-sunt sau principal sunt în sine, 735 00:46:55,770 --> 00:47:00,060 dar ei nu știu ce nivel foarte redus, cum ar fi instrucțiunile de adunare, scădere, împinge, 736 00:47:00,060 --> 00:47:02,430 muta, apel, și așa mai departe sunt. 737 00:47:02,430 --> 00:47:06,170 Deci, atunci când compila cod C în limbaj de asamblare, 738 00:47:06,170 --> 00:47:11,820 dvs. foarte user friendly cu aspect cod este transformat în ceva care arată ca aceasta, 739 00:47:11,820 --> 00:47:21,670 care se mișcă literalmente octeți sau 4 octeți în jurul valorii de la aceste unități mici, și în afară de CPU. 740 00:47:21,670 --> 00:47:26,820 Dar în cele din urmă, atunci când face să răsune este gata să ia această reprezentare a programului 741 00:47:26,820 --> 00:47:30,940 în 0s și 1s, apoi pasul numit de asamblare se întâmplă, 742 00:47:30,940 --> 00:47:33,850 și acest lucru din nou, totul se intampla intr-o clipire din ochi atunci când rulează zăngănit. 743 00:47:33,850 --> 00:47:39,300 Vom începe aici, să emită un fișier ca asta, și apoi îl transformă în aceste 0s și 1s. 744 00:47:39,300 --> 00:47:42,000 Și dacă vrei să te întorci la un moment dat și a vedea de fapt, acest lucru în acțiune, 745 00:47:42,000 --> 00:47:48,220 dacă mă duc în hello1.c--aceasta este unul dintre programele primele ne-am uitat la - 746 00:47:48,220 --> 00:47:53,710 în mod normal, ne-ar compila acest lucru cu hello1.c zăngănit și acest lucru ne-ar da a.out. 747 00:47:53,710 --> 00:47:59,890 Dacă în schimb vă dau în schimb S-pavilion, ceea ce veți obține este hello1.s 748 00:47:59,890 --> 00:48:02,750 și veți vedea de fapt, limbajul de asamblare. 749 00:48:02,750 --> 00:48:05,750 >> Fac acest lucru pentru un program foarte scurt, dar dacă te duci înapoi pentru Scramble 750 00:48:05,750 --> 00:48:08,740 sau recupera sau orice alt program care le-ați scris și doar din curiozitate 751 00:48:08,740 --> 00:48:13,240 vrei sa vezi cum arata de fapt, ceea ce de fapt a fi introduse în CPU, 752 00:48:13,240 --> 00:48:15,700 puteți folosi ca-S pavilion cu zăngănit. 753 00:48:15,700 --> 00:48:17,770 Dar apoi în cele din urmă, există încă o Te-am prins. 754 00:48:17,770 --> 00:48:21,810 Aici sunt 0s și 1s, care reprezintă punerea în aplicare a mea Hello, World. 755 00:48:21,810 --> 00:48:25,530 Dar am folosit funcția de altcineva in programul meu. 756 00:48:25,530 --> 00:48:28,710 Deci, chiar dacă procesul a fost sa iau hello.c, 757 00:48:28,710 --> 00:48:34,280 acesta devine compilat în cod de asamblare, iar apoi acesta devine asamblate în 0s și 1s, 758 00:48:34,280 --> 00:48:37,460 numai 0s și 1s care sunt scoase în acest moment, în timp 759 00:48:37,460 --> 00:48:40,270 sunt cele care rezultă din codul meu. 760 00:48:40,270 --> 00:48:44,400 Dar persoana care a scris printf, au compilat codul lor acum 20 de ani 761 00:48:44,400 --> 00:48:47,000 și este acum instalat undeva pe aparat, 762 00:48:47,000 --> 00:48:51,610 așa că trebuie cumva să fuzioneze 0s lui sau a ei și 1s cu 0s mea și 1s, 763 00:48:51,610 --> 00:48:56,160 și care ne aduce la pasul 4 si finala de elaborare a, cunoscut sub numele de legare. 764 00:48:56,160 --> 00:48:58,680 Deci, pe partea stângă avem imaginea exact același ca și înainte: 765 00:48:58,680 --> 00:49:02,580 hello.c devine cod de asamblare devine 0s și 1s. 766 00:49:02,580 --> 00:49:05,960 Dar amintesc că am folosit standard de I / O bibliotecă în codul meu, 767 00:49:05,960 --> 00:49:10,350 și asta înseamnă undeva pe calculator există un fișier numit stdio.c 768 00:49:10,350 --> 00:49:13,980 sau, cel puțin varianta compilată cu privire la aceasta pentru că cineva cu câțiva ani în urmă 769 00:49:13,980 --> 00:49:18,530 compilat stdio.c în cod de asamblare si apoi o grămadă de 0s și 1s. 770 00:49:18,530 --> 00:49:21,130 Aceasta este ceea ce este cunoscut ca un statică sau o bibliotecă dinamică. 771 00:49:21,130 --> 00:49:23,350 E un fișier sta undeva în aparat. 772 00:49:23,350 --> 00:49:28,710 >> Dar în cele din urmă, trebuie să-mi 0s și 1s și că persoana lui 0s și 1s 773 00:49:28,710 --> 00:49:32,760 și legați-le împreună într-un fel, combina literalmente cei 0s și 1s 774 00:49:32,760 --> 00:49:37,900 într-un singur fișier numit a.out sau hello1 sau orice i-am sunat programul meu 775 00:49:37,900 --> 00:49:43,320 astfel încât rezultatul final are toate 1s și 0s, care ar trebui să compun programul meu. 776 00:49:43,320 --> 00:49:45,660 Deci, în tot acest timp în acest semestru când ați fost utilizați zăngănit 777 00:49:45,660 --> 00:49:48,750 și chiar, mai recent, de funcționare a face, în scopul de a rula zăngănit, 778 00:49:48,750 --> 00:49:53,580 toate aceste etape s-au întâmplat fel de instantaneu, dar foarte în mod deliberat. 779 00:49:53,580 --> 00:49:57,830 Și așa că, dacă veți continua pe calculator în domeniul științei, și anume CS61, 780 00:49:57,830 --> 00:50:00,850 aceasta este stratul care veți continua să coaja înapoi acolo 781 00:50:00,850 --> 00:50:06,980 vorbim despre eficiența, implicațiile de securitate, și la fel ca de aceste detalii de nivel inferior. 782 00:50:06,980 --> 00:50:09,220 Dar cu asta, suntem pe cale de a părăsi C urmă. 783 00:50:09,220 --> 00:50:11,420 Să mergem mai departe și să ia nostru de 5 minute de pauza acum, 784 00:50:11,420 --> 00:50:14,190 și când ne întoarcem: Internet. 785 00:50:17,280 --> 00:50:19,170 Bine. Ne-am întors. 786 00:50:19,170 --> 00:50:23,590 Acum vom începe privirea noastră nu doar la HTML, deoarece, după cum veți vedea, 787 00:50:23,590 --> 00:50:26,050 HTML în sine este, de fapt destul de simplu 788 00:50:26,050 --> 00:50:29,270 dar de fapt la programare web, în ​​general, mai mult, crearea unei rețele mai general, 789 00:50:29,270 --> 00:50:31,770 și modul în care toate aceste tehnologii vin împreună 790 00:50:31,770 --> 00:50:35,400 pentru a ne permite de a crea programe mult mai sofisticate deasupra internet 791 00:50:35,400 --> 00:50:38,690 decât până acum am reușit la aceste ferestre alb și negru. 792 00:50:38,690 --> 00:50:42,140 Într-adevăr, în acest moment, în semestrul chiar dacă ne vom petrece timpul relativ mai puțin 793 00:50:42,140 --> 00:50:46,200 pe PHP, HTML, CSS, JavaScript, SQL și mai mult, 794 00:50:46,200 --> 00:50:48,480 majoritatea studenților se termină prin a face proiecte finale, care sunt bazate pe web 795 00:50:48,480 --> 00:50:51,230 pentru că așa cum veți vedea, fundal aveți acum în C 796 00:50:51,230 --> 00:50:54,450 este foarte mult aplicabile acestor limbi de nivel superior. 797 00:50:54,450 --> 00:50:56,800 >> Și, după cum incepi sa te gandesti despre proiectul dumneavoastră finală, 798 00:50:56,800 --> 00:50:59,940 care, la fel ca set de probleme 0, în cazul în care ați fost încurajați 799 00:50:59,940 --> 00:51:02,160 pentru a face cele mai multe nimic de interes pentru tine în Scratch, 800 00:51:02,160 --> 00:51:05,790 final al proiectului este o oportunitate de a lua cunoștințele dobandita si savvy cu C 801 00:51:05,790 --> 00:51:09,850 sau PHP sau JavaScript sau ca afară pentru un spin 802 00:51:09,850 --> 00:51:12,330 și de a crea propriul dvs. foarte piesa de software pentru ca lumea să vadă. 803 00:51:12,330 --> 00:51:17,770 Și semințelor de tine cu idei, știu că puteți merge aici, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 În fiecare an, vom solicita idei de la facultate și de personal și grupuri de studenți în campus 805 00:51:21,800 --> 00:51:27,330 doar să-și prezinte ideile lor pentru lucruri interesante care ar putea fi rezolvate cu ajutorul calculatoarelor, 806 00:51:27,330 --> 00:51:29,860 folosind site-uri web, folosind software-ul. 807 00:51:29,860 --> 00:51:32,360 Deci, dacă sunteți luptă pentru a veni cu o idee de propria dvs., 808 00:51:32,360 --> 00:51:35,790 prin toate mijloacele a parcurge ideile acolo din acest an și ultimul. 809 00:51:35,790 --> 00:51:39,990 Este perfect în regulă să abordeze un proiect care a fost abordat înainte. 810 00:51:39,990 --> 00:51:44,540 Am văzut multe aplicații pentru a vedea starea de rufe în campus, 811 00:51:44,540 --> 00:51:47,000 multe aplicații pentru navigarea meniului sala de mese, 812 00:51:47,000 --> 00:51:49,540 multe aplicații de navigație pentru catalogul cursului și cum ar fi. 813 00:51:49,540 --> 00:51:53,680 Și într-adevăr, într-o conferință viitor și în seminariile viitoare, 814 00:51:53,680 --> 00:51:57,750 vă vom introduce la unele API-uri disponibile publicului, atât comercial disponibil 815 00:51:57,750 --> 00:52:02,520 precum și aici, disponibile de la CS50 în campus, astfel încât să aveți acces la datele 816 00:52:02,520 --> 00:52:04,910 și poate face lucruri interesante apoi cu ea. 817 00:52:04,910 --> 00:52:09,380 Deci, mai mult pe proiectele finale în câteva zile, atunci când vom elibera caietul de sarcini, 818 00:52:09,380 --> 00:52:12,990 dar pentru acum, știu că puteți lucra solo sau cu unul sau doi prieteni 819 00:52:12,990 --> 00:52:16,010 pe aproape orice proiect de interes pentru tine. 820 00:52:16,010 --> 00:52:18,080 Internetul. 821 00:52:18,080 --> 00:52:22,300 Merge mai departe și scoate laptop-ul, te duci la facebook.com pentru prima dată, 822 00:52:22,300 --> 00:52:27,020 nu au autentificat în curând, și a lovi Enter. Ce anume se întâmplă? 823 00:52:27,020 --> 00:52:30,150 >> Când te-a lovit Enter pe calculatorul dvs., o grămadă de pași 824 00:52:30,150 --> 00:52:32,600 începe un fel de magie se întâmplă. 825 00:52:32,600 --> 00:52:35,960 Deci, aici, pe serverul de stânga, de web cum ar fi Facebook este aici, pe dreapta, 826 00:52:35,960 --> 00:52:42,500 și cumva te folosi acest limbaj numit HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP nu este un limbaj de programare. E mai mult de un protocol. 828 00:52:46,770 --> 00:52:52,310 Acesta este un set de convenții care browserele web și servere de web utilizează atunci când între ele. 829 00:52:52,310 --> 00:52:54,360 Și ce înseamnă acest lucru este după cum urmează. 830 00:52:54,360 --> 00:52:56,790 La fel ca în lumea reală, avem aceste convenții 831 00:52:56,790 --> 00:53:00,140 în cazul în care, dacă ați întâlni unele umană pentru prima dată, dacă nu te superi perie mine aici, 832 00:53:00,140 --> 00:53:03,980 S-ar putea veni la tine, spui, "Buna, numele meu este David." Bună >>, David. Numele meu este Sammy. 833 00:53:03,980 --> 00:53:05,770 "Bună, David. Numele meu este Sammy." 834 00:53:05,770 --> 00:53:08,310 Asa ca acum tocmai am implicat în acest tip de protocol umane prostie 835 00:53:08,310 --> 00:53:12,200 în cazul în care am initiat protocolul, Sammy a răspuns, 836 00:53:12,200 --> 00:53:15,060 ne-am agitat mâinile, iar tranzacția este completă. 837 00:53:15,060 --> 00:53:18,260 HTTP este foarte similară în spirit. 838 00:53:18,260 --> 00:53:23,350 Atunci când cererile browser-ului tău www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 ceea ce browser-ul dvs. este într-adevăr face este extinderea mâna, ca să spunem așa, 840 00:53:27,020 --> 00:53:29,960 la server și se trimite un mesaj. 841 00:53:29,960 --> 00:53:34,220 Și că mesajul este de obicei ceva de genul te - ce vrei să obțineți? - 842 00:53:34,220 --> 00:53:38,740 adu-mi pagina de pornire, care este de obicei notată cu o singură bară oblică la sfârșitul unei adrese URL. 843 00:53:38,740 --> 00:53:43,790 Și doar ca să știi ce limbă vorbesc, eu browser-ul am de gând să-ți spun 844 00:53:43,790 --> 00:53:46,930 că eu vorbesc HTTP versiunea 1.1, 845 00:53:46,930 --> 00:53:51,980 Și, de asemenea, pentru o bună măsură, am de gând să vă spun că gazda pe care vreau Pagina de 846 00:53:51,980 --> 00:53:54,120 este facebook.com. 847 00:53:54,120 --> 00:53:57,730 De obicei, un browser web, fără știrea dumneavoastră, umană, 848 00:53:57,730 --> 00:54:03,350 trimite acest mesaj pe Internet atunci când tastați pur și simplu www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Intre în browser-ul dumneavoastră. 850 00:54:05,370 --> 00:54:07,300 Și ce face pe Facebook răspunde cu? 851 00:54:07,300 --> 00:54:12,540 Acesta răspunde cu unele detalii similară cu aspect criptic, dar, de asemenea, mult mai mult. 852 00:54:12,540 --> 00:54:14,310 Lasă-mă să merg mai departe la pagina de pornire Facebook aici. 853 00:54:14,310 --> 00:54:17,480 Acesta este ecranul că cele mai multe dintre noi nu vedea, probabil, daca stai autentificat tot timpul, 854 00:54:17,480 --> 00:54:19,830 dar acest lucru este într-adevăr pagina lor de origine. 855 00:54:19,830 --> 00:54:24,150 Dacă vom face acest lucru în Chrome, observați că puteți trage în sus aceste meniuri contextuale mici. 856 00:54:24,150 --> 00:54:26,980 Folosind Chrome, fie pe Mac OS, Windows, Linux, sau cum ar fi, 857 00:54:26,980 --> 00:54:31,840 Daca ai control asupra clic sau faceți clic pe stânga, puteți trage de obicei, un meniu care arata ca acest lucru, 858 00:54:31,840 --> 00:54:35,870 în cazul în care câteva opțiuni așteaptă, dintre care unul este Page View Source. 859 00:54:35,870 --> 00:54:39,920 De asemenea, puteți obține de obicei la aceste lucruri de a merge la meniul Vizualizare și poking în jurul valorii de. 860 00:54:39,920 --> 00:54:42,750 De exemplu, aici sub Vizualizare, Developer este același lucru. 861 00:54:42,750 --> 00:54:45,780 Am de gând să merg mai departe și uită-te la pagina Vezi Sursa. 862 00:54:45,780 --> 00:54:50,800 Ceea ce veți vedea este HTML care Mark a scris pentru a reprezenta facebook.com. 863 00:54:50,800 --> 00:54:55,910 E o mizerie complet aici, dar vom vedea că acest lucru are sens un pic mai mult înainte de mult timp. 864 00:54:55,910 --> 00:54:59,840 Dar există unele modele de aici. Lasă-mă să defilați în jos la chestii de genul asta. 865 00:54:59,840 --> 00:55:05,730 Acest lucru este greu pentru un om să citească, dar observați că există acest model de paranteze în unghi 866 00:55:05,730 --> 00:55:10,360 cu cuvinte cheie cum ar fi opțiunea, cuvinte cheie, cum ar fi valoarea, unele șiruri. 867 00:55:10,360 --> 00:55:15,660 Acest lucru este în cazul în care, atunci când v-ați înscris pentru prima dată, a specificat ce anul dvs. de naștere este. 868 00:55:15,660 --> 00:55:19,020 Că meniul drop-down de ani de naștere este oarecum codificat aici 869 00:55:19,020 --> 00:55:23,870 în acest limbaj numit HTML, HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Cu alte cuvinte, atunci când browserul cere o pagina web, 871 00:55:27,730 --> 00:55:30,610 se vorbește despre această convenție numit HTTP. 872 00:55:30,610 --> 00:55:35,170 Dar ce nu facebook.com răspunde la această cerere cu? 873 00:55:35,170 --> 00:55:38,260 >> Acesta răspunde cu unele dintre aceste mesaje criptice, după cum vom vedea într-o clipă. 874 00:55:38,260 --> 00:55:43,760 Dar cea mai mare a răspunsului său este în formă de HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 Asta e limba reală în care o pagină web este scris. 876 00:55:47,170 --> 00:55:52,030 Și ce un browser web într-adevăr nu este, atunci, la primirea ceva care arata ca acest lucru, 877 00:55:52,030 --> 00:55:57,120 citește-l de sus în jos, de la stânga la dreapta, și de fiecare dată se vede unul dintre aceste paranteze în unghi 878 00:55:57,120 --> 00:56:03,370 urmată de un cuvânt cheie ca opțiune, se afișează ca limbajul de marcare în mod adecvat. 879 00:56:03,370 --> 00:56:06,820 În acest caz, se va afișa un meniu drop-down de ani. 880 00:56:06,820 --> 00:56:09,240 Dar, din nou, acest lucru este un dezastru complet sa se uite la. 881 00:56:09,240 --> 00:56:16,630 Acest lucru nu se datorează faptului că dezvoltatorii Facebook manifestă 0 pentru 5 pentru stil, de exemplu. 882 00:56:16,630 --> 00:56:20,190 Acest lucru se datorează faptului că cele mai multe din cod care se scrie este, de fapt, scrisă frumos, 883 00:56:20,190 --> 00:56:22,450 bine comentat, frumos indentat, și cum ar fi, 884 00:56:22,450 --> 00:56:26,080 dar desigur, utilaje, computere, browsere într-adevăr nu dau doi bani 885 00:56:26,080 --> 00:56:27,890 dacă codul este bine-stil. 886 00:56:27,890 --> 00:56:33,100 Și, de fapt, e complet inutile pentru a lovi tasta TAB toate acele vremuri 887 00:56:33,100 --> 00:56:37,650 și de a pune comentarii pe tot parcursul codul dvs. și pentru a alege numele adevărat descriptive variabile 888 00:56:37,650 --> 00:56:42,340 pentru că dacă browser-ul nu-i pasă, tot ce faci, la sfârșitul zilei se pierde octeți. 889 00:56:42,340 --> 00:56:46,660 >> Deci, se dovedește ceea ce majoritatea site-urilor nu este, chiar dacă sursa cod pentru facebook.com, 890 00:56:46,660 --> 00:56:49,550 pentru cs50.net și toate aceste alte site-uri de pe Internet 891 00:56:49,550 --> 00:56:53,730 sunt de obicei bine scris și bine comentat si frumos indentate și cum ar fi, 892 00:56:53,730 --> 00:56:59,270 de obicei, înainte de a se pune pe site-ul de Internet, codul este minified, 893 00:56:59,270 --> 00:57:02,970 prin HTML si CSS - altceva vom vedea în curând - 894 00:57:02,970 --> 00:57:05,960 cod JavaScript, vom vedea în curând este comprimat, 895 00:57:05,960 --> 00:57:09,250 prin care numele lungi de variabile devin X și Y și Z, 896 00:57:09,250 --> 00:57:13,900 și toate astea spații albe care face lucrurile să pară atât de ușor de citit este tot aruncat, 897 00:57:13,900 --> 00:57:17,700 pentru că, dacă stai să te gândești în acest fel, Facebook devine o pagină de miliarde de hit-uri pe zi - 898 00:57:17,700 --> 00:57:21,670 ceva de genul asta nebun - Și ce dacă un programator pentru a fi anal 899 00:57:21,670 --> 00:57:26,660 a lovit bara de spațiu o dată în plus doar pentru a liniuță o linie de cod tot atât de mult mai mult? 900 00:57:26,660 --> 00:57:29,500 Care este implicarea în cazul în care Facebook păstrează în spații albe 901 00:57:29,500 --> 00:57:32,880 în toate bytes le trimite înapoi la oamenii de pe internet? 902 00:57:32,880 --> 00:57:36,400 Lovirea bara de spațiu o dată vă oferă un octet în plus în fișierul. 903 00:57:36,400 --> 00:57:39,730 Și dacă un miliard de oameni trece apoi pentru a descărca pagina de acasă în acea zi, 904 00:57:39,730 --> 00:57:42,060 cât de mult mai multe date ați transmis pe Internet? 905 00:57:42,060 --> 00:57:45,200 Un gigabyte pentru nici un motiv bun. 906 00:57:45,200 --> 00:57:48,510 Și a acordat, pentru o mulțime de site-uri acest lucru nu este o problemă atât de scalabil, 907 00:57:48,510 --> 00:57:51,030 dar pentru Facebook, pentru Google, pentru unele dintre cele mai populare site-uri 908 00:57:51,030 --> 00:57:54,860 nu e mare stimulent financiar pentru a face codul sa arate ca o mizerie 909 00:57:54,860 --> 00:57:58,980 astfel încât să îl utilizați ca bytes puține posibil, în plus față de atunci comprimare 910 00:57:58,980 --> 00:58:01,500 folosind ceva de genul zip, un algoritm numit gzip, 911 00:58:01,500 --> 00:58:04,250 că browser-ul face pentru tine în mod automat. Dar asta este groaznic. 912 00:58:04,250 --> 00:58:08,060 Noi niciodată nu vom afla nimic despre site-urile altor oameni si cum pentru a crea pagini web 913 00:58:08,060 --> 00:58:09,680 în cazul în care trebuie să privim la ea ca asta. 914 00:58:09,680 --> 00:58:13,620 >> Deci, din fericire, browsere, cum ar fi Chrome și IE și Firefox aceste zile 915 00:58:13,620 --> 00:58:16,450 de obicei, vin cu instrumente de dezvoltare built-in. 916 00:58:16,450 --> 00:58:21,730 De fapt, dacă mă duc aici pentru a inspecta element sau dacă mergeți la View, Developer, 917 00:58:21,730 --> 00:58:25,220 și du-te la Instrumente de dezvoltare în mod explicit, 918 00:58:25,220 --> 00:58:27,640 fereastra de la partea de jos a ecranului meu acum apare. 919 00:58:27,640 --> 00:58:31,230 E un pic intimidant la început, deoarece există o mulțime de file necunoscute aici, 920 00:58:31,230 --> 00:58:34,510 dar dacă fac clic pe Elemente tot drumul de la stânga jos, 921 00:58:34,510 --> 00:58:38,810 Chrome este, evident, destul de inteligent. Ea știe cum să interpreteze toate acestui cod. 922 00:58:38,810 --> 00:58:42,320 Și ce face Chrome este curata toate HTML Facebook. 923 00:58:42,320 --> 00:58:45,680 Chiar dacă nu e spațiu acolo, nu e indentare acolo, 924 00:58:45,680 --> 00:58:51,120 acum observați că pot începe să navigați în această pagină web tot mai mult ierarhic. 925 00:58:51,120 --> 00:58:56,910 Se pare că fiecare pagina web scrise într-un limbaj numit HTML5 ar trebui să înceapă cu acest lucru, 926 00:58:56,910 --> 00:59:03,980 această declarație DOCTYPE, ca să spunem așa: 927 00:59:03,980 --> 00:59:07,840 E un fel de lumină și gri acolo, dar asta e prima linie foarte de cod în acest dosar, 928 00:59:07,840 --> 00:59:12,080 și care spune doar browser-ul, "Hei, vine aici unele HTML5 Aici vine o pagina web.". 929 00:59:12,080 --> 00:59:18,490 Paranteză deschisă prima dincolo de care se întâmplă să fie acest lucru, un suport deschis tag-ul HTML, 930 00:59:18,490 --> 00:59:22,320 și apoi, dacă am arunca cu capul adânc în - aceste săgeți sunt complet lipsite de sens; 931 00:59:22,320 --> 00:59:25,140 acestea sunt doar de dragul de prezentare, acestea nu sunt de fapt în dosar - 932 00:59:25,140 --> 00:59:30,300 observa că în interiorul tag-ul HTML Facebook, ceva care începe cu un suport deschis 933 00:59:30,300 --> 00:59:32,910 și apoi a un cuvânt se numește o etichetă. 934 00:59:32,910 --> 00:59:38,610 Deci, în interiorul tag-ul HTML este aparent o etichetă cap și o etichetă organism. 935 00:59:38,610 --> 00:59:41,930 In interiorul tag-ul capului este acum un dezastru pentru intreaga Facebook 936 00:59:41,930 --> 00:59:45,620 deoarece acestea au o mulțime de metadate și alte lucruri pentru marketing si publicitate. 937 00:59:45,620 --> 00:59:50,600 >> Dar dacă ne defila în jos, în jos, în jos, în jos, să vedem unde este. Aici este. 938 00:59:50,600 --> 00:59:52,210 Acesta este de cel puțin oarecum familiarizat. 939 00:59:52,210 --> 00:59:55,990 Titlul Pagina Facebook a lui, daca te uiti vreodata la fila în bara de titlu, 940 00:59:55,990 --> 00:59:59,060 este Bine ati venit la Facebook - Log In, Înscriere sau Află mai multe. 941 00:59:59,060 --> 01:00:01,110 Asta e ceea ce ar vedea în bara de titlu a lui Chrome, 942 01:00:01,110 --> 01:00:03,100 și că e modul în care este reprezentată în cod. 943 01:00:03,100 --> 01:00:08,090 Dacă ignorăm orice altceva în cap, de cele mai multe curajul de o pagină web sunt în organism, 944 01:00:08,090 --> 01:00:10,940 și se dovedește că Codul de Facebook se va arata mult mai complexe 945 01:00:10,940 --> 01:00:14,540 decât majoritatea lucrurile pe care le vom scrie, inițial doar pentru că a fost construit de-a lungul anilor, 946 01:00:14,540 --> 01:00:17,260 dar există o mulțime de tag-uri script, cod JavaScript, 947 01:00:17,260 --> 01:00:18,870 care face site-ul foarte interactiv: 948 01:00:18,870 --> 01:00:22,330 văzând actualizări de stare utilizând instantaneu de limbi, cum ar fi JavaScript. 949 01:00:22,330 --> 01:00:25,270 E ceva numit un div, care este o divizie a unei pagini. 950 01:00:25,270 --> 01:00:27,940 Dar, înainte de a ajunge la acest detaliu, să încercăm să micșora 951 01:00:27,940 --> 01:00:31,920 si uita-te la o versiune mai simplă a Facebook 1.0, ca să spunem așa. 952 01:00:31,920 --> 01:00:34,740 Aici este lumea salut, de pagini web. 953 01:00:34,740 --> 01:00:37,370 Ea are ca declarația DOCTYPE la foarte de sus 954 01:00:37,370 --> 01:00:40,280 care este un pic diferit de orice altceva. 955 01:00:40,280 --> 01:00:46,130 Nimic altceva nu am scrie într-o pagină web este de gând să încep cu 01:00:48,880 și, cu excepția pentru ceva numit observații în HTML. 957 01:00:48,880 --> 01:00:53,000 Dar pentru cea mai mare parte, totul într-o pagină web este deschis suport, cuvinte cheie, suport aproape. 958 01:00:53,000 --> 01:00:56,220 >> În acest caz, puteți vedea mai simplă a paginilor web posibile. 959 01:00:56,220 --> 01:01:00,260 Tag-ul HTML conține o etichetă de cap și conține o etichetă organism, 960 01:01:00,260 --> 01:01:04,580 dar observați că există această noțiune de pornire și oprire tag-uri. 961 01:01:04,580 --> 01:01:11,360 Aceasta este eticheta de start pentru HTML, aceasta este tag-ul tag-ul sau aproape de sfârșitul anului. 962 01:01:11,360 --> 01:01:15,400 Observați că sunt un fel de contrariilor, în sensul că tag-ul tag-ul aproape sau sfârșitul 963 01:01:15,400 --> 01:01:20,030 a acestui slash interiorul sine. 964 01:01:20,030 --> 01:01:23,540 Între timp, există o etichetă de cap deschis aici și o etichetă cap de aproape aici. 965 01:01:23,540 --> 01:01:26,880 >> E un titlu deschis și o etichetă de titlu aproape aici. 966 01:01:26,880 --> 01:01:29,850 Faptul că l-am pus titlul pe o singură linie, pur arbitrară. 967 01:01:29,850 --> 01:01:33,760 Este doar părea că s-ar potrivi bine pe o singură linie, asa ca nu am deranjat apăsarea Enter de câteva ori. 968 01:01:33,760 --> 01:01:38,200 Între timp, organismul am făcut liniuță doar pentru a fi vreodată atât de clar. 969 01:01:38,200 --> 01:01:41,050 Observați că HTML este un limbaj destul de prost. 970 01:01:41,050 --> 01:01:43,410 De fapt, înapoi în zi înainte erau editoare WYSIWYG 971 01:01:43,410 --> 01:01:46,770 și în cazul în care Microsoft Word vă pot spune, "Faceți acest îndrăzneț, face acest cursive," 972 01:01:46,770 --> 01:01:50,850 va trebui sa tastezi comenzi mici eseuri în 20 + de ani în urmă 973 01:01:50,850 --> 01:01:55,740 prin care v-ați putea spune, "Start făcând acest text aldin Nu mai face acest text cu litere aldine.". 974 01:01:55,740 --> 01:01:59,010 "Start a face acest lucru prin caractere cursive textul STOP face acest lucru prin caractere cursive de text.". 975 01:01:59,010 --> 01:02:01,850 >> Asta e ceea ce HTML sau orice limbaj de marcare este. 976 01:02:01,850 --> 01:02:05,530 Această etichetă spune prima, "Hei, browser-ul. Aici vine ceva HTML." 977 01:02:05,530 --> 01:02:09,880 Tag-ul următor spune, "Hei, browser-ul. Aici vine capul, antetul de pagina mea web." 978 01:02:09,880 --> 01:02:11,650 "Hei, browser-ul. Aici vine titlul." 979 01:02:11,650 --> 01:02:15,880 Și apoi aici, "Hei, browser-ul. Asta e pentru titlu." 980 01:02:15,880 --> 01:02:20,000 Deci, acesta este modul în care browser-ul știe să nu se mai afișeze mai multe caractere decât Salut, lume 981 01:02:20,000 --> 01:02:21,860 în bara de titlu. 982 01:02:21,860 --> 01:02:23,640 Între timp, aceasta spune: "Asta e pentru cap." 983 01:02:23,640 --> 01:02:28,340 Aceasta spune: "Aici vine corpul Aici este reală a corpului." - Literal, cuvintele salut, lume. 984 01:02:28,340 --> 01:02:33,190 Și asta spune aici, "Asta e pentru organismul Asta e pentru HTML.". 985 01:02:33,190 --> 01:02:34,640 Deci, browsere sunt destul de prost. 986 01:02:34,640 --> 01:02:39,920 Ei citesc doar chestia asta de sus în jos, de la stânga la dreapta, și de a face exact ceea ce li se spune să facă. 987 01:02:39,920 --> 01:02:41,860 Să facem de fapt un mic exemplu aici. 988 01:02:41,860 --> 01:02:46,240 Lasă-mă să deschid mai simplă de programe pe Mac-ul meu aici, și anume TextEdit. 989 01:02:46,240 --> 01:02:48,220 În Windows ai putea folosi Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Dar acest lucru este tot ce ai nevoie pentru a începe a face pagini web. 991 01:02:50,520 --> 01:02:53,730 Am de gând să merg mai departe și doar copiați și inserați acest cod în acest fișier. 992 01:02:53,730 --> 01:02:57,210 Am de gând să merg mai departe și salvați-l pe desktop-ul meu, 993 01:02:57,210 --> 01:03:01,220 și am de gând să salveze acest lucru ca hello.html, 994 01:03:01,220 --> 01:03:03,840 iar acum fișierul este numit hello.html. 995 01:03:03,840 --> 01:03:05,690 Aici este pe desktop. 996 01:03:05,690 --> 01:03:11,130 Lasă-mă să plec acum într-un browser și trageți fișierul în browser-ul. 997 01:03:11,130 --> 01:03:14,060 Și voila, aici este pagina mea web foarte primul. 998 01:03:14,060 --> 01:03:17,340 Observați că titlul este fila salut, lumea ca pe tag-ul titlu, 999 01:03:17,340 --> 01:03:20,040 și observați că salut, lumea este corpul pagina mea web, 1000 01:03:20,040 --> 01:03:22,190 și woo-hoo, eu sunt pe internet. 1001 01:03:22,190 --> 01:03:24,700 >> Eu nu sunt cu adevărat, nu, pentru că acest dosar nu este pe internet. 1002 01:03:24,700 --> 01:03:28,330 Se întâmplă să fie pe pagina mea hard disc la această cale special. 1003 01:03:28,330 --> 01:03:32,720 Dar ideea este aceeași. Tot ce avem nevoie acum este un server de web la care să-l încărcați. 1004 01:03:32,720 --> 01:03:37,410 Dar mai întâi să introducă, de fapt complexitatea un pic mai mult și o stilizare pic mai mult. 1005 01:03:37,410 --> 01:03:39,890 Aceasta este o simplă, în cazul în care plictisitoare, pagina de web. 1006 01:03:39,890 --> 01:03:41,990 Se pare că există și alte tipuri de tag-uri care le putem folosi. 1007 01:03:41,990 --> 01:03:45,530 De exemplu, aici, în galben Am introdus 2 noi etichete. 1008 01:03:45,530 --> 01:03:49,630 Noi nu va juca mai mult cu aceste ziua de azi, dar observați că link-ul tag-ul 1009 01:03:49,630 --> 01:03:52,520 într-un fel arată diferit de orice altceva. 1010 01:03:52,520 --> 01:03:55,370 Tag-ul link-ul are ceea ce se numesc atribute, 1011 01:03:55,370 --> 01:03:59,770 și un atribut este ceva care modifică comportamentul unui tag. 1012 01:03:59,770 --> 01:04:03,840 În acest caz, aceasta nu este cea mai buna alegere de nume, link, pentru că e un fel de sens, 1013 01:04:03,840 --> 01:04:11,590 dar această etichetă link-ul spune, în esență, să includă fișier numit styles.css interiorul pagina mea web. 1014 01:04:11,590 --> 01:04:15,400 Vă puteți gândi la acest lucru ca analog a lui C # include directivă. 1015 01:04:15,400 --> 01:04:19,650 Styles.css se referă la o altă limbă, că nu va juca astăzi cu, 1016 01:04:19,650 --> 01:04:23,790 dar e pentru estetica: dimensiuni de font, culori, perne de capitonaj, indentare, marje, 1017 01:04:23,790 --> 01:04:26,040 și tot de acest tip de detaliu estetica. 1018 01:04:26,040 --> 01:04:28,820 Între timp, tag-ul script-ul este funcțional similară, 1019 01:04:28,820 --> 01:04:33,140 ci, mai degrabă decât includ CSS, ca limbaj, acesta include o altă limbă, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Deci, cu alte cuvinte, cu aceste 2 tag-uri, voi fi în cele din urmă posibilitatea de a scrie pagina mea de web proprie 1021 01:04:37,810 --> 01:04:41,490 dar, de asemenea, trage in cod că eu sau altcineva a scris 1022 01:04:41,490 --> 01:04:44,350 astfel încât să putem sta pe umerii altor oameni, putem practica un design bun, 1023 01:04:44,350 --> 01:04:46,120 de factoring a codului comun. 1024 01:04:46,120 --> 01:04:49,090 Dacă am 10 pagini diferite de web, acest lucru înseamnă că o parte din estetica mele 1025 01:04:49,090 --> 01:04:52,490 poate fi afară factorizate, la fel ca # include, într-un fișier separat. 1026 01:04:52,490 --> 01:04:54,420 Deci suntem obtinerea acolo. 1027 01:04:54,420 --> 01:04:57,180 Dar hai să facem de fapt primul ceva mai interesant cu acest fișier. 1028 01:04:57,180 --> 01:05:01,110 >> Din nou, aceasta este doar TextEdit. Eu nu sunt punct de vedere tehnic pe internet inca, dar vom ajunge acolo. 1029 01:05:01,110 --> 01:05:04,910 Aș dori să fac salut, lumea un pic mai îndrăzneț decât este. 1030 01:05:04,910 --> 01:05:10,890 Deci salut, hai să spunem arbitrar pentru caractere aldine. 1031 01:05:10,890 --> 01:05:15,910 Din nou, povestea este aceeasi: hello, virgulă, începe a face acest îndrăzneț, 1032 01:05:15,910 --> 01:05:19,730 atunci lumea devine tipărite cu caractere aldine, iar acest lucru înseamnă opri imprimarea cu caractere aldine acest. 1033 01:05:19,730 --> 01:05:24,020 Lasă-mă să mergeți mai departe și de a salva dosarul meu, du-te înapoi la Chrome, voi mări în doar astfel încât să putem vedea mai bine, 1034 01:05:24,020 --> 01:05:27,870 și reîncărca, și veți vedea că lumea este acum în aldine. 1035 01:05:27,870 --> 01:05:31,810 Web-ul este totul despre hyperlink-uri, așa că hai să mergem mai departe și face acest lucru: 1036 01:05:31,810 --> 01:05:38,550 site-ul meu favorit este, să spunem, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Salvare, reîncărcați. Bine. Există câteva probleme acum pe langa hidoșenia a site-ului. 1038 01:05:43,810 --> 01:05:47,310 1, eu sunt destul de sigur că am lovit Enter aici. Și am făcut-o. 1039 01:05:47,310 --> 01:05:51,590 Eu nu numai că a lovit Enter, am, de asemenea, indentate, practica ceea ce am fost predica despre stil, 1040 01:05:51,590 --> 01:05:54,930 dar mea este chiar lângă lume. 1041 01:05:54,930 --> 01:05:58,410 Deci, de ce este asta? Numai browsere faci ce-ți spun ei să facă. 1042 01:05:58,410 --> 01:06:04,010 Nu am spus browser-ul, "linii de pauză aici Introduceți punctul rupe aici.". 1043 01:06:04,010 --> 01:06:07,820 Deci browser-ul, nu contează dacă m-am lovit de returnare de 30 de ori, 1044 01:06:07,820 --> 01:06:10,820 este încă de gând să pună dreptul meu de lângă lume. 1045 01:06:10,820 --> 01:06:15,930 Ceea ce am cu adevărat trebuie să fac aici este spune ceva de genul
, inserați un sfârșit de linie. 1046 01:06:15,930 --> 01:06:17,940 >> Și, de fapt, un sfârșit de linie este un fel de un lucru ciudat 1047 01:06:17,940 --> 01:06:21,650 pentru că nu poți începe cu adevărat trecerea la o altă linie, apoi face ceva, 1048 01:06:21,650 --> 01:06:25,380 și se va opri apoi trecerea la o linie nouă. E un fel de operație atomică. 1049 01:06:25,380 --> 01:06:28,140 Ori o faci, ori nu vrei. Te-a lovit Enter sau nu. 1050 01:06:28,140 --> 01:06:33,390 Deci, BR este un pic de o etichetă diferită, și așa am nevoie pentru a sorta de ambele deschise și închideți-l 1051 01:06:33,390 --> 01:06:35,230 dintr-o dată. 1052 01:06:35,230 --> 01:06:37,500 Sintaxa pentru care este aceasta. 1053 01:06:37,500 --> 01:06:41,760 Punct de vedere tehnic, ai putea face ceva de genul asta, în unele versiuni de HTML, 1054 01:06:41,760 --> 01:06:45,600 dar acest lucru este doar o prostie, deoarece nu există nici un motiv pentru a porni și opri ceva 1055 01:06:45,600 --> 01:06:48,420 în cazul în care puteți face schimb totul dintr-o dată. 1056 01:06:48,420 --> 01:06:52,310 Dau seama că HTML5 nu are nevoie de strict acest slash, 1057 01:06:52,310 --> 01:06:55,410 astfel încât veți vedea manualele și resurse online care nu o au, 1058 01:06:55,410 --> 01:06:59,780 dar pentru o bună măsură să practice simetrie pe care le-am văzut până acum. 1059 01:06:59,780 --> 01:07:02,870 Acest lucru înseamnă că tag-ul este atât de deschis și închis. 1060 01:07:02,870 --> 01:07:05,220 Deci, acum să mă salveze dosarul meu, du-te înapoi aici. 1061 01:07:05,220 --> 01:07:10,240 Bine, așa că începe să arate mai bine, cu excepția Web stiu este un fel de poate face clic, 1062 01:07:10,240 --> 01:07:13,610 și totuși youtube aici nu pare să ducă la nimic. 1063 01:07:13,610 --> 01:07:17,560 Asta pentru că, chiar dacă arată ca un link, browser-ul nu știe că în sine, 1064 01:07:17,560 --> 01:07:20,670 așa că am să-i spun browser-ului că aceasta este o legătură. 1065 01:07:20,670 --> 01:07:22,620 >> Mod de a face acest lucru este să utilizați o etichetă ancoră: 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 și lasă-mă să mutați această într-o linie nouă doar ca e un pic mai ușor de citit, 1069 01:07:38,490 --> 01:07:40,060 și voi micșora dimensiunea fontului. 1070 01:07:40,060 --> 01:07:43,890 Sunt terminat? Nu există va fi această dihotomie. 1071 01:07:43,890 --> 01:07:46,760 Această etichetă, tag-ul ancora, nu ia într-adevăr un atribut, 1072 01:07:46,760 --> 01:07:52,900 care modifică comportamentul, și valoarea pe care atribut este aparent URL-ul YouTube. 1073 01:07:52,900 --> 01:07:56,380 Dar observați că dihotomia este doar pentru că e URL-ul ai de gând să, 1074 01:07:56,380 --> 01:08:01,020 aceasta nu înseamnă că trebuie să fie cuvântul pe care îl subliniind și de a face o legătură. 1075 01:08:01,020 --> 01:08:03,960 Mai degrabă, că poate fi ceva de genul asta. 1076 01:08:03,960 --> 01:08:10,870 Deci, am să spun mai face acest cuvânt un hyperlink folosind tag-ul ancora aproape. 1077 01:08:10,870 --> 01:08:12,650 Observați că nu fac asta. 1078 01:08:12,650 --> 01:08:15,890 1, aceasta ar fi doar o pierdere de timp pentru toti si nu este necesar. 1079 01:08:15,890 --> 01:08:19,290 >> Pentru a închide o etichetă, vă amintim doar numele de tag-ul din nou. 1080 01:08:19,290 --> 01:08:21,800 Tu nu menționează niciuna dintre atributele. 1081 01:08:21,800 --> 01:08:26,189 Așa că haideți să salvăm asta, du-te înapoi. Bine, Voila, acum e albastru și hyperlink. 1082 01:08:26,189 --> 01:08:29,430 Dacă am faceți clic pe el, eu de fapt, nu merg la YouTube. 1083 01:08:29,430 --> 01:08:32,529 Deci, chiar dacă pagina mea de web nu este pe internet, este de cel puțin HTML, 1084 01:08:32,529 --> 01:08:37,930 și dacă vom lăsa internet prinde din urmă, am ajunge să avem de fapt aici, la youtube.com. 1085 01:08:37,930 --> 01:08:40,670 Și eu pot merge înapoi și aici e pagina mea de web. Dar observați acest lucru. 1086 01:08:40,670 --> 01:08:43,120 Dacă ați ajuns vreodată spam sau un atac de phishing, 1087 01:08:43,120 --> 01:08:45,850 acum aveți posibilitatea de după doar cinci minute pentru a face același lucru. 1088 01:08:45,850 --> 01:08:50,920 Putem merge aici și de a face ceva de genul www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 sau orice site-ul web este sumare, iar apoi puteți spune verificați contul dvs. de PayPal. 1090 01:08:59,319 --> 01:09:04,840 [Râsete] Și acum acest lucru se întâmplă pentru a merge la badguy.com, pe care eu nu am de gând să faceți clic pe 1091 01:09:04,840 --> 01:09:08,000 pentru că nu am nici o idee în cazul în care conduce. [Râsete] 1092 01:09:08,000 --> 01:09:10,859 >> Dar acum avem posibilitatea de a ajunge de fapt acolo. 1093 01:09:10,859 --> 01:09:12,640 Deci, suntem într-adevăr doar începe să zgârie suprafața. 1094 01:09:12,640 --> 01:09:15,830 Noi nu suntem de programare în sine, ne scriem Markup Language. 1095 01:09:15,830 --> 01:09:18,569 Dar, de îndată ce vom rotunji din vocabularul nostru in HTML, 1096 01:09:18,569 --> 01:09:21,520 vom introduce PHP, un limbaj de programare actuală 1097 01:09:21,520 --> 01:09:26,859 care ne va permite să genereze în mod automat HTML, CSS genera în mod automat, 1098 01:09:26,859 --> 01:09:29,430 astfel încât să putem începe miercuri să pună în aplicare, să zicem, 1099 01:09:29,430 --> 01:09:31,700 motorul nostru de cautare propriu și mai mult. 1100 01:09:31,700 --> 01:09:34,770 Dar mai mult pe faptul că, în câteva zile. Ne vedem atunci. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]