1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Тыдзень 7] 2 00:00:02,440 --> 00:00:04,730 [David J. малая - Гарвардскі універсітэт] 3 00:00:04,730 --> 00:00:07,490 [Гэта CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Добра. Сардэчна запрашаем назад. Гэта CS50, і гэта пачатак тыдня 7. 5 00:00:12,280 --> 00:00:14,690 Два маленькіх аб'явы: 6 00:00:14,690 --> 00:00:18,150 Pset5 У цяперашні час вядзецца ці хутка будзе, 7 00:00:18,150 --> 00:00:21,590 і дазвольце мне сказаць, шчыра кажучы, гэта, як правіла, сярод больш складанай 8 00:00:21,590 --> 00:00:24,460 задачы курса набораў, таму дазвольце мне казаць пра гэта цяпер 9 00:00:24,460 --> 00:00:28,190 так што на гэтым тыдні больш, чым калі-небудзь вы не чакайце, пакуль, скажам, у сераду ўвечары 10 00:00:28,190 --> 00:00:29,920 ці ў чацвер ноччу, каб пагрузіцца цалі 11 00:00:29,920 --> 00:00:32,369 Гэта, безумоўна, цікавая PSET. Мы лічым, што гэта весела. 12 00:00:32,369 --> 00:00:36,110 Калі вы сапраўды атрымаеце яго цалкам правільным і можа кінуць выклік так званага Вялікага савета, 13 00:00:36,110 --> 00:00:39,830 Вы будзеце мець магчымасць спаборнічаць з некаторымі супрацоўнікамі курсу 14 00:00:39,830 --> 00:00:41,620 і некаторыя з вашых аднакласнікаў. 15 00:00:41,620 --> 00:00:44,670 Што Вялікага Савета з'яўляецца адзін раз у вас ёсць для праверкі арфаграфіі працы, 16 00:00:44,670 --> 00:00:48,860 Вы будзеце ў стане пайсці ў cs50.net пасля запуску каманды, 17 00:00:48,860 --> 00:00:52,430 чыста адмовіцца, і затым колькасць часу і аб'ём аператыўнай памяці і больш 18 00:00:52,430 --> 00:00:56,130 , Якія вы выкарыстоўвалі ў сваёй рэалізацыі будуць выстаўлены тут, на хатняй старонцы курса. 19 00:00:56,130 --> 00:00:59,740 Вы заўважыце, што цэлая куча гэтых людзей тут пазначаны ў якасці супрацоўнікаў 20 00:00:59,740 --> 00:01:04,220 так як у мінулыя выходныя, супрацоўнікі думалі, што гэта было б цікава імкнуцца пераўзышлі адзін аднаго. 21 00:01:04,220 --> 00:01:07,390 Так разумею, што мэта тут не перасягнуць персаналу. 22 00:01:07,390 --> 00:01:09,790 Нават я толькі тут, пад нумарам 13. 23 00:01:09,790 --> 00:01:13,790 Чыста абраць у, але гэта магчымасць убачыць, як мала аператыўнай памяці 24 00:01:13,790 --> 00:01:16,790 і як мала працэсара секунд вы можаце выкарыстоўваць VIS-A-VIS некаторыя з вашых аднакласнікаў. 25 00:01:16,790 --> 00:01:20,540 >> І я прызнаю, што Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 У цяперашні час нумар 1 пазіцыю як аднаго з ТФ, 27 00:01:23,750 --> 00:01:28,120 Гэта рэалізацыя, якую мы называем не ўяўляецца магчымым 28 00:01:28,120 --> 00:01:32,700 улічваючы, што ён выкарыстоўвае амаль 0 аператыўнай памяці і амаль 0 секунд для загрузкі. 29 00:01:32,700 --> 00:01:35,670 Такім чынам, мы будзем клапаціцца пра форум Кевін. [Смех] 30 00:01:35,670 --> 00:01:40,950 Ёсць пэўныя навыкі, Кевін ставіць на тэст тут. 31 00:01:40,950 --> 00:01:45,280 Адна з рэчаў, мы думалі, што рабіць таксама цяпер CS50x з'яўляецца тыдні ў прагрэс, 32 00:01:45,280 --> 00:01:49,520 і вы, хлопцы, такая ж частка гэтага эксперыменту, як тыя студэнты. 33 00:01:49,520 --> 00:01:53,720 Мы спыталіся ў іх, як частка іх pset0, які быў гэтак жа прадставіць праект да драпін 34 00:01:53,720 --> 00:01:58,280 якія ўяўляюць цікавасць для іх - гульня, інтэрактыўныя творы мастацтва, анімацыі і да т.п. - 35 00:01:58,280 --> 00:02:03,700 1 - 2-хвіліннае відэа, калі яны хацелі б, каб павітацца з мірам і хто яны на самай справе. 36 00:02:03,700 --> 00:02:06,780 Я думаў, што я падзялюся з вамі ўсяго некалькі відэа, якія былі прадстаўлены да гэтага часу 37 00:02:06,780 --> 00:02:10,759 таму што для нас, у штабе па крайняй меры, гэта сапраўды была захапляльнай 38 00:02:10,759 --> 00:02:14,220 і натхняльным, каб убачыць гэтых людзей з усяго свету - краін па ўсім свеце - 39 00:02:14,220 --> 00:02:18,160 наладзе на, усіх рэчаў, на курс інфарматыкі ў Інтэрнэце, 40 00:02:18,160 --> 00:02:20,410 ці з'яўляецца гэта таму, што яны хочуць працягнуць сваю адукацыю, 41 00:02:20,410 --> 00:02:22,300 яны хочуць узяць сваю кар'еру ў новым напрамку, 42 00:02:22,300 --> 00:02:24,390 яны хочуць, каб запоўніць прабелы ў сваіх ведах, 43 00:02:24,390 --> 00:02:27,190 таму некаторыя з тых жа прычынах, што вы, хлопцы, магчыма, былі тут. 44 00:02:27,190 --> 00:02:31,090 >> Таму я прывяду вам адзін такі студэнт тут. Вы можаце павялічыць гучнасць толькі трохі. 45 00:02:31,090 --> 00:02:35,520 Вось адзін з 1-хвілінны нашых студэнтаў уяўленняў. 46 00:02:35,520 --> 00:02:40,380 Добры дзень, свет. Я студэнт прамысловага будаўніцтва тут, у Малазе, Іспанія. 47 00:02:40,380 --> 00:02:45,840 Я вельмі рады гэтай онлайн-курс, таму што я люблю інфарматыку, я сапраўды раблю, 48 00:02:45,840 --> 00:02:48,880 і я сапраўды цаню, што я атрымліваю, каб вывучыць яе. 49 00:02:48,880 --> 00:02:51,940 І тое, што я магу навучыцца ж усе вы, хлопцы, 50 00:02:51,940 --> 00:02:57,040 але замест таго, каб у Гарвардзе я ў Малазе, якім дзіўным з'яўляецца тое, што? 51 00:02:57,040 --> 00:03:02,040 Ну, я Фернанда, і гэта CS50. Глядзіце вас, хлопцы. 52 00:03:02,040 --> 00:03:07,100 [Смех] Іншы кліп нам асабліва падабаецца, вы выявіце, што ангельскае гэтага спадара не так моцна. 53 00:03:07,100 --> 00:03:11,520 Падобна на тое, ён яго машына перакладаецца, такім чынам, пераклады самі трохі недасканалы, 54 00:03:11,520 --> 00:03:15,790 але гэта было адным з нашых любімых да гэтага часу, а таксама. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Добры дзень, свет. [Кажа на Японскай] 57 00:03:32,370 --> 00:03:39,830 [Я павінен вітаць на японскай мове, таму што мой англійская вельмі ненадзейна.] 58 00:03:39,830 --> 00:03:45,380 [Я перадаў пасланне да вас з горада Гифу, Японія.] 59 00:03:45,380 --> 00:03:49,820 [Я магу быць студэнтам у першы раз у 20 гадоў, як гэта можна бачыць.] 60 00:03:49,820 --> 00:03:54,640 [Я вельмі ўдзячная Гарвардскага універсітэта, які даў мне гэтую магчымасць і EDX.] 61 00:03:54,640 --> 00:04:01,510 [Гольф-гітара і мая любімая рэч працуе.] [Смех] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Чаму вы думаеце, што я спрабаваў прыняць удзел у cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Гарвардскага універсітэта, гэта мая туга.] 65 00:04:14,990 --> 00:04:19,740 [Асабліва, калі я далёкага прысутнасці жыў у Японіі.] 66 00:04:19,740 --> 00:04:26,680 [Я хацеў паспрабаваць адразу ведаюць пра існаванне такіх EDX, калі.] 67 00:04:26,680 --> 00:04:32,500 [Ці не падаецца вам, каб вы не звязана з узростам навучання I.] 68 00:04:32,500 --> 00:04:38,350 [CS50 мой сум. Мяне клічуць Kazu, і гэта CS50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [апладысменты і крыкі] 70 00:04:43,090 --> 00:04:49,220 Іншая любімая наша была тут гэта прадстаўленне ад кагосьці. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [малая] Google, калі вы не знаёмыя з гэтым мемом. 72 00:04:55,380 --> 00:05:01,480 >> І тады, нарэшце, некалькі іншых, якія атрымалі адказваў, што, магчыма, выйграць чароўныя ўзнагароду. 73 00:05:01,480 --> 00:05:06,820 [Студэнтаў] Ой! >> [Малая] Мы павінны слухаць. Гэта кароткі, так што слухайце ўважліва. 74 00:05:08,580 --> 00:05:11,150 [Жанчынай-спікерам] Як цябе завуць? >> Луі. 75 00:05:11,150 --> 00:05:16,120 [Жанчынай-спікерам] Што гэта? >> [Смех] CS50. [Смех] 76 00:05:16,120 --> 00:05:19,510 [Малая] Ён двух дубляў, аднак. 77 00:05:19,510 --> 00:05:22,240 Тут мы ідзем, апошні. 78 00:05:23,030 --> 00:05:26,980 Мяне клічуць Луі, і гэта CS50. 79 00:05:26,980 --> 00:05:30,250 [Смяецца] У гэтым і складаецца CS50x. 80 00:05:30,250 --> 00:05:33,230 Дзякуй усім тым з вас, вынікаючы ўздоўж дома 81 00:05:33,230 --> 00:05:35,620 , Якія былі Камуніі да гэтага часу. 82 00:05:35,620 --> 00:05:39,510 Сёння мы заканчваем абмеркаванне структур дадзеных, 83 00:05:39,510 --> 00:05:41,160 па крайняй меры некаторыя з найбольш фундаментальных, 84 00:05:41,160 --> 00:05:44,760 а потым мы працягнем нашу размову аб HTML і вэб-праграмавання. 85 00:05:44,760 --> 00:05:48,520 Сапраўды, мы правялі апошнія сем тыдняў некаторыя, гледзячы на ​​асновы праграмавання - 86 00:05:48,520 --> 00:05:50,450 алгарытмы, структуры дадзеных і да т.п. - 87 00:05:50,450 --> 00:05:53,050 і C, як вы, магчыма, выпрабавалі да гэтага часу, 88 00:05:53,050 --> 00:05:57,060 не абавязкова з'яўляецца найбольш даступных моў 89 00:05:57,060 --> 00:05:59,090 з якім для рэалізацыі некаторых з гэтых ідэй. 90 00:05:59,090 --> 00:06:01,880 І так пачынаючы з гэтага тыдня і на наступным тыдні, а затым наступны, 91 00:06:01,880 --> 00:06:07,110 мы, нарэшце, быць у стане пераходу ад З, які, як вядома, даволі нізкага ўзроўню мовы, 92 00:06:07,110 --> 00:06:11,190 да рэчаў больш высокага ўзроўню, у тым ліку PHP, JavaScript, і да таго падобнае, 93 00:06:11,190 --> 00:06:14,850 што мы ўбачым абапірацца на тыя ж урокі, што мы даведаліся за апошнія некалькі тыдняў, 94 00:06:14,850 --> 00:06:19,430 але вы ўбачыце, што абвяшчэнне рэчаў, як масівы і хэш-табліцы і пошук і сартаванне 95 00:06:19,430 --> 00:06:23,370 стала значна лягчэй, таму што самі мовы, мы пачнем выкарыстання 96 00:06:23,370 --> 00:06:25,290 будзе станавіцца ўсё больш магутнымі. 97 00:06:25,290 --> 00:06:27,410 Але, па-першае, прымяненне дрэў. 98 00:06:27,410 --> 00:06:30,240 Гэта вельмі часта ў гэтыя дні трэба сціснуць інфармацыю. 99 00:06:30,240 --> 00:06:34,770 У якім кантэксце вы жадаеце сціснуць некаторыя віды лічбавай інфармацыі? 100 00:06:37,190 --> 00:06:39,670 >> Так. >> [Студэнт] Калі вам трэба, каб адправіць яго праз Інтэрнэт. 101 00:06:39,670 --> 00:06:41,450 Так, калі вы хочаце адправіць нешта праз Інтэрнэт. 102 00:06:41,450 --> 00:06:44,950 Калі вы жадаеце запампаваць вялікі файл, ён ідэальна падыходзіць, калі хтосьці на іншым канцы 103 00:06:44,950 --> 00:06:48,760 сціснуў, што файл, выкарыстоўваючы фармат ZIP ці нешта накшталт таго 104 00:06:48,760 --> 00:06:53,760 так што вы пасылаеце менш біт, чым маглі бы быць перададзеныя. 105 00:06:53,760 --> 00:06:55,500 Такім чынам, як вы сціскаць інфармацыю? 106 00:06:55,500 --> 00:07:00,540 Гэта ўсё зводзіцца да выкарыстання меншага колькасці бітаў, чым патрабуецца па змаўчанні. 107 00:07:00,540 --> 00:07:03,220 Але гэта накшталт цікава, таму што ўспомніце тыдняў 0 і 1 108 00:07:03,220 --> 00:07:07,370 калі мы казалі аб ASCII і бінарныя і мы гаварылі пра ASCII, у прыватнасці, 109 00:07:07,370 --> 00:07:10,690 як з дапамогай 8 біт для прадстаўлення літары алфавіту 110 00:07:10,690 --> 00:07:16,120 так што літара прадстаўлена 65, ніжні рэгістр лік 97, 111 00:07:16,120 --> 00:07:21,210 і тым не менш вы ўяўляеце 65 ці 97, вы выкарыстоўваеце 7 або 8 біт. 112 00:07:21,210 --> 00:07:24,120 Але загваздка ў тым, што некаторыя літары ў англійскай алфавіце 113 00:07:24,120 --> 00:07:26,230 , Якія не так папулярныя, як іншыя. 114 00:07:26,230 --> 00:07:31,600 Z не ўсё, што папулярна, Q не ўсё, што папулярна, але А і Е з'яўляюцца супер папулярным. 115 00:07:31,600 --> 00:07:37,280 І тым не менш за ўсе гэтыя лісты, па змаўчанні свеце выкарыстоўвае такое ж колькасць бітаў, усяго ў 8. 116 00:07:37,280 --> 00:07:42,690 Такім чынам, ці не было б разумней, калі б замест 8 біт для кожнага ліста, 117 00:07:42,690 --> 00:07:47,440 нават самыя рэдка выкарыстоўваюцца як Q і Z, 118 00:07:47,440 --> 00:07:51,910 што, калі мы выкарыстоўвалі менш біт для А і Е і S і самых папулярных літар 119 00:07:51,910 --> 00:07:55,000 і выкарыстоўваецца больш бітаў для менш папулярных літары, 120 00:07:55,000 --> 00:07:57,770 Ідэя ў тым, аптымізаваць давайце для агульнага выпадку, 121 00:07:57,770 --> 00:08:01,160 , Якая з'яўляецца тэмай у вобласці кампутарнай навукі ў спробе аптымізаваць тое, што здарыцца самае 122 00:08:01,160 --> 00:08:05,310 і выдаткаваць яшчэ крыху часу, трохі больш прасторы на тое, што, ды, можа адбыцца 123 00:08:05,310 --> 00:08:07,680 але не абавязкова так часта. 124 00:08:07,680 --> 00:08:09,330 Такім чынам, давайце разгледзім прыклад. 125 00:08:09,330 --> 00:08:12,610 >> Выкажам здагадку, што мы хочам, каб кадаваць інфармацыю дастаткова эфектыўна. 126 00:08:12,610 --> 00:08:15,090 Вы, магчыма, выраслі ведаючы сёе-тое пра азбукі Морзэ, 127 00:08:15,090 --> 00:08:17,450 і цалкам верагодна, вы не ведаеце, фактычны код, 128 00:08:17,450 --> 00:08:21,750 але вы, магчыма, памятаеце, што гэта па меншай меры ў гэтай серыі кропак і працяжнік. 129 00:08:21,750 --> 00:08:26,640 Гэта даволі эфектыўнае кадаваньне, і заўважылі, што самыя папулярныя літары - напрыклад, E - 130 00:08:26,640 --> 00:08:28,980 выкарыстоўвае самыя кароткія гукавых сігналаў. 131 00:08:28,980 --> 00:08:31,740 Азбука Морзэ гэта ўсё аб БІП-БІП-БІП-БІП-БІП-БІП і правядзенне танах 132 00:08:31,740 --> 00:08:34,799 або на працягу кароткага перыяду часу або працяглых перыядаў часу. 133 00:08:34,799 --> 00:08:40,330 E, так як пазначаецца кропкай, гэта супер кароткі гукавы сігнал, толькі гукавы сігнал, і што будзе прадстаўляць E. 134 00:08:40,330 --> 00:08:43,960 У адрозненне ад T будзе больш гукавы сігнал, як сігнал [падаўжае гук] 135 00:08:43,960 --> 00:08:45,710 і што будзе прадстаўляць T. 136 00:08:45,710 --> 00:08:48,840 Але гэта ўсё яшчэ даволі кароткай, таму што, наадварот, калі вы паглядзіце на Z, 137 00:08:48,840 --> 00:08:52,690 каб выказаць Z вы пойдзеце БІП, БІП [больш гуку], БІП, БІП [кароткі гук]. 138 00:08:52,690 --> 00:08:55,360 Так што гэта больш, таму што гэта менш распаўсюджанае. 139 00:08:55,360 --> 00:08:58,150 Але Гоча тут з'яўляецца тое, што код Морзэ трохі недахопаў 140 00:08:58,150 --> 00:09:00,610 у тым, што гэта не адразу прайгравацца. 141 00:09:00,610 --> 00:09:07,350 Напрыклад, выкажам здагадку, што вы чуеце на некаторыя канцы провада гукавы сігнал [кароткі], гукавы сігнал [доўга]. 142 00:09:07,350 --> 00:09:12,480 Якое паведамленне я толькі што атрымаў? Кропкі і працяжнік. Што гэта ўяўляеце? 143 00:09:12,480 --> 00:09:15,330 [Студэнт] A. >> [малая] Можа быць. 144 00:09:15,330 --> 00:09:18,270 Гэта таксама можа быць E наступным T. 145 00:09:18,270 --> 00:09:23,390 Іншымі словамі, азбука Морзэ, хоць ён выкарыстоўвае гэты прынцып аптымізацыі кута выпадку, 146 00:09:23,390 --> 00:09:26,250 яно не паддаецца непасрэднай Декодируемости. 147 00:09:26,250 --> 00:09:29,850 Гэта значыць, чалавек, які чуе ці атрымання гэтых кропак і працяжнік 148 00:09:29,850 --> 00:09:34,540 павінен нейкім чынам высветліць, дзе парывы ​​паміж літарамі, 149 00:09:34,540 --> 00:09:39,660 таму што, калі вы не ведаеце, дзе гэтыя перапынкі, вы можаце змешваць для ET ці наадварот. 150 00:09:39,660 --> 00:09:43,880 >> Так што ж вы робіце? У азбуцы Морзэ можна проста паўза паміж кожнай з літар. 151 00:09:43,880 --> 00:09:47,660 Але спыняючыся гэта свайго роду лічыльнік, каб увесь сэнс паскарэння рэчы. 152 00:09:47,660 --> 00:09:52,880 Так што, калі замест гэтага мы прыдумалі код, дзе не было гэтай дрэннай сітуацыі 153 00:09:52,880 --> 00:09:56,570 дзе E з'яўляецца прэфіксам, напрыклад, з - 154 00:09:56,570 --> 00:10:00,020 Іншымі словамі, калі б мы маглі пераканацца, што мадэлі па-ранейшаму кароткія для папулярнай літары 155 00:10:00,020 --> 00:10:04,850 доўга для менш папулярных літар, але няма ніякай магчымай блытаніны? 156 00:10:04,850 --> 00:10:08,930 Чалавек па імя Хафман гадоў таму прыдумалі гэтую схему называюць кадаваньне Хафман 157 00:10:08,930 --> 00:10:12,390 што на самай справе выкарыстоўвае адну са структур дадзеных, мы правялі трохі часу на размовы пра 158 00:10:12,390 --> 00:10:16,560 На мінулым тыдні, што дрэвы, бінарныя дрэвы канкрэтна - 159 00:10:16,560 --> 00:10:19,710 Сэнс бінарнае дрэва, што яно мае не больш за 2 дзяцей. 160 00:10:19,710 --> 00:10:22,720 Яна, можа быць, левая дзіцяці, можа быць, правоў дзіцяці, вось і ўсё. 161 00:10:22,720 --> 00:10:26,510 Такім чынам, хай толькі дзеля абмеркавання, што хто-небудзь хоча, каб адправіць паведамленне 162 00:10:26,510 --> 00:10:31,270 які выглядае наступным чынам. Гэта поўная бязглуздзіца, але ён складаецца з As, Bs, Cs, Ds, і Es. 163 00:10:31,270 --> 00:10:34,890 І калі вы на самой справе падлічыць усе As, Bs, Cs, Ds, і Es 164 00:10:34,890 --> 00:10:36,870 , А затым падзяліць на агульная колькасць літар, 165 00:10:36,870 --> 00:10:42,710 гэтая маленькая графіка тут гаворыцца, што 45% з літар Es, 20% As, 166 00:10:42,710 --> 00:10:45,010 10% B, і гэтак далей. 167 00:10:45,010 --> 00:10:47,330 Такім чынам, іншымі словамі, выкажам здагадку, што двукоссі тут 168 00:10:47,330 --> 00:10:49,080 толькі некаторыя паведамленні, якія вы хочаце адправіць. 169 00:10:49,080 --> 00:10:52,180 Гэта, аказваецца, глупства проста так мы можам выкарыстоўваць як некалькі літар наколькі гэта магчыма, 170 00:10:52,180 --> 00:10:55,220 але гэта сапраўды так, што E застаецца самым папулярным, 171 00:10:55,220 --> 00:11:01,450 і B і C з'яўляюцца найменш папулярнымі, па меншай меры, з гэтых 5 літар алфавіту. 172 00:11:01,450 --> 00:11:04,040 Так як мы можам ісці аб прыдумляюць кадавання, 173 00:11:04,040 --> 00:11:08,430 двайковага кадавання, узор з 0 і 1 для кожнага з гэтых літар 174 00:11:08,430 --> 00:11:14,820 такім чынам, што E знаходзіцца ў некалькіх хвілінах карціны і, магчыма, B і C з'яўляюцца крыху больш за мадэляў, 175 00:11:14,820 --> 00:11:19,270 Зноў жа, ідэя ў тым, што мы хочам выкарыстоўваць меншая колькасць біт вялікую частку часу 176 00:11:19,270 --> 00:11:21,790 і больш біт толькі адзін раз у той час. 177 00:11:21,790 --> 00:11:26,070 Па словах кадаваньне Хафман, вы можаце стварыць лес дрэў. 178 00:11:26,070 --> 00:11:31,190 Там накшталт сюжэтная лінія тут, што ўключае ў сябе дрэвы, а таксама працэс пабудовы іх. 179 00:11:31,190 --> 00:11:32,420 Давайце пачнем. 180 00:11:32,420 --> 00:11:36,140 >> Я прапаную вам пачаць з гэтага лесу, так бы мовіць, з 5 дрэў, 181 00:11:36,140 --> 00:11:38,260 кожны з якіх з'яўляецца даволі дурное дрэва. 182 00:11:38,260 --> 00:11:42,800 Дрэва складаецца з усяго аднаго вузла, як пададзена тут навокал. 183 00:11:42,800 --> 00:11:45,310 Такім чынам, кожная з гэтых рэчаў могуць быць структуры C 184 00:11:45,310 --> 00:11:50,200 і ўнутры структуры C можа быць з якая плавае кропкай ўяўляюць падліку частоты 185 00:11:50,200 --> 00:11:52,510 і тады, магчыма, сімвал ўяўляе лісце. 186 00:11:52,510 --> 00:11:56,470 Так што думаю аб гэтых вузлах, як толькі ўсе старыя структуры C, але, на дадзены момант, больш высокі ўзровень. 187 00:11:56,470 --> 00:12:01,230 Гэта лесу з 5 дрэў, кожнае з якіх ёсць толькі адзін вузел. 188 00:12:01,230 --> 00:12:06,830 Што Хафман прапанаваная ў тым, што мы пачынаем аб'ядноўваць гэтыя дрэвы 189 00:12:06,830 --> 00:12:11,140 , Якія маюць найменшы разлічвае частату ў трохі больш дрэў 190 00:12:11,140 --> 00:12:13,490 , Злучаючы іх з новым каранёвым вузлом. 191 00:12:13,490 --> 00:12:17,560 Такім чынам, сярод літар тут, звярніце ўвагу, што для зручнасці я сартаваць іх злева направа, 192 00:12:17,560 --> 00:12:21,420 хоць гэта не з'яўляецца строга абавязковым, і звярніце ўвагу, што найменшае вузлоў 193 00:12:21,420 --> 00:12:23,930 У цяперашні час 10% і 10%. 194 00:12:23,930 --> 00:12:28,940 Так Хафман прапанаваў, каб мы аб'яднаем гэтыя 2 найменшае вузлоў у новае дрэва 195 00:12:28,940 --> 00:12:34,450 шляхам увядзення новага бацькоўскага вузла, а затым даць, што бацькі дзіцяці левым і правам дзіцяці 196 00:12:34,450 --> 00:12:37,720 дзе B адвольна левай і C адвольна права. 197 00:12:37,720 --> 00:12:41,590 А потым Хафман Акрамя таго, прапануецца Давайце проста думаць аб левым дзіцяці 198 00:12:41,590 --> 00:12:44,790 У адным з гэтых дрэў заўсёды, як быць прадстаўленым на 0 199 00:12:44,790 --> 00:12:47,890 і права дзіцяці заўсёды, як быць прадстаўленым нумарам 1. 200 00:12:47,890 --> 00:12:50,680 >> Гэта не мае значэння, калі вы перавярніце іх так доўга, як вы паслядоўныя. 201 00:12:50,680 --> 00:12:54,650 Так што цяпер у нас ёсць чатыры дрэвы ў гэтым лесе. 202 00:12:54,650 --> 00:12:58,050 І я кажу чатыры, таму што цяпер дрэва злева - 203 00:12:58,050 --> 00:13:00,570 і гэта не так шмат дрэва ў тым сэнсе, што ён расце такім чынам, 204 00:13:00,570 --> 00:13:05,170 гэта больш падобна на генеалагічнае дрэва, дзе цяпер 0,2 з'яўляецца свайго роду бацька двух дзяцей - 205 00:13:05,170 --> 00:13:07,930 Адзначым, што ў бацькоўскі што мы намалявалі 0,2. 206 00:13:07,930 --> 00:13:13,370 Мы дадалі частоты адлікаў двух дзяцей і з улікам новых вузлоў агульнай сумы. 207 00:13:13,370 --> 00:13:15,310 Так што зараз мы проста паўтарыць гэты працэс. 208 00:13:15,310 --> 00:13:19,490 Знайсці два самых маленькіх вузлоў, а затым аб'яднаць іх у новае дрэва 209 00:13:19,490 --> 00:13:21,380 , А затым паўтарыць працэс далей. 210 00:13:21,380 --> 00:13:26,390 Цяпер у нас ёсць некалькі кандыдатаў, 20%, 15%, а яшчэ 20%. 211 00:13:26,390 --> 00:13:29,780 У гэтым выпадку, мы павінны разарваць сувязь. Мы можам рабіць гэта адвольна. 212 00:13:29,780 --> 00:13:31,540 Мы проста павінны рабіць гэта пастаянна. 213 00:13:31,540 --> 00:13:33,760 У гэтым выпадку, я буду ісці з адвольным 1 злева, 214 00:13:33,760 --> 00:13:39,880 і я цяпер аб'яднаць 20% і 15%, каб даць мне новых бацькоў называюць 35%, 215 00:13:39,880 --> 00:13:46,310 , Левы дзіця 0, чыё права дзіцяці 1, і цяпер у нас ёсць толькі тры дрэвы ў лесе. 216 00:13:46,310 --> 00:13:47,960 Вы, магчыма, можа бачыць, дзе гэта адбываецца. 217 00:13:47,960 --> 00:13:51,150 Калі мы паўторым гэта яшчэ пару разоў, мы збіраемся мець толькі адну больш дрэў, 218 00:13:51,150 --> 00:13:53,900 , Ўсе рэбры якога пазначаныя 0 і 1. 219 00:13:53,900 --> 00:13:55,710 Давайце зробім гэта зноў. 220 00:13:55,710 --> 00:14:02,600 35% кораня, дрэва. 20% і 45%, так што мы збіраемся аб'яднаць 35% і 20%. 221 00:14:02,600 --> 00:14:05,610 Цяпер у нас ёсць гэта дрэва тут. Мы дадаем іх разам, у нас ёсць 55%. 222 00:14:05,610 --> 00:14:07,910 Цяпер ёсць толькі два дрэва ў лесе. 223 00:14:07,910 --> 00:14:11,900 Мы робім гэта ў апошні раз, і, спадзяюся, матэматычна ўсе частоты складваюцца 224 00:14:11,900 --> 00:14:15,570 таму што яны павінны, так як мы вылічылі іх з самага пачатку ісці, каб дадаць да 100%. 225 00:14:15,570 --> 00:14:17,960 І зараз у нас ёсць адно дрэва. 226 00:14:17,960 --> 00:14:20,580 Такім чынам, гэта дрэва Хафман. 227 00:14:20,580 --> 00:14:24,400 Гэта збольшага спатрэбілася час, каб дабрацца на словах, але на самой справе з цыклу 228 00:14:24,400 --> 00:14:27,620 або з дапамогай рэкурсіўнай функцыі, можна пабудаваць гэтую рэч даволі хутка. 229 00:14:27,620 --> 00:14:32,440 Так што цяпер у нас ёсць адзін новы вузел, і ўсе гэтыя ўнутраныя вузлы былі malloc'd, 230 00:14:32,440 --> 00:14:34,690 Як мяркуецца, на гэтым шляху. 231 00:14:34,690 --> 00:14:38,650 Так што зараз на вяршыні гэтага дрэва мы маем 100%, але цяпер заўважаю ў нас ёсць шлях 232 00:14:38,650 --> 00:14:43,780 З гэтага новага пра-пра-пра-прабацькоў да ўсіх пра-пра-пра-ўнукі 233 00:14:43,780 --> 00:14:45,930 ўсю дарогу на дне, каб усе лісце. 234 00:14:45,930 --> 00:14:52,840 >> Тое, што мы збіраемся зрабіць цяпер, гэта прапанаваць, што для таго, каб прадстаўляць літару Е, 235 00:14:52,840 --> 00:14:55,670 мы будзем проста выкарыстоўваць нумар 1. Чаму? 236 00:14:55,670 --> 00:15:01,000 Таму што калі мы пройдзем гэты дрэва ад канчатковага корань ўніз да ліста вядомы як E, 237 00:15:01,000 --> 00:15:06,050 мы ідзём толькі адзін край, правы бок, і гэта, вядома, пазначаныя ў правым верхнім куце 1. 238 00:15:06,050 --> 00:15:11,550 Такім чынам, імплікацыі тут Хафман, што кадаваньне E у двайковым павінна быць проста 1. 239 00:15:11,550 --> 00:15:14,490 І гэта па-чартоўску эфектыўна. Не магу атрымаць любую менш, чым гэта. 240 00:15:14,490 --> 00:15:18,350 З іншага боку, збіраецца быць прадстаўлены, калі прытрымлівацца логіцы, 241 00:15:18,350 --> 00:15:21,610 тым, што карціна біт замест гэтага? 01. 242 00:15:21,610 --> 00:15:25,500 Такім чынам, каб дабрацца да, мы стартуем з кораня і ідзем налева, а затым мы ідзем направа, 243 00:15:25,500 --> 00:15:28,580 якая азначае, што мы рушылі ўслед 0, а затым 1. 244 00:15:28,580 --> 00:15:32,810 Такім чынам, мы будзем прадстаўляць лісты з малюнкам 0 і 1. 245 00:15:32,810 --> 00:15:36,010 А цяпер заўважаю ў нас ужо ёсць ўласцівасць непасрэднай Декодируемости 246 00:15:36,010 --> 00:15:38,090 што мы не маем у азбуцы Морзэ. 247 00:15:38,090 --> 00:15:42,840 Хоць абодва гэтыя мадэлі з'яўляюцца даволі кароткі - Е 1 біт, складае 2 біта - 248 00:15:42,840 --> 00:15:45,080 заўважыце, што яны не могуць быць зблытаны адной або з іншага боку, 249 00:15:45,080 --> 00:15:54,870 таму што, калі вы бачыце ў 1 гэта павінна быць E, калі вы бачыце 0, то 1 ён, відавочна, павінен быць A. 250 00:15:54,870 --> 00:15:58,410 Акрамя таго, што D? 001. 251 00:15:58,410 --> 00:16:01,440 Што такое C? 0001. 252 00:16:01,440 --> 00:16:05,320 А што такое B? 0000. 253 00:16:05,320 --> 00:16:09,550 І зноў, таму што ўсе лісты, якія мы клапоцімся пра знаходзімся на лісці 254 00:16:09,550 --> 00:16:13,890 і ніхто з іх з'яўляюцца свайго роду пасярэднікамі на шляху ад кораня да ліста, 255 00:16:13,890 --> 00:16:18,760 няма рызыкі злучаючы розныя кадоўкі 2 літары " 256 00:16:18,760 --> 00:16:22,300 таму што ўсе гэтыя бітаў з'яўляюцца дэтэрмінавана. 257 00:16:22,300 --> 00:16:25,280 0000 заўсёды будзе B. 258 00:16:25,280 --> 00:16:29,480 Там няма вузлоў дзесьці пасярэдзіне, што вы маглі зблытаць адну літару за другой. 259 00:16:29,480 --> 00:16:31,150 Так што ж маецца на ўвазе тут? 260 00:16:31,150 --> 00:16:35,080 >> Самы папулярны ліст - у гэтым выпадку E - атрымаў самыя кароткія кадавання, 261 00:16:35,080 --> 00:16:37,430 Атрымаў наступны самыя кароткія кадавання, 262 00:16:37,430 --> 00:16:41,390 і B і C, якія мы ўжо ведалі з самага пачатку ісці было выгляду найменш папулярным 263 00:16:41,390 --> 00:16:45,390 на 10% частату кожнага, яны атрымалі самы доўгі кадавання. 264 00:16:45,390 --> 00:16:49,410 І што гэта азначае цяпер, што калі вы хочаце адправіць паведамленне, якое сціснуты 265 00:16:49,410 --> 00:16:51,950 праз Інтэрнэт або па электроннай пошце і да т.п., 266 00:16:51,950 --> 00:16:56,730 а не з дапамогай стандартнага ASCII, вы можаце адправіць Хафман закадаванае паведамленне 267 00:16:56,730 --> 00:17:01,720 згодна з якім, калі вы хочаце адправіць ліст E, вы пасылаеце толькі адзін біт. 268 00:17:01,720 --> 00:17:05,680 Калі вы хочаце адправіць, вы пасылаеце 2 бітамі, 01, замест адпраўкі 8 біт 269 00:17:05,680 --> 00:17:10,190 затым яшчэ 8 бітаў ідуць яшчэ 8 біт і гэтак далей. 270 00:17:10,190 --> 00:17:11,940 Але ёсць Гоча тут. 271 00:17:11,940 --> 00:17:17,079 Гэта не дастаткова проста пабудаваць гэта дрэва, а затым пачаць перадачу ад Алісы да Боба 272 00:17:17,079 --> 00:17:20,010 карацей бітаў, радок з ASCII, 273 00:17:20,010 --> 00:17:23,140 таму што Эліс таксама павінен паведаміць аб тым, што Боб 274 00:17:23,140 --> 00:17:26,880 калі Боб збіраецца быць у стане прачытаць яе сціснутым паведамленне? 275 00:17:26,880 --> 00:17:30,770 [Неразборліва адказ студэнта] >> Што гэта такое? 276 00:17:30,770 --> 00:17:32,310 [Неразборліва адказ студэнта] >> З чаго дрэва. 277 00:17:32,310 --> 00:17:35,160 Ці нават больш канкрэтна, то, што гэтыя кадоўкі, 278 00:17:35,160 --> 00:17:39,010 тым больш, што падчас гэтай гісторыі мы прынялі рашэнне выкліку ў адной кропцы. 279 00:17:39,010 --> 00:17:43,640 Памятаеце, што мы павінны былі выбраць адвольна паміж 2 рознымі вузламі 20%? 280 00:17:43,640 --> 00:17:49,800 Так што гэта не той выпадак, Боб, атрымальнік, можа проста аднавіць дрэва на сваім 281 00:17:49,800 --> 00:17:53,390 таму што, магчыма, ён будзе ствараць дрэва ледзь-ледзь адрозніваецца ад Алісы. 282 00:17:53,390 --> 00:17:56,670 Акрамя таго, Боб нават не ведаю, што арыгінальнае паведамленне 283 00:17:56,670 --> 00:18:00,770 паколькі адзінае, што Аліса пасылае яго, вядома, з'яўляецца сціснутым паведамленні. 284 00:18:00,770 --> 00:18:05,900 >> Такім чынам, вылаў з выкарыстаннем кампрэсіі, як гэта, што, так, Аліса можа выратаваць шмат бітаў 285 00:18:05,900 --> 00:18:09,900 шляхам адпраўкі 1 для E і 01 і гэтак далей, 286 00:18:09,900 --> 00:18:15,180 але яна таксама павінна паведаміць Бобу, што адлюстраванне паміж літарамі і біты 287 00:18:15,180 --> 00:18:19,620 таму што яны не могуць выразна належыць толькі на ASCII больш, калі мы не выкарыстоўваем ASCII. 288 00:18:19,620 --> 00:18:22,200 Такім чынам, яна можа альбо адправіць яго дрэвам ці інакш - 289 00:18:22,200 --> 00:18:26,600 запішыце яго, захоўваць яго ў выглядзе двайковых дадзеных або нешта накшталт гэтага - 290 00:18:26,600 --> 00:18:30,280 або проста паслаць яму трохі шпаргалку, файл Excel, які паказвае адлюстравання. 291 00:18:30,280 --> 00:18:36,480 Такім чынам, эфектыўнасць сціску сапраўды мяркуе, што паведамленні, якія вы адпраўляеце 292 00:18:36,480 --> 00:18:40,230 даволі вялікі, па меншай меры, сярэдняга, 293 00:18:40,230 --> 00:18:42,180 таму што, калі вы адпраўляеце супер кароткае паведамленне, 294 00:18:42,180 --> 00:18:45,390 калі вы проста хочаце адправіць паведамленне БАД, якія, здараецца, слова, якое мы можа азначаць тут, 295 00:18:45,390 --> 00:18:49,550 B-A-D, вы, верагодна, будзеце выкарыстоўваць меншая колькасць біт, 296 00:18:49,550 --> 00:18:53,130 але загваздка ў тым, калі вы таксама павінны паведаміць Бобу, што дрэва 297 00:18:53,130 --> 00:18:57,530 або тое, што гэтыя кадоўкі, вы будзеце, верагодна, перавешваюць усе зберажэнні 298 00:18:57,530 --> 00:19:00,110 наяўнасці сціснутага рэчы з самага пачатку. 299 00:19:00,110 --> 00:19:02,210 Так што гэта сапраўды можа быць так, што калі вы паспрабуеце сціску 300 00:19:02,210 --> 00:19:05,330 нават з чымсьці накшталт паштовы індэкс ці фарматы файлаў вы можаце быць знаёмыя з - 301 00:19:05,330 --> 00:19:07,780 даволі невялікія файлы, нават пустыя файлы - 302 00:19:07,780 --> 00:19:10,930 Часам гэтыя файлы могуць атрымаць больш і не менш. 303 00:19:10,930 --> 00:19:14,320 Але рэальна, што адбываецца толькі для невялікіх памераў файла, 304 00:19:14,320 --> 00:19:16,920 так што ён не збіраецца рабіць гігабайт файлаў складае 2 Гб; 305 00:19:16,920 --> 00:19:19,480 Мы сапраўды гаворым байт ці проста пару кілабайт. 306 00:19:19,480 --> 00:19:22,330 >> Некаторыя праграмы, як паштовы досыць разумныя, каб разумець, што, 307 00:19:22,330 --> 00:19:24,590 "Вы збіраецеся выдаткаваць больш бітаў сціску гэтага". 308 00:19:24,590 --> 00:19:27,460 "Няхай мяне не турбуюць сціскаючы яго для вас на ўсіх". 309 00:19:27,460 --> 00:19:30,160 Так што гэта толькі адзін з спосабаў затым сціснуць тэкставы фармат. 310 00:19:30,160 --> 00:19:32,300 Мы маглі б рэалізаваць нешта падобнае ў C. 311 00:19:32,300 --> 00:19:35,370 Напрыклад, вось як мы маглі б прадстаўляць сабой вузел у гэтым дрэве 312 00:19:35,370 --> 00:19:39,320 дзе ў нас ёсць знак на знак, якія плаваюць значэнне частоты, 313 00:19:39,320 --> 00:19:42,250 і, як мы бачылі, з іншымі нашымі структурамі дадзеных, 2 паказальнікі, 314 00:19:42,250 --> 00:19:47,080 1 налева дзіцяці, 1 направа, кожны з якіх можа быць NULL, 315 00:19:47,080 --> 00:19:50,850 але калі няма, гэта ставіцца да левым дзіцяці і права дзіцяці. 316 00:19:50,850 --> 00:19:55,130 Дык што ж тады кадаваньне Хафман, і гэта адзін са спосабаў, вы можаце ісці аб сціску інфармацыі, 317 00:19:55,130 --> 00:19:57,880 і гэта, безумоўна, адна з найбольш простая ў рэалізацыі 318 00:19:57,880 --> 00:20:00,830 ў кантэксце, скажам, дадзеныя на мінулым тыдні структур, 319 00:20:00,830 --> 00:20:03,250 хоць нават больш складаныя алгарытмы існуюць 320 00:20:03,250 --> 00:20:08,220 што можна зрабіць яшчэ больш складанай мутацыі вашых дадзеных. 321 00:20:08,220 --> 00:20:11,640 Любыя пытанні, то на дрэвы, бінарныя дрэвы, або сціск тэксту? 322 00:20:11,640 --> 00:20:15,590 [Студэнт] Ёсць некаторая двухсэнсоўнасць, як калі б [неразборліва] падзялілася на 01, 323 00:20:15,590 --> 00:20:19,160 то 011 будзе неадназначным, так? 324 00:20:19,160 --> 00:20:22,730 [Неразборліва] >> Добры пытанне. Неадназначнасць. 325 00:20:22,730 --> 00:20:25,940 Дазвольце мне коратка, спасылаючыся на гэта фота тут. 326 00:20:25,940 --> 00:20:29,650 Таму што знакі, якія вы сціскаю, прадстаўлення, 327 00:20:29,650 --> 00:20:32,850 па вызначэнні гэтага алгарытму заўсёды застаюцца лісце, 328 00:20:32,850 --> 00:20:41,870 Вы ніколі не будзеце выпадкова выкарыстоўваць тую ж схему біта для прэфікса некалькі літар. 329 00:20:41,870 --> 00:20:46,740 Такім чынам, іншымі словамі, вы заклапочаныя, падобна, двухсэнсоўнасці, якія ўзнікаюць 330 00:20:46,740 --> 00:20:51,580 якіх 001 можа быць пачаткам B або C пачатку ці нешта накшталт гэтага. 331 00:20:51,580 --> 00:20:56,780 Але гэта не можа быць так, таму што заўважылі, што ўсе літары алфавіту мы кадуе 332 00:20:56,780 --> 00:20:58,290 знаходзяцца на лісці. 333 00:20:58,290 --> 00:21:01,910 >> Неадназначнасць можа паўстаць толькі, як і ў выпадку з азбукай Морзэ, 334 00:21:01,910 --> 00:21:06,770 Калі, напрыклад, C быў дзесьці на шляху ад кораня да B. 335 00:21:06,770 --> 00:21:12,290 [Студэнт] Дакладна. Так што ў гэтым выпадку, скажам, з 2 лісцем. >> Скажыце ёсць - Скажы гэта яшчэ раз. 336 00:21:12,290 --> 00:21:18,760 [Студэнт] Скажы мае 2 ліста, F і G, а затым G - >> Добра. Але яна не можа. 337 00:21:18,760 --> 00:21:23,230 Сама па сабе не можа мець лісце F і G, таму што гэтыя літары F і G 338 00:21:23,230 --> 00:21:27,560 б самі быць пакідае недзе злева ад B або права E. 339 00:21:27,560 --> 00:21:28,900 Такім чынам, па азначэнні, яны павінны быць лісцем. 340 00:21:28,900 --> 00:21:32,940 У адваротным выпадку, вы маеце рацыю, мы не вырашылі праблему, што код Морзэ сутыкаецца. 341 00:21:32,940 --> 00:21:38,150 Добры пытанне. Іншыя пытанні? Добра. 342 00:21:38,150 --> 00:21:42,050 Гэта паняцце біта, аказваецца, у нас былі ўлады ўсё разам, што мы фактычна не выкарыстоўваецца 343 00:21:42,050 --> 00:21:44,200 калі гаворка ідзе пра маніпуляванні гэтыя 0 і 1. 344 00:21:44,200 --> 00:21:46,600 Мы спыталі пра гэта на адной з першых набораў задачы: 345 00:21:46,600 --> 00:21:52,340 а менавіта, як вы ідзяце па нагоды пераўтварэння вялікіх і малых літар, ці наадварот? 346 00:21:52,340 --> 00:21:55,460 Ці, больш канкрэтна, адзін з тых першых psets спытаў 347 00:21:55,460 --> 00:22:01,090 колькі біт вы на самой справе трэба перавярнуць, каб змяніць у ніжні рэгістр ці наадварот? 348 00:22:01,090 --> 00:22:05,580 Вось кароткае напамін таго, што 65 і 97 выглядаць у двайковым выглядзе. 349 00:22:05,580 --> 00:22:08,060 І нават калі гэта пытанне кшталту быў згублены ў вашай памяці, 350 00:22:08,060 --> 00:22:11,290 Вы можаце ўбачыць тут яшчэ раз, што, колькі біт неабходна перавярнуць 351 00:22:11,290 --> 00:22:15,810 змяніць капіталу ў ніжні рэгістр? Толькі адзін. 352 00:22:15,810 --> 00:22:19,650 >> Яны адрозніваюцца толькі ў адным месцы, трэці біт злева. 353 00:22:19,650 --> 00:22:24,240 У той час як ёсць 010, мала мае 011. 354 00:22:24,240 --> 00:22:26,250 Так ці інакш, мы павінны проста быць у стане адлюстраваць, што біт, 355 00:22:26,250 --> 00:22:29,410 і мы можам капіталізаваць або малой літары. 356 00:22:29,410 --> 00:22:32,720 Мы зрабілі гэта ў мінулым, фактычна выкарыстоўваючы, калі ўмовы 357 00:22:32,720 --> 00:22:35,930 і праверкі, калі ліст паміж капіталам і капіталам Z, 358 00:22:35,930 --> 00:22:41,480 Затым выхаду, як - + 26 ці нешта накшталт гэтага. 359 00:22:41,480 --> 00:22:46,130 Вы, напэўна, зрабіў арыфметычную змены літары алфавіту. 360 00:22:46,130 --> 00:22:49,270 Але што, калі мы маглі б проста перавярніце, што адзін біт? 361 00:22:49,270 --> 00:22:59,080 Як вы маглі б ісці аб прыняцці кошт аднаго байта біт, 8 біт, так як 01.000.001 01.100.001 і? 362 00:22:59,080 --> 00:23:03,170 Калі ў вас гэтыя паслядоўнасці бітаў, як мы можам ісці аб змене толькі аднаго з іх? 363 00:23:03,170 --> 00:23:07,610 Што, калі мы ўвядзем у жоўтым вось гэта іншае структуры біта? 364 00:23:07,610 --> 00:23:13,420 Калі я зраблю ўсё жоўтыя 0s радкі, за выключэннем аднаго біта, што я хачу змяніць 365 00:23:13,420 --> 00:23:17,900 а потым ўвесці новы аператар вядомы як аператар пабітава - 366 00:23:17,900 --> 00:23:21,210 Пабітава у тым сэнсе, што яна дзейнічае на асобныя біты, 367 00:23:21,210 --> 00:23:25,360 не на ўвесь байт ці чатыры байта ўсё адразу. 368 00:23:25,360 --> 00:23:31,170 Гэта вертыкальная рыса там, у жоўтым мяркуе, што тое, што калі мы возьмем ўяўленне капітал 369 00:23:31,170 --> 00:23:37,060 і пабітавае АБО яго жоўтай паслядоўнасць бітаў? 370 00:23:37,060 --> 00:23:41,300 Іншымі словамі, думаю, вернемся да нашага абмеркавання булева выразаў у драпін, а затым у C. 371 00:23:41,300 --> 00:23:47,520 >> Робячы лагічны ці азначае, што, каб быць праўдай, альбо першае, што павінна быць сапраўдным 372 00:23:47,520 --> 00:23:50,700 або другое павінна быць праўдзівымі або абодва яны маюць, каб быць праўдай, 373 00:23:50,700 --> 00:23:53,270 , А затым атрыманы вынік з'яўляецца самай праўдай. 374 00:23:53,270 --> 00:24:00,230 У гэтым выпадку тут, што мы атрымаем, калі возьмем 0 "або" е выд з 0? Ілжывыя ці не? 375 00:24:00,230 --> 00:24:04,280 Ён па-ранейшаму ілжывымі, так малыя застаецца, як чакалася. 376 00:24:04,280 --> 00:24:07,540 Што, калі замест гэтага мы робім 1 або 0? 377 00:24:07,540 --> 00:24:12,640 Гэта цяпер застаецца 1, але заўважыў, што гэта павінна адбыцца тут. 378 00:24:12,640 --> 00:24:18,630 Калі мы пачнем з капіталам, і мы працягваем "ці" яе асобныя біты, як мы робім тут, 379 00:24:18,630 --> 00:24:25,180 0 або жоўты дае нам, што тут, унізе? Гэта дае нам 1. 380 00:24:25,180 --> 00:24:35,120 На самай справе, выкажам здагадку, што мы не ведалі, што вялікія версія мала на самай справе. 381 00:24:35,120 --> 00:24:38,270 Давайце рабіць гэта. Дазвольце мне рухацца назад гэта тут. 382 00:24:38,270 --> 00:24:42,340 Давайце зробім гэта зноў. 0 або 0 дае мне 0. 383 00:24:42,340 --> 00:24:45,020 1 або 0 дае мне 1. 384 00:24:45,020 --> 00:24:48,020 0 або 1 дае мне 1. 385 00:24:48,020 --> 00:24:52,880 0 або 0 дае мне 0. Наступны 0, наступны роўны 0, наступная: 0. 386 00:24:52,880 --> 00:24:55,660 1 або 0 дае мне 1. 387 00:24:55,660 --> 00:24:59,140 І таму, нават калі мы не ведаем загадзя, што ніжні рэгістр быў, 388 00:24:59,140 --> 00:25:04,770 проста "або" ИНГ з гэтай карціны біты, якія мы прадставілі тут, у жоўтых, 389 00:25:04,770 --> 00:25:09,400 Вы можаце ніжні капіталу, пстрыкаючы, што няшмат. 390 00:25:09,400 --> 00:25:11,580 Мы выкарыстоўвалі гэты выраз тыдняў назад: гартаць няшмат. 391 00:25:11,580 --> 00:25:13,710 Як вы на самой справе зрабіць гэта праграмна? 392 00:25:13,710 --> 00:25:16,390 Вы можаце выкарыстоўваць тое, што звычайна называюць маскай, паслядоўнасць бітаў, 393 00:25:16,390 --> 00:25:19,980 што ў гэтым выпадку адбываецца проста так, каб паглядзець, як гэты нумар тут, 394 00:25:19,980 --> 00:25:22,980 і тады вы "ці" гэта разам з выкарыстаннем гэтага новага аператара C, 395 00:25:22,980 --> 00:25:29,940 Ці не | |, можна выкарыстоўваць адно |, і вы б на самой справе атрымаць адказ тут, таму што навошта? 396 00:25:29,940 --> 00:25:35,120 Гэтае месца 1s, 2s месца, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Вось і атрымліваецца, што калі ўзяць вялікай літары і пабітавае АБО яго з цэлымі 32, 398 00:25:42,280 --> 00:25:47,520 таму што цэлымі 32, калі вы глядзіце на гэта як на біты, выглядае так, 399 00:25:47,520 --> 00:25:50,860 гэта азначае, што вы можаце перавярнуць біт, што вы сапраўды хочаце. 400 00:25:50,860 --> 00:25:52,630 І сапраўды гэтак жа - і мы будзем глядзець на код праз хвіліну - 401 00:25:52,630 --> 00:25:54,210 Выкажам здагадку, мы хочам пайсці ў іншым накірунку. 402 00:25:54,210 --> 00:25:58,210 >> Як вы ідзяце з ніжняга рэгістра ў сталіцу? Які біт неабходна змяніць? 403 00:25:58,210 --> 00:25:59,820 Гэта тая ж самая. 404 00:25:59,820 --> 00:26:03,970 Мы хочам змяніць гэта трэці біт з 1 на 0. 405 00:26:03,970 --> 00:26:06,310 І як мы маглі б ісці пра гэта? 406 00:26:06,310 --> 00:26:10,130 Як мы згортваем крыху? З якой шаблон бітаў мы маглі выключыць крыху? 407 00:26:11,580 --> 00:26:14,070 Што рабіць, калі мы накшталт інвертаваць маску? 408 00:26:14,070 --> 00:26:17,350 Калі раней, мы зрабілі ўсё жоўтыя 0s маскі 409 00:26:17,350 --> 00:26:19,930 за выключэннем аднаго біта мы хацелі ўключыць, 410 00:26:19,930 --> 00:26:25,580 Што рабіць, калі на гэты раз, мы робім усё 1s маска, за выключэннем трохі, што мы хочам, каб выключыць 411 00:26:25,580 --> 00:26:28,330 , А затым выкарыстоўваць тое, што аператар? 412 00:26:28,330 --> 00:26:30,560 Што, калі мы "і" рэчы? Давайце паглядзім. 413 00:26:30,560 --> 00:26:34,880 Калі зараз пстрыкнуць на гэта, выкажам здагадку, што я зноў стварыць маску, вось і ўсё 1s 414 00:26:34,880 --> 00:26:37,650 за выключэннем аднаго біта, што я хачу, каб выключыць 415 00:26:37,650 --> 00:26:43,860 , А затым замест "або" белымі лічбамі наверсе з жоўтымі нумарамі тут, 416 00:26:43,860 --> 00:26:46,940 што, калі я замест "і" іх разам? Гэта называецца пабітава і. 417 00:26:46,940 --> 00:26:49,450 Лагічна, што гэта тое ж самае, лагічнае і. 418 00:26:49,450 --> 00:26:55,160 Гэта дае мне 0 і 1 роўны 0. Такім чынам, ілжывай і праўдзівай з'яўляецца ілжывым. 419 00:26:55,160 --> 00:26:58,160 Праўда, і праўда, то праўда. 420 00:26:58,160 --> 00:27:04,020 А вось магія: Сапраўдныя і несапраўдныя зараз ілжывым, таму мы выключаны, што няшмат. 421 00:27:04,020 --> 00:27:06,560 А цяпер астатняя частка гісторыі некалькі просты. 422 00:27:06,560 --> 00:27:11,970 Таму што астатняя частка маскі 1s, гэта не мае значэння тое, што лічбы ў белым. 423 00:27:11,970 --> 00:27:15,580 Калі вы "і" нешта з праўдай, вы не збіраецеся, каб змяніць яго значэнне. 424 00:27:15,580 --> 00:27:20,200 Калі гэта праўда, то застанецца верным. Калі б гэта была ілжывая, яна будзе заставацца ілжывымі. 425 00:27:20,200 --> 00:27:23,190 >> Але чараўніцтва адбываецца, калі вы прымаеце тое, што было сапраўдным 426 00:27:23,190 --> 00:27:25,430 і вы тады "і" яго з ілжывай. 427 00:27:25,430 --> 00:27:30,030 Гэта мае эфект адключэння, што няшмат. 428 00:27:30,030 --> 00:27:31,980 Такім чынам, трохі загадкава там. 429 00:27:31,980 --> 00:27:35,390 Давайце рэальна глядзець на код, які можа на самай справе выглядаюць яшчэ больш загадкавым, 430 00:27:35,390 --> 00:27:38,220 Але давайце паглядзім вось на ToLower. 431 00:27:38,220 --> 00:27:45,880 Калі я гляджу на ToLower, якія ідуць ад сталіцы ў ніжні рэгістр, 432 00:27:45,880 --> 00:27:47,730 Давайце паглядзім, як мы маглі б рэалізаваць гэтую праграму. 433 00:27:47,730 --> 00:27:51,280 Вось асноўныя, і ён не робіць ніякіх аргументаў каманднага радка. 434 00:27:51,280 --> 00:27:55,980 Я аб'яўленні характару з для лісты, якія карыстальнік збіраецца ўвесці цалі 435 00:27:55,980 --> 00:28:00,690 Затым я выкарыстоўваю знаёмыя рабіць падчас цыклу проста пераканайцеся, што карыстач вызначана дае мне капітал 436 00:28:00,690 --> 00:28:05,010 або B або C. .. Z, таму яны даюць мне нешта паміж А і Z. 437 00:28:05,010 --> 00:28:08,580 А зараз тое, што я тут раблю? 438 00:28:08,580 --> 00:28:14,870 Я "або" ИНГ гэта з 0x20, але гэта на самай справе так жа, як - 439 00:28:14,870 --> 00:28:19,500 і мы вернемся да гэтага ў дадзены момант - 32. 440 00:28:19,500 --> 00:28:24,830 Такім чынам, яшчэ раз, 32 гэтая карціна біты тут. Навошта нам гэта ведаць? 441 00:28:24,830 --> 00:28:26,320 Проста успомніце тыдзень 0. 442 00:28:26,320 --> 00:28:31,010 Гэтае месца 1s, 2s месца, 4s, 8s, 16s, 32s месца. 443 00:28:31,010 --> 00:28:33,470 Такім чынам, гэта жоўты нумар, здараецца, 32. 444 00:28:33,470 --> 00:28:40,570 Затым я магу ўзяць з сабой ліст, як сімвал тут, пабітавае "або" яна літаральна з лікам 32, 445 00:28:40,570 --> 00:28:45,250 і што я вярнуся? Малыя версія, што знак. 446 00:28:45,250 --> 00:28:48,830 Хвіліну назад, хоць, я выказаў гэта ў іншы запісу базы. 447 00:28:48,830 --> 00:28:51,370 Што гэта ўяўляеце? >> [Студэнт] шаснаццатковай. 448 00:28:51,370 --> 00:28:53,050 [Малая] Гэта адбываецца ўяўляюць шаснаццаткавыя. 449 00:28:53,050 --> 00:28:55,170 Мы не казалі аб шаснаццатковым ўсё, што многае, 450 00:28:55,170 --> 00:28:57,330 але на самой справе гэта зручна ў выпадках, падобных на гэты. 451 00:28:57,330 --> 00:29:01,730 >> Нават калі гэта выглядае больш складанай і, хоць яна выглядае як 20, а не 32, 452 00:29:01,730 --> 00:29:06,240 Аказваецца, што шаснаццаткавыя на самай справе супер зручныя абазначэння 453 00:29:06,240 --> 00:29:10,810 таму што ў шаснаццатковай кожнай лічбы пасля 0x - і гэта нічога не значыць; 454 00:29:10,810 --> 00:29:13,960 гэта проста чалавечае пагадненне, што кажа тут ідзе шаснаццатковы лік - 455 00:29:13,960 --> 00:29:18,590 кожная з гэтых лічбаў, 2, а затым 0, самі па сабе могуць быць прадстаўлены 456 00:29:18,590 --> 00:29:20,800 роўна з 4 біта. 457 00:29:20,800 --> 00:29:27,840 Так што, калі мы зробім гэта, дазвольце мне адкрыць тэкставы рэдактар ​​тут - дзіўнае аўтазапаўнення - 458 00:29:27,840 --> 00:29:35,940 калі мы трохі тэкставы рэдактар ​​тут, лік 0x20 азначае, што тут 4 біт, вось яшчэ 4 біта. 459 00:29:35,940 --> 00:29:38,050 Давайце зробім правах 4 біта ў першую чаргу. 460 00:29:38,050 --> 00:29:44,690 0, калі прадстаўленыя 4 біта гэта што? Супер проста. Проста ўсе 0s. 461 00:29:44,690 --> 00:29:46,780 Так што 4 біта, як 0s. 462 00:29:46,780 --> 00:29:53,510 Як вы ўяўляеце 2? Гэта быў час, так як мы зрабілі гэта, але гэта 0100. 463 00:29:53,510 --> 00:29:57,310 Так што гэта 1s месца, гэта 2s месца, а потым гэта не мае значэння тое, што іншыя месцы. 464 00:29:57,310 --> 00:30:00,610 Іншымі словамі, у шаснаццатковым вы маглі б сказаць 0x20, 465 00:30:00,610 --> 00:30:04,340 Але калі вы потым думаць пра тое, што 2 і як яно прадстаўлена ў двайковай, 466 00:30:04,340 --> 00:30:07,130 што такое 0 і як гэта прадстаўлена ў двайковай, 467 00:30:07,130 --> 00:30:10,440 Адказы на гэтыя пытанні гэта і гэта, адпаведна. 468 00:30:10,440 --> 00:30:14,380 Так адбываецца, 0x20, каб прадставіць гэтую карціну з 8 біт, 469 00:30:14,380 --> 00:30:16,880 які як раз і з'яўляецца маскай, якую мы хацелі. 470 00:30:16,880 --> 00:30:20,140 Так што гэта на дадзены момант проста інтэлектуальнае практыкаванне, 471 00:30:20,140 --> 00:30:24,520 але на самой справе ў кодзе гэта звычайна часцей пісаць канстанты, як гэта 472 00:30:24,520 --> 00:30:28,360 у шаснаццатковым, таму што тады праграміст можа адносна лёгка, 473 00:30:28,360 --> 00:30:32,560 нават калі гэта патрабуе паперу і аловак, высветліць, што гэта карціна біт 474 00:30:32,560 --> 00:30:35,960 таму што вы не можаце проста выказваць 0 і 1 звычайна ў кодзе. 475 00:30:35,960 --> 00:30:38,540 Вы не можаце пайсці 00010 і гэтак далей. 476 00:30:38,540 --> 00:30:42,380 >> Вы павінны абраць дзесятковай або шаснаццатковай або васьмярковым або іншыя абазначэння. 477 00:30:42,380 --> 00:30:47,540 Большасць людзей схільныя выбіраць шаснаццатковым проста так, каб кожная лічба ўяўляе 4 біта 478 00:30:47,540 --> 00:30:49,320 і вы можаце зрабіць гэта хутка матэматыцы. 479 00:30:49,320 --> 00:30:54,990 І я махаю рукой у ToUpper, што амаль тое ж самае, ён выглядае амаль ідэнтычна. 480 00:30:54,990 --> 00:31:01,900 ToUpper адбываецца выкарыстоўваць не або аператар, а гэты хлопец і DF. 481 00:31:01,900 --> 00:31:09,300 Што DF ўяўляюць? DF? Любы? >> [Студэнт] 255. 482 00:31:09,300 --> 00:31:12,780 255? Ці не 255. Гэта было б і далей. 483 00:31:12,780 --> 00:31:15,210 Мы пакінем гэта адно, маленькае практыкаванне. 484 00:31:15,210 --> 00:31:23,460 Але калі вы ідзяце ад 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, а затым тое, што прыходзіць пасля 9? 485 00:31:23,460 --> 00:31:26,510 Мы быццам з дзесятковых лічбаў, але ў шаснаццатковым, што будзе пасля 9? 486 00:31:26,510 --> 00:31:29,510 [Студэнт]. >> Так A, B, C, D. 487 00:31:29,510 --> 00:31:33,470 Вы можаце высветліць адтуль тое, што карціна біт D на самай справе ўяўляе. 488 00:31:33,470 --> 00:31:38,850 І калі мы робім матэматыку, мы ўбачым, што маскі ў канчатковым выніку атрымаць назад ідэнтычна гэтага. 489 00:31:38,850 --> 00:31:45,580 Гэта F, усё 1s, і гэта г. Так DF заяўляе, што маскі. Добра. 490 00:31:45,580 --> 00:31:50,980 І, нарэшце, не рабіць рэчаў гук супер, супер тэхнічных, 491 00:31:50,980 --> 00:31:53,840 але выкажам здагадку, што мы хацелі, каб напісаць праграму, якая гэта робіць. 492 00:31:53,840 --> 00:31:58,960 Дазвольце мне пайсці далей і зрабіць бінарны, які ўяўляе сабой праграму ў файле з імем binary.c. 493 00:31:58,960 --> 00:32:02,050 А цяпер дазвольце мне запусціць бінарны і даць мне неадмоўнае цэлае лік. 494 00:32:02,050 --> 00:32:03,960 Давайце пачнем проста і тып 0. 495 00:32:03,960 --> 00:32:09,010 Гэта цяпер гэта праграма, якая выводзіць цэлы лік у падвоеным уяўленні. 496 00:32:09,010 --> 00:32:13,470 Так што, калі я гуляю ў гэтую гульню зноў і ўвесці толькі 1, я павінен атрымаць 32-разраднае ўяўленне 1. 497 00:32:13,470 --> 00:32:15,490 Калі я зраблю гэта зноў 2, я павінен атрымаць гэта. 498 00:32:15,490 --> 00:32:19,310 Калі я раблю 7, я павінен атрымаць некалькі 1s ў канцы і гэтак далей. 499 00:32:19,310 --> 00:32:22,740 Аказваецца, я кажу пра гэта, таму што з аперацыі пабітава 500 00:32:22,740 --> 00:32:25,490 вы рэальна можаце зрабіць адну рэч, як добра. 501 00:32:25,490 --> 00:32:29,130 Вы можаце стварыць гэтыя маскі дынамічна. 502 00:32:29,130 --> 00:32:32,800 Зірніце на гэты апошні прыклад з удзелам бітавых аперацый. 503 00:32:32,800 --> 00:32:35,490 Вось першая частка кода, запытвае ў карыстальніка лік, 504 00:32:35,490 --> 00:32:38,130 і ён настойвае на тым, што вы даяце мне неадмоўнае цэлае лік. 505 00:32:38,130 --> 00:32:39,780 Так што гэта свайго роду старое школы. 506 00:32:39,780 --> 00:32:41,980 Але вось тое, што быццам цікавы. 507 00:32:41,980 --> 00:32:44,910 >> Як я магу ісці аб друку ліку ў двайковым? 508 00:32:44,910 --> 00:32:48,970 Я ўпершыню ітэрацыі ад чаго да чаго? 509 00:32:48,970 --> 00:32:52,270 Які памер Int звычайна, па меншай меры ў прыбор? >> [Студэнт] 4. 510 00:32:52,270 --> 00:32:57,130 Гэта 4. Такім чынам, 4 * 8 32 - 1, 31. 511 00:32:57,130 --> 00:33:02,590 Так што, калі я пачынаю лічыць ад 31, які ўяўляе, аказваецца, 512 00:33:02,590 --> 00:33:07,630 толькі канцэптуальна, 31-разрадны або вышэйшага парадку біт, што гэты хлопец тут, 513 00:33:07,630 --> 00:33:09,650 у той час як гэта будзе біт 0. 514 00:33:09,650 --> 00:33:12,850 Так што гэта біт 01 біт ... 31. 515 00:33:12,850 --> 00:33:14,950 Так што гэты код робіць? 516 00:33:14,950 --> 00:33:20,140 Звярніце ўвагу, гэта цыкл, нават калі ён выглядае загадкавым, проста перабор з 31 да 0. Вось і ўсё. 517 00:33:20,140 --> 00:33:24,530 Такім чынам, самая цікавая частка зараз павінна быць у гэтых 5 радкоў тут. 518 00:33:24,530 --> 00:33:28,110 Звярніце ўвагу, што ў гэтай лініі я аб'яўленні зменнай маскі 519 00:33:28,110 --> 00:33:30,790 ў адпаведнасць з нашай гісторыяй гэтых жоўтых нумароў. 520 00:33:30,790 --> 00:33:32,200 А тое, што гэта робіць? 521 00:33:32,200 --> 00:33:35,720 Гэта яшчэ адзін аператар пабітава мы не бачылі раней, хутчэй за ўсё. 522 00:33:35,720 --> 00:33:38,300 Гэта аператар левага зруху. 523 00:33:38,300 --> 00:33:40,060 Гэты аператар робіць гэта. 524 00:33:40,060 --> 00:33:44,920 Вось нумар 1, і калі вы робіце я пакінуў зрух, зрух налева, 525 00:33:44,920 --> 00:33:49,260 Што вы думаеце, што мае эфект робіць, каб, што асобныя 1? 526 00:33:49,260 --> 00:33:51,290 Літаральна зрушэння яго. 527 00:33:51,290 --> 00:33:57,540 Такім чынам, калі лік 1 з'яўляецца тое, што ў вас на левым, і вы пачынаеце з ініцыялізацыі я 31, 528 00:33:57,540 --> 00:34:03,490 Што гэта будзе рабіць? Ён збіраецца ўзяць гэты нумар 1 і перакласці яе 31 месцаў тут. 529 00:34:03,490 --> 00:34:06,210 І таму, што тут няма іншых лічбаў за ёй, 530 00:34:06,210 --> 00:34:10,350 тыя, па змаўчанні будзе заменены 0s. 531 00:34:10,350 --> 00:34:15,120 Такім чынам, вы пачынаеце з нумарам 1, які, вядома, выглядае так - 532 00:34:15,120 --> 00:34:18,659 і дазвольце мне зрабіць гэта тут, у цэнтры. 533 00:34:18,659 --> 00:34:22,139 І тое, як вы пераносіце рэчы злева, гэты хлопец па сутнасці ідзе гэтым шляхам. 534 00:34:22,139 --> 00:34:24,659 Але як толькі вы гэта зробіце, 0 атрымлівае запоўненыя 535 00:34:24,659 --> 00:34:28,360 Калі перавесці яго ў другі раз, ён ідзе гэтым шляхам і іншае 0 атрымлівае запоўненыя 536 00:34:28,360 --> 00:34:31,000 >> Вы перакласці яе зноў, а затым яшчэ 0 атрымлівае запоўненыя 537 00:34:31,000 --> 00:34:37,900 Так што калі вы гэта зробіце з 1 << I 31 месцаў, у выніку вы атрымліваеце маску 538 00:34:37,900 --> 00:34:42,550 , Што складае 32 сімвалаў, левы адным з якіх з'яўляецца 1, 539 00:34:42,550 --> 00:34:45,199 Усё астатняе з якіх 0. 540 00:34:45,199 --> 00:34:50,880 А то атрымліваецца, як у бок, пераходзячы лік злева, як гэта 541 00:34:50,880 --> 00:34:53,530 Таксама выпадкова, а часам і зручна, 542 00:34:53,530 --> 00:34:57,520 мае эфект робіць тое, што на гэты нумар? >> [Студэнт] Падваенне яго. 543 00:34:57,520 --> 00:35:00,980 Падваенне гэта, таму што ў кожным з слупкоў - 1s месца, 2s месца, 4s месца, 544 00:35:00,980 --> 00:35:05,030 8s месца, 16s месцы - яны ўсё падваення, як вы ідзяце налева. 545 00:35:05,030 --> 00:35:09,500 Ці, дакладней, калі вы пераносіце 1s вы будзеце ў канчатковым выніку падвоіць кошт нумары. 546 00:35:09,500 --> 00:35:12,070 Вы можаце ў канчатковым выніку робіць цікавае пераўтварэння лічбаў 547 00:35:12,070 --> 00:35:15,640 зрушваючы ўсё больш падобным чынам па ступенях 2. 548 00:35:15,640 --> 00:35:17,150 Так як жа гэта працуе? 549 00:35:17,150 --> 00:35:22,580 Гэта і дае мне маску, якая ўсё 0s за выключэннем 1 у дакладнасці месцы я хачу, 550 00:35:22,580 --> 00:35:27,920 а потым гэта выраз, якое скралі toupper.c, 551 00:35:27,920 --> 00:35:31,770 проста кажа, узяць лік п, што карыстач увёў у, 552 00:35:31,770 --> 00:35:34,730 »І« што з гэтай маскай, і што вы збіраецеся атрымаць? 553 00:35:34,730 --> 00:35:39,200 Вы збіраецеся атрымаць 1, калі ёсць 1 у масках, што месца, 554 00:35:39,200 --> 00:35:41,570 ці вы збіраецеся атрымаць 0, калі гэта не так. 555 00:35:41,570 --> 00:35:44,370 І так усё гэта робіць праграма эфектыўна гэта мае пятлю, 556 00:35:44,370 --> 00:35:48,340 і гэта стварае маску з 1 тут, то 1 тут, то 1 тут, 557 00:35:48,340 --> 00:35:52,950 і ён выкарыстоўвае гэта пабітавае І трук, каб сказаць, значыць 1 біт на ўваходзе карыстальнікаў тут? 558 00:35:52,950 --> 00:35:59,220 >> Значыць 1 біт на ўваходзе карыстальнікаў тут? І калі гэта так, літаральна друкаваць 1, інакш друк 0. 559 00:35:59,220 --> 00:36:03,780 Мы робім гэта з цэлымі толькі таму, што менавіта таму мы робім 32 біт замест 8, 560 00:36:03,780 --> 00:36:06,900 але тое, што мы ўвялі, то гэта пабітавае І гэта пабітавае АБО, 561 00:36:06,900 --> 00:36:10,450 і гэты аператар левага зруху, які часта не вельмі карысна, 562 00:36:10,450 --> 00:36:12,230 але аказваецца, што яны могуць быць. 563 00:36:12,230 --> 00:36:16,560 На самай справе, калі б вы былі ўяўляць сабой нешта накшталт масіў лагічных 564 00:36:16,560 --> 00:36:21,260 проста ўяўляюць сапраўднае або ілжывае, выкажам здагадку, вы хацелі, каб адсочваць ці не 565 00:36:21,260 --> 00:36:24,630 пакой, поўную 300 студэнтаў прысутнічае, 566 00:36:24,630 --> 00:36:29,420 Вы можаце абвясціць масіў памерам 300 тыпу BOOL, так што вы атрымаеце 300 Bools, 567 00:36:29,420 --> 00:36:33,090 і вы можаце наладзіць кожны праўдзіва, калі хтосьці тут і хлусня ў адваротным выпадку. 568 00:36:33,090 --> 00:36:37,550 Чаму гэта прадстаўленне ў тым, што структура дадзеных неэфектыўная? 569 00:36:39,370 --> 00:36:44,800 Што дрэннага аб дызайне, што структура дадзеных, масіў з 300 Bools? 570 00:36:46,190 --> 00:36:49,600 Што такое лагічны, на самай справе, пад капотам? 571 00:36:49,600 --> 00:36:52,310 Гэта, таксама, з'яўляецца тое, што могуць быць не знаёмыя. 572 00:36:52,310 --> 00:36:53,720 Аказваецца, няма BOOL. 573 00:36:53,720 --> 00:36:56,620 Памятаеце, мы як бы стварылі, што з cs50.h файл, 574 00:36:56,620 --> 00:36:58,630 якая сама па сабе ўключае ў сябе стандартныя BOOL. 575 00:36:58,630 --> 00:37:00,930 З выглядам нямы, хоць, калі справа даходзіць да BOOL. 576 00:37:00,930 --> 00:37:04,880 Ён выкарыстоўвае 8 біт для прадстаўлення кожны лагічны, які цалкам марнатраўнага 577 00:37:04,880 --> 00:37:09,040 таму што відавочна, колькі біт трэба, каб прадстаўляць лагічнае? Проста 1. 578 00:37:09,040 --> 00:37:13,190 Вось і атрымліваецца, што калі зараз у вас ёсць магчымасць з аператарамі пабітава 579 00:37:13,190 --> 00:37:17,760 маніпуляваць асобнымі бітамі нават у знак, нават у адзін байт, 580 00:37:17,760 --> 00:37:21,380 Аказваецца можна паменшыць аб'ём памяці, неабходны для прадстаўлення глупства 581 00:37:21,380 --> 00:37:25,490 як, што наведвальнасць стылі структуру дадзеных у 8 разоў. 582 00:37:25,490 --> 00:37:29,820 Замест таго каб выкарыстоўваць 8 бітаў ўяўляюць сапраўднае або ілжывае, вы можаце літаральна выкарыстоўваць адзін 583 00:37:29,820 --> 00:37:34,500 з дапамогай аднаго байта на кожныя восем вучняў у класе 584 00:37:34,500 --> 00:37:41,990 і пераключэння ад 0 да 1 асобныя біты з дапамогай гэтых відаў нізкім узроўнем трукаў. 585 00:37:43,850 --> 00:37:49,460 Гэта сапраўды пакласці канец энергіі. Ці ёсць пытанні аб бітаў аперацыі? 586 00:37:49,460 --> 00:37:52,710 >> Так. >> [Студэнт] Ці ёсць выключныя або аператар? 587 00:37:52,710 --> 00:37:56,440 Так. Існуе выключнае або аператар, які выглядае так, ^, моркву знак, 588 00:37:56,440 --> 00:38:02,070 , Што азначае толькі першае або другое можа быць 1 на выхадзе будзе 1. 589 00:38:02,070 --> 00:38:07,750 Існуе таксама няма, ~, якая дазволіць вам, каб інвертаваць 0 на 1 або наадварот, а таксама. 590 00:38:07,750 --> 00:38:11,600 І ёсць таксама аператар зруху направа, >>, якая з'яўляецца супрацьлегласцю той, якую мы бачылі. 591 00:38:11,600 --> 00:38:13,850 Добра. Давайце рэчы цяпер на больш высокі ўзровень. 592 00:38:13,850 --> 00:38:16,770 Мы пачалі казаць пра тэкст, а затым сціснуць яго 593 00:38:16,770 --> 00:38:19,650 і ўяўляе тэкст з меншай колькасцю біт; 594 00:38:19,650 --> 00:38:22,890 Мы крыху пагаварылі пра тое, як мы можам зараз пачаць маніпуляцыі рэчамі на ўзроўні пабітава. 595 00:38:22,890 --> 00:38:26,640 Давайце цяпер маштаб да 10.000 футаў, каб ўяўленне 596 00:38:26,640 --> 00:38:29,250 больш складаныя рэчы, як графіка. 597 00:38:29,250 --> 00:38:32,950 Тут мы маем сцягам Германіі, тут мы маем адно з Францыі. 598 00:38:32,950 --> 00:38:36,350 Яны могуць быць прадстаўлены ў фарматах, вы ведаеце - GIF-файлаў, напрыклад. 599 00:38:36,350 --> 00:38:40,030 Калі вы калі-небудзь бачылі малюнак у Інтэрнэце, якія заканчваюцца на. GIF, 600 00:38:40,030 --> 00:38:43,000 Гэта графічны фармат абмену. 601 00:38:43,000 --> 00:38:47,530 Гэтыя два сцягі тут накшталт паддаюцца сціску 602 00:38:47,530 --> 00:38:52,050 за тое, што, магчыма, відавочных прычын? >> [Неразборліва адказ студэнта] 603 00:38:52,050 --> 00:38:53,440 Там вельмі шмат паўтораў, дакладна? 604 00:38:53,440 --> 00:38:57,270 Для таго, каб адправіць сцягам Германіі, думаць пра гэта як малюнак на экране 605 00:38:57,270 --> 00:38:59,030 назад у дні Scratch. 606 00:38:59,030 --> 00:39:02,380 Вы маглі б успомніць, што ёсць асобныя кропкі, якія складаюць малюнак. 607 00:39:02,380 --> 00:39:06,650 >> Там цэлы шэраг чорных кропак і яшчэ цэлага шэрагу чорных кропак. 608 00:39:06,650 --> 00:39:10,110 Там куча радкоў чорнымі кропкамі, якія мы маглі бачыць, калі мы сапраўды павялічана, 609 00:39:10,110 --> 00:39:13,370 многае падабаецца, калі мы павялічана на твары Роба ў Photoshop. 610 00:39:13,370 --> 00:39:15,500 Як толькі мы атрымалі ўсё глыбей і глыбей і глыбей у малюнку, 611 00:39:15,500 --> 00:39:19,990 Вы пачалі бачыць пікселізацыі, усе квадраты, якія складаюцца вочы ў гэтым выпадку. 612 00:39:19,990 --> 00:39:24,130 Тое ж тут справа. Калі мы павялічана зусім крыху, вы б ўбачылі асобных кропак. 613 00:39:24,130 --> 00:39:27,110 Ну, гэта выгляд адходаў біт. 614 00:39:27,110 --> 00:39:32,120 Калі траціну сцяг чорнага і трэцяга сцяга жоўты і так далей, 615 00:39:32,120 --> 00:39:34,860 чаму мы не можам нейкім чынам сціснуць гэты сьцяг? 616 00:39:34,860 --> 00:39:39,560 І нават французскі сцяг можа быць сціснута, хоць карціна крыху іншая. 617 00:39:39,560 --> 00:39:44,120 Аказваецца фармаце GIF файлаў фармат сціску без страт, 618 00:39:44,120 --> 00:39:48,420 якая азначае, што вы можаце рабіць здымкі, як нямецкі сцяг тут, 619 00:39:48,420 --> 00:39:53,540 Вы можаце выкінуць шматлікія з яго бітаў без шкоды для якасці. 620 00:39:53,540 --> 00:39:55,340 Гэта ў адрозненне ад нешта накшталт JPEG, 621 00:39:55,340 --> 00:39:57,050 , З якой большасць з нас, верагодна, больш знаёмыя. 622 00:39:57,050 --> 00:39:59,000 Facebook фота і Flickr фатаграфій і да т.п. 623 00:39:59,000 --> 00:40:02,200 Амаль заўсёды захоўваюцца як выявы ў фармаце JPEG, калі яны загружаныя, 624 00:40:02,200 --> 00:40:08,100 але ў фармаце JPEG з'яўляецца стратамі - стратамі - фармат якога вы выкінулі біты 625 00:40:08,100 --> 00:40:10,430 але вы таксама выкідаюць якасці. 626 00:40:10,430 --> 00:40:13,890 І таму, калі вы сціскаць фатаграфіі з Photoshop або загрузіць іх на Facebook 627 00:40:13,890 --> 00:40:15,580 або ўзяць іх на сапраўды брудную тэлефон, 628 00:40:15,580 --> 00:40:19,510 Вы ведаеце, што карціна пачынае атрымліваць вельмі плямістым і няроўнай, 629 00:40:19,510 --> 00:40:22,290 і гэта таму, што ён сціскаецца з дапамогай кампутара ці тэлефона 630 00:40:22,290 --> 00:40:24,550 літаральна кідалі інфармацыя ад гатэля. 631 00:40:24,550 --> 00:40:28,500 Але GIF дзіўна ў тым, што ён можа выкарыстаць менш біт, чым ён можа па змаўчанні 632 00:40:28,500 --> 00:40:30,750 без страты інфармацыі. 633 00:40:30,750 --> 00:40:32,410 >> І яна па сутнасці робіць гэта наступным чынам. 634 00:40:32,410 --> 00:40:38,740 Замест таго, каб захоўваць у файле, як BMP бы RGB патройны для чорнага, чорнага, чорнага, чорнага, 635 00:40:38,740 --> 00:40:42,570 чорны, чорны, чорны, чорны, чорны, чорны, чорны, чорны і гэтак далей, 636 00:40:42,570 --> 00:40:45,640 Хутчэй за ўсё, фармат GIF збіраецца сказаць, "Black" 637 00:40:45,640 --> 00:40:48,330 , А затым "Паўтарыце гэта 100 раз", ці нешта накшталт гэтага. 638 00:40:48,330 --> 00:40:52,280 "Чорны паўтарыць гэта 100 раз, чорны, паўтарыць гэта 100 раз ..." 639 00:40:52,280 --> 00:40:54,530 "Жоўты, паўтарыць гэта 100 раз." 640 00:40:54,530 --> 00:40:57,200 І так ён памятае, па сутнасці, левае пікселяў 641 00:40:57,200 --> 00:41:02,160 і затым кадуе так ці інакш паняцце паўтараў, што піксель зноў і зноў. 642 00:41:02,160 --> 00:41:06,110 Так GIF-файлаў можна сціснуць сябе без страты інфармацыі. 643 00:41:06,110 --> 00:41:09,510 Але калі ў вас здагадацца, калі гэта алгарытм, які ГИФС выкарыстання, 644 00:41:09,510 --> 00:41:13,180 які з гэтых сцягоў, нават калі яны выглядаюць аднолькавымі па памеры, 645 00:41:13,180 --> 00:41:19,620 будзе менш, калі захоўваецца на дыску ў фармаце GIF? >> [Студэнт] Нямеччына. 646 00:41:19,620 --> 00:41:21,660 Нямеччына будзе менш? Чаму? 647 00:41:21,660 --> 00:41:26,620 [Студэнт] Паколькі Вы паўтараеце гэта шмат, шмат разоў гарызантальна 648 00:41:26,620 --> 00:41:29,010 а потым паўтарыць у іншы раз. >> Менавіта так. 649 00:41:29,010 --> 00:41:32,020 Таму што людзі, якія вынайшлі GIF толькі збольшага адвольна вырашылі 650 00:41:32,020 --> 00:41:36,040 , Што паўтор будуць выкарыстаны гарызантальна, а не збоку. 651 00:41:36,040 --> 00:41:40,900 Там вельмі шмат больш паўтораў бакоў тут у нямецкі сцяг, чым у французскі сцяг. 652 00:41:40,900 --> 00:41:44,430 Такім чынам, калі мы на самай справе адкрыць тэчку на цвёрдым дыску, які мае гэтыя GIF, 653 00:41:44,430 --> 00:41:51,920 Вы можаце фактычна бачыць, што нямецкі сцяг тут 2 кілабайта і французскай складае 4 кілабайта. 654 00:41:51,920 --> 00:41:54,080 Гэта здараецца супадзенне, што адзін у два разы больш іншага, 655 00:41:54,080 --> 00:41:57,960 але гэта на самай справе так, што французскі сцяг значна больш. 656 00:41:57,960 --> 00:42:01,250 >> Нават калі мы гаворым тут пра графіку, тыя ж ідэі можна прымяніць да 657 00:42:01,250 --> 00:42:05,150 Не такія рэчы, як сцягі, але вобразы, якія з'яўляюцца крыху больш складанымі. 658 00:42:05,150 --> 00:42:08,170 Калі вы возьмеце карціну яблык, безумоўна, ёсць шмат дублявання там, 659 00:42:08,170 --> 00:42:11,040 , Каб мы маглі неяк памятаць, што па змаўчанні фон сіне 660 00:42:11,040 --> 00:42:13,230 а не, як правая карціна мяркуе, 661 00:42:13,230 --> 00:42:16,830 павінны памятаць, колер кожнага пікселя ў гэтай карціне. 662 00:42:16,830 --> 00:42:21,060 Такім чынам, мы можам кінуць біт далёка значыць без страты інфармацыі. 663 00:42:21,060 --> 00:42:23,340 Яблык па-ранейшаму выглядае сапраўды гэтак жа. 664 00:42:23,340 --> 00:42:27,510 У гэтым прыкладзе, вы можаце ўбачыць, што адбываецца ў фільме. 665 00:42:27,510 --> 00:42:31,970 Яны ўяўляюць старой школы кінахронікі якога ў верхнім малюнку ёсць 666 00:42:31,970 --> 00:42:36,900 ў вас ёсць RV праязджаў міма дома і дрэва. 667 00:42:36,900 --> 00:42:42,130 А што ван праязджае міма злева направа, што, відавочна, не змяняецца? 668 00:42:42,130 --> 00:42:45,320 Дом нікуды не дзенецца, і дрэва нікуды не дзенецца. 669 00:42:45,320 --> 00:42:47,700 Адзінае, што рухаецца з'яўляецца ван ў гэтым выпадку. 670 00:42:47,700 --> 00:42:51,650 Так як фон без зменаў мяркуе, што вы можаце зрабіць у кіно 671 00:42:51,650 --> 00:42:56,530 Аналагічна проста выкінуць інфармацыю, якая не змяняецца паміж кадрамі. 672 00:42:56,530 --> 00:42:58,900 Гэта, як правіла, вядомыя як сціск межкадрового 673 00:42:58,900 --> 00:43:02,120 згодна з якім, калі гэты кадр выглядае амаль ідэнтычна гэтаму, 674 00:43:02,120 --> 00:43:05,390 давайце не будзем турбавацца захавання на дыску любога з ідэнтычнай інфармацыі 675 00:43:05,390 --> 00:43:09,250 на гэтыя прамежкавыя кадры, давайце выкарыстоўваць толькі ключавыя кадры раз у той час 676 00:43:09,250 --> 00:43:13,420 што на самой справе захоўваць гэтую інфармацыю залішне гэтак жа, як трохі разважнасці праверыць. 677 00:43:13,420 --> 00:43:18,620 >> У адрозненне ад іншы падыход да сціск відэа ў гэтым другім і ніжняй прыклад тут, 678 00:43:18,620 --> 00:43:23,970 , Дзе замест крамы 30 кадраў, чаму б вам не проста захоўваць 15 кадраў у секунду замест? 679 00:43:23,970 --> 00:43:27,070 Замест таго, каб фільм выгляду цячэ прыгожа, выдатна, 680 00:43:27,070 --> 00:43:30,060 гэта можа выглядаць гэта заіканне трохі, трохі старой школы, 681 00:43:30,060 --> 00:43:37,190 але эфект будзе выкарыстоўваць значна менш біт, чым магло б быць неабходным. 682 00:43:37,190 --> 00:43:39,240 Дык дзе ж гэта тады нам застаецца? 683 00:43:39,240 --> 00:43:41,700 Гэта было трохі ў баку ад таго, дзе яшчэ вы можаце пайсці са сціскам. 684 00:43:41,700 --> 00:43:45,140 Больш падрабязную інфармацыю аб тым, што ўзяць клас як CS175 тут. 685 00:43:45,140 --> 00:43:46,990 Вось яшчэ адзін прыклад у відэа. 686 00:43:46,990 --> 00:43:49,190 Калі пчала гэта адзінае, што рухаецца, 687 00:43:49,190 --> 00:43:51,790 Вы сапраўды можаце выкінуць інфармацыі ў гэтых сярэдніх кадрах 688 00:43:51,790 --> 00:43:55,260 таму што кветка і неба, і лісце не мяняецца. 689 00:43:55,260 --> 00:43:57,960 Але давайце цяпер разгледзім адну рэч. 690 00:43:57,960 --> 00:44:03,890 У наступныя 5 хвілін мы пакінем ззаду C вечна ў лекцыі? Так. Не ў psets, аднак. 691 00:44:03,890 --> 00:44:10,210 Апошні аповяд пра С, а затым мы пяройдзем да вельмі сэксуальным матэрыялам 692 00:44:10,210 --> 00:44:13,870 з удзелам HTML і вэб-і у-у-ух. Добра. 693 00:44:13,870 --> 00:44:16,050 Тут мы ідзем. Гэта матывацыя. 694 00:44:16,050 --> 00:44:20,020 Аказваецца, увесь гэты час, калі мы былі напісання праграм мы запускаем Clang. 695 00:44:20,020 --> 00:44:23,890 І Clang, мы гаварылі з першага тыдня ў значнай ступені, бярэ зыходны код 696 00:44:23,890 --> 00:44:25,740 і пераўтворыць яго ў аб'ектны код. 697 00:44:25,740 --> 00:44:28,540 Гэта зойме C і пераўтворыць яго ў 0 і 1. 698 00:44:28,540 --> 00:44:32,150 Я накшталт ляжаў да вас на працягу некалькіх тыдняў, таму што гэта не зусім так проста. 699 00:44:32,150 --> 00:44:36,750 >> Там вельмі шмат больш адбываецца пад капотам, калі вы запускаеце праграму, як Clang. 700 00:44:36,750 --> 00:44:39,560 На самай справе, працэс кампіляцыі праграмы сапраўды можа быць абагульнены, 701 00:44:39,560 --> 00:44:42,210 як вы, магчыма, памятаеце з відэа Адзежа на кампілятары, 702 00:44:42,210 --> 00:44:47,580 у гэтыя 4 этапы: папярэдняя апрацоўка, складанне сябе, зборкі і кампаноўкі. 703 00:44:47,580 --> 00:44:51,950 Але ў нас у класе, і большасць людзей у свеце звычайна сумаваць ўсе гэтыя крокі 704 00:44:51,950 --> 00:44:54,410 як толькі "кампіляцыі". 705 00:44:54,410 --> 00:44:58,070 Але калі мы пачнем з зыходнага кода, як гэта, нагадаем гэта, мабыць, найпростая праграма C 706 00:44:58,070 --> 00:45:03,530 мы напісалі да гэтага часу, нагадаем, што пры кампіляцыі ён заканчваецца ў такім выглядзе. 707 00:45:03,530 --> 00:45:07,310 Але там на самай справе прамежкавы крок, і гэтыя крокі заключаюцца ў наступным. 708 00:45:07,310 --> 00:45:10,750 Па-першае, гэтая рэч на самым версе гэтага, і большасць нашых праграм, 709 00:45:10,750 --> 00:45:13,550 # Уключыць 710 00:45:13,550 --> 00:45:17,210 Што # ўключыць зрабіць для нас? 711 00:45:17,210 --> 00:45:24,150 Гэта ў значнай ступені капіюе і ўстаўляе змесціва stdio.h ў маім файле, так што чаму? 712 00:45:24,150 --> 00:45:27,220 Чаму я клапачуся пра змест stdio.h? Што там цікавасць? 713 00:45:27,220 --> 00:45:32,310 Printf ў дэкларацыі, яго прататып, так што кампілятар то ведае, што я маю на ўвазе 714 00:45:32,310 --> 00:45:34,900 калі я згадваю гэтую функцыю Printf. 715 00:45:34,900 --> 00:45:39,390 Такім чынам, крок 1 у зборы з'яўляецца папярэдняй апрацоўкі, у выніку чаго праграмы, як Clang 716 00:45:39,390 --> 00:45:43,450 ці некаторыя дапаможныя праграмы, якая пастаўляецца з Clang чытае ваш код зверху ўніз, 717 00:45:43,450 --> 00:45:47,740 Злева направа, і ў любы момант ён бачыць знак # варта ключавое слова, як ўключаць, 718 00:45:47,740 --> 00:45:53,980 ён выконвае гэтую аперацыю, капіяванне і ўстаўка ў дадзеным выпадку stdio.h ў ваш файл. 719 00:45:53,980 --> 00:45:55,510 Гэта крок 1. 720 00:45:55,510 --> 00:45:59,620 Тады ў вас ёсць значна больш C файл з-за велізарнага капіяваць, ўставіць вакансіі, проста так атрымалася. 721 00:45:59,620 --> 00:46:01,710 >> Крок 2 Зараз гэта кампіляцыя. 722 00:46:01,710 --> 00:46:04,880 Але, аказваецца кампіляцыя займае зыходны код, які выглядае наступным чынам 723 00:46:04,880 --> 00:46:08,160 і ператварае яго ў нешта, што выглядае так, 724 00:46:08,160 --> 00:46:12,560 што для тых, хто знаёмы называецца? >> [Студэнт] асамблеі. >> Асамблеі мове. 725 00:46:12,560 --> 00:46:16,700 На самай справе гэта нешта, калі вы бераце CS61 вы будзеце апускацца ў больш падрабязна. 726 00:46:16,700 --> 00:46:22,380 Гэта амаль так жа блізка, як вы можаце атрымаць у пісьмовым 0 і 1 сабе 727 00:46:22,380 --> 00:46:25,850 але пісаць рэчы такім чынам, што ўсё яшчэ прымушае па крайняй меры крыху сэнсу. 728 00:46:25,850 --> 00:46:30,760 Гэтыя машынныя інструкцыі, і калі мы пракруціць ўніз да асноўнай функцыяй тут, 729 00:46:30,760 --> 00:46:35,470 заўважыце, што гэты штуршок інструкцыі, перамяшчаць інструкцыі, адняць навучання, 730 00:46:35,470 --> 00:46:38,550 тэлефануйце навучання, і гэтак далей. 731 00:46:38,550 --> 00:46:42,930 Калі вы чуеце, што ваш кампутар Intel Inside, 732 00:46:42,930 --> 00:46:46,180 у вас працэсар Intel у Mac ці PC, што гэта значыць? 733 00:46:46,180 --> 00:46:51,200 Працэсар ўбудаваны такімі кампаніямі, як Intel разуменне пэўных інструкцый. 734 00:46:51,200 --> 00:46:55,770 Яны паняцця не маюць, што такія функцыі, як свопу або асноўны самі па сабе, 735 00:46:55,770 --> 00:47:00,060 але яны ведаюць, што вельмі нізкім узроўні інструкцый, як складанне, адніманне, штурхаць, 736 00:47:00,060 --> 00:47:02,430 перамясціць, патэлефанаваць, і гэтак далей,. 737 00:47:02,430 --> 00:47:06,170 Такім чынам, пры кампіляцыі C код на асэмблеры, 738 00:47:06,170 --> 00:47:11,820 ваша вельмі зручны выгляд код пераўтворыцца ў нешта, што выглядае так, 739 00:47:11,820 --> 00:47:21,670 , Што літаральна рухаецца байта або 4 байта вакол у такіх невялікіх падраздзяленняў і з CPU. 740 00:47:21,670 --> 00:47:26,820 Але, нарэшце, калі Clang гатовы прыняць гэтае паданне сваёй праграмы 741 00:47:26,820 --> 00:47:30,940 у 0 і 1, то крок называецца зборка адбываецца, 742 00:47:30,940 --> 00:47:33,850 і гэта зноў усё адбываецца ў імгненне вока пры запуску Clang. 743 00:47:33,850 --> 00:47:39,300 Мы пачынаем тут, яна выводзіць файл, як гэта, а затым пераўтворыць яго ў гэтыя 0 і 1. 744 00:47:39,300 --> 00:47:42,000 І калі вы хочаце, каб вярнуцца ў нейкі момант і на самай справе ўбачыць гэта ў дзеянні, 745 00:47:42,000 --> 00:47:48,220 калі я іду ў hello1.c--гэта адна з самых першых праграм, якія мы паглядзелі на - 746 00:47:48,220 --> 00:47:53,710 Звычайна мы будзем кампіляваць гэта з Clang hello1.c і гэта дасць нам a.out. 747 00:47:53,710 --> 00:47:59,890 Калі ў адрозненне ад вас, а даць яму-S сцяг, што вы атрымаеце гэта hello1.s 748 00:47:59,890 --> 00:48:02,750 і вы на самой справе бачыце на асэмблеры. 749 00:48:02,750 --> 00:48:05,750 >> Я раблю гэта для вельмі кароткай праграмы, але калі вы вернецеся на Scramble 750 00:48:05,750 --> 00:48:08,740 ці аднавіць або любую праграму, вы напісалі і проста з цікаўнасці 751 00:48:08,740 --> 00:48:13,240 хачу паглядзець, што гэта на самай справе падобна, што на самой справе кормяць у CPU, 752 00:48:13,240 --> 00:48:15,700 Вы можаце выкарыстоўваць гэта-S сцяг з Clang. 753 00:48:15,700 --> 00:48:17,770 Але потым, нарэшце, ёсць яшчэ адзін глюк. 754 00:48:17,770 --> 00:48:21,810 Тут 0 і 1, якія прадстаўляюць маёй рэалізацыі Добры дзень, свет. 755 00:48:21,810 --> 00:48:25,530 Але я выкарыстаў чужую функцыю ў маёй праграме. 756 00:48:25,530 --> 00:48:28,710 Так што, хоць працэс быў я бяру hello.c, 757 00:48:28,710 --> 00:48:34,280 ён кампілюецца ў код зборкі, а затым яна будзе збірацца ў 0 і 1, 758 00:48:34,280 --> 00:48:37,460 толькі 0 і 1, якія выводзяцца на дадзены момант 759 00:48:37,460 --> 00:48:40,270 тыя, што ў выніку майго кода. 760 00:48:40,270 --> 00:48:44,400 Але чалавек, які напісаў Printf, яны склалі свой код 20 гадоў таму 761 00:48:44,400 --> 00:48:47,000 і яна цяпер усталяваны дзесьці на прыбор, 762 00:48:47,000 --> 00:48:51,610 так што мы нейкім чынам павінны аб'яднаць свае 0 і 1 з маімі 0 і 1, 763 00:48:51,610 --> 00:48:56,160 і гэта падводзіць нас да 4-й і заключны этап кампіляцыі, вядомыя як спасылкі. 764 00:48:56,160 --> 00:48:58,680 Такім чынам, на левай баку у нас ёсць дакладна такая ж карціна, як раней: 765 00:48:58,680 --> 00:49:02,580 hello.c становіцца зборкі кода становіцца 0 і 1. 766 00:49:02,580 --> 00:49:05,960 Але памятайце, што я выкарыстаў стандартныя бібліятэкі ўводу / высновы ў мой код, 767 00:49:05,960 --> 00:49:10,350 і гэта азначае, што дзесьці на кампутары ёсць файл пад назвай stdio.c 768 00:49:10,350 --> 00:49:13,980 або па крайняй меры скампіляваныя версіі іх таму, што хтосьці некалькі гадоў назад 769 00:49:13,980 --> 00:49:18,530 складзены stdio.c ў ассемблерный код, а затым цэлы букет з 0 і 1. 770 00:49:18,530 --> 00:49:21,130 Гэта тое, што вядома як статычная або дынамічная бібліятэка. 771 00:49:21,130 --> 00:49:23,350 Гэта нейкі файл сядзіць дзесьці ў прыбор. 772 00:49:23,350 --> 00:49:28,710 >> Але, нарэшце, я павінен узяць маю 0 і 1, і што чалавек 0 і 1 773 00:49:28,710 --> 00:49:32,760 і нейкім чынам звязаць іх разам, літаральна аб'яднаць гэтыя 0 і 1 774 00:49:32,760 --> 00:49:37,900 ў адзіны файл з імем a.out або hello1 або тое, што я назваў сваю праграму 775 00:49:37,900 --> 00:49:43,320 так што канчатковы вынік мае ўсе 1 і 0, якія павінны скласці сваю праграму. 776 00:49:43,320 --> 00:49:45,660 Так што ўвесь гэты час у гэтым семестры, калі вы выкарыстоўваеце Clang 777 00:49:45,660 --> 00:49:48,750 і яшчэ нядаўна запушчаных зрабіць для таго, каб запусціць Clang, 778 00:49:48,750 --> 00:49:53,580 Усе гэтыя крокі былі адбывалася роду імгненна, а цалкам свядома. 779 00:49:53,580 --> 00:49:57,830 І таму, калі вы працягваць у інфарматыцы, а менавіта CS61, 780 00:49:57,830 --> 00:50:00,850 гэта пласт, які вы будзеце працягваць адхіліце прэч там 781 00:50:00,850 --> 00:50:06,980 казаць аб эфектыўнасці, бяспекі, наступствы, і як гэтыя дэталі ніжняга ўзроўню. 782 00:50:06,980 --> 00:50:09,220 Але разам з тым, мы збіраліся сыходзіць C ззаду. 783 00:50:09,220 --> 00:50:11,420 Давайце ісці наперад і прымаць наш 5-хвілінны перапынак зараз, 784 00:50:11,420 --> 00:50:14,190 і калі мы вяртаемся: у інтэрнэце. 785 00:50:17,280 --> 00:50:19,170 Добра. Мы вярнуліся. 786 00:50:19,170 --> 00:50:23,590 Цяпер мы пачынаем наш погляд не толькі на HTML, таму што, як вы ўбачыце, 787 00:50:23,590 --> 00:50:26,050 HTML сябе на самай справе даволі простая 788 00:50:26,050 --> 00:50:29,270 але на самой справе на вэб-праграмавання ў цэлым, сеткі ў цэлым, 789 00:50:29,270 --> 00:50:31,770 і як усе гэтыя тэхналогіі аб'ядноўваюцца 790 00:50:31,770 --> 00:50:35,400 каб дазволіць нам ствараць больш складаныя праграмы па-над Інтэрнэту 791 00:50:35,400 --> 00:50:38,690 чым да гэтага часу мы змаглі ў гэтых чорна-белых вокнаў. 792 00:50:38,690 --> 00:50:42,140 Сапраўды, на дадзены момант у семестр, хоць мы будзем марнаваць менш часу адносна 793 00:50:42,140 --> 00:50:46,200 на PHP, HTML, CSS, JavaScript, SQL і больш, 794 00:50:46,200 --> 00:50:48,480 большасць студэнтаў робяць у канчатковым выніку робіць канчатковыя праекты, якія вэб- 795 00:50:48,480 --> 00:50:51,230 таму што, як вы ўбачыце, фон зараз у вас ёсць у C 796 00:50:51,230 --> 00:50:54,450 вельмі дастасавальныя да гэтых моў высокага ўзроўню. 797 00:50:54,450 --> 00:50:56,800 >> І, як вы пачынаеце думаць аб сваім канчатковым праекце, 798 00:50:56,800 --> 00:50:59,940 які, гэтак жа, як пытанне, пастаўлены 0, дзе вы былі заахвочаны 799 00:50:59,940 --> 00:51:02,160 рабіць самому нічога цікавага для вас у Scratch, 800 00:51:02,160 --> 00:51:05,790 Канчатковы праект гэта ваша магчымасць прыняць вашы новыя веды і кемлівасць з C 801 00:51:05,790 --> 00:51:09,850 або PHP або JavaScript, або як з-за спін 802 00:51:09,850 --> 00:51:12,330 і стварыць свой уласны кавалак праграмнага забеспячэння для свету, каб бачыць. 803 00:51:12,330 --> 00:51:17,770 І насеньне вам ідэі, ведайце, што вы можаце ўзначаліць тут, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Кожны год мы патрабаваць ідэй ад супрацоўнікаў і выкладчыкаў і студэнцкіх груп на тэрыторыі кампуса 805 00:51:21,800 --> 00:51:27,330 проста прадставіць свае ідэі для цікавых рэчаў, якія могуць быць вырашаны з дапамогай кампутараў, 806 00:51:27,330 --> 00:51:29,860 выкарыстанне вэб-сайтаў, з дапамогай праграмнага забеспячэння. 807 00:51:29,860 --> 00:51:32,360 Так што, калі вы змагаецеся, каб прыдумаць ідэю самастойна, 808 00:51:32,360 --> 00:51:35,790 усімі сродкамі пракруткі ідэі ёсць з гэтага года і апошні. 809 00:51:35,790 --> 00:51:39,990 Гэта зусім нармальна для вырашэння праекта, якія былі вырашаны раней. 810 00:51:39,990 --> 00:51:44,540 Мы бачылі шмат прыкладанняў для бачачы стан пральні на тэрыторыі кампуса, 811 00:51:44,540 --> 00:51:47,000 шматлікія прыкладанні для навігацыі па меню сталовай, 812 00:51:47,000 --> 00:51:49,540 шматлікія прыкладанні для навігацыі па каталогу курсаў і да таго падобнае. 813 00:51:49,540 --> 00:51:53,680 І сапраўды, у будучай лекцыі і семінары ў будучыні, 814 00:51:53,680 --> 00:51:57,750 Мы пазнаёмім вас з некаторымі агульнадаступных API, як камерцыйна даступныя 815 00:51:57,750 --> 00:52:02,520 а таксама тут можна атрымаць CS50 на тэрыторыі кампуса, так што ў вас ёсць доступ да дадзеных 816 00:52:02,520 --> 00:52:04,910 і можа рабіць цікавыя рэчы з ім. 817 00:52:04,910 --> 00:52:09,380 Так што больш на канчатковае праекты ў некалькі дзён, калі мы выпускаем спецыфікацыі, 818 00:52:09,380 --> 00:52:12,990 але цяпер, ведаю, што вы можаце працаваць у адзіночку ці з адным або двума сябрамі 819 00:52:12,990 --> 00:52:16,010 на большасці праектаў, якія ўяўляюць цікавасць для вас. 820 00:52:16,010 --> 00:52:18,080 Інтэрнэт. 821 00:52:18,080 --> 00:52:22,300 Вы ідзяце наперад і выцягніце ваш ноўтбук, вы ідзяце ў facebook.com ўпершыню, 822 00:52:22,300 --> 00:52:27,020 тое, што не ўвайшлі ў апошні час, і націсніце Увод. Што менавіта адбываецца? 823 00:52:27,020 --> 00:52:30,150 >> Калі вы націснеце Enter на вашым кампутары, цэлую кучу крокаў 824 00:52:30,150 --> 00:52:32,600 пачаць роду чароўным адбываецца. 825 00:52:32,600 --> 00:52:35,960 Такім чынам, вы тут, на левым, вэб-сервер, як Facebook тут справа, 826 00:52:35,960 --> 00:52:42,500 і неяк вы выкарыстоўваеце гэтую мову называецца HTTP, пратакол перадачы гіпертэксту. 827 00:52:42,500 --> 00:52:46,770 HTTP не з'яўляецца мовай праграмавання. Гэта хутчэй пратакол. 828 00:52:46,770 --> 00:52:52,310 Ён уяўляе сабой набор канвенцый, вэб-браўзэры і вэб-серверы выкарыстоўваюць, калі сазлучаныя. 829 00:52:52,310 --> 00:52:54,360 А што гэта азначае наступнае. 830 00:52:54,360 --> 00:52:56,790 Многае, як у рэальным свеце, у нас ёсць гэтыя канвенцыі 831 00:52:56,790 --> 00:53:00,140 дзе, калі вы сустрэцца з некаторымі чалавека ў першы раз, калі вы не пярэчыце, пасмейваючыся мяне тут, 832 00:53:00,140 --> 00:53:03,980 Я мог бы падысці да вас, кажаце: "Прывітанне, мяне завуць Дэвід». >> Прывітанне, Дэвід. Мяне клічуць Сэмі. 833 00:53:03,980 --> 00:53:05,770 "Прывітанне, Дэвід. Мяне клічуць Сэмі". 834 00:53:05,770 --> 00:53:08,310 Так што цяпер мы толькі што займаліся такога роду дурныя чалавечыя пратакола 835 00:53:08,310 --> 00:53:12,200 дзе я ініцыяваў пратакол, Сэмі адказаў, 836 00:53:12,200 --> 00:53:15,060 Мы паціснуў руку, і здзелка будзе завершана. 837 00:53:15,060 --> 00:53:18,260 HTTP вельмі падобныя па духу. 838 00:53:18,260 --> 00:53:23,350 Калі вашы запыты вэб-браўзэра www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 што ваш браўзэр на самай справе робіць пашырае сваю руку, так бы мовіць, 840 00:53:27,020 --> 00:53:29,960 да сервера і пасылае яму паведамленне. 841 00:53:29,960 --> 00:53:34,220 І гэта паведамленне, як правіла, нешта накшталт Get - што вы хочаце атрымаць? - 842 00:53:34,220 --> 00:53:38,740 зразумейце мяне галоўная старонка, якая звычайна пазначаецца касой рысай ў канцы URL-адрасы. 843 00:53:38,740 --> 00:53:43,790 І толькі так вы ведаеце на якой мове я кажу, я маю на браўзэры збіраюся расказаць вам, 844 00:53:43,790 --> 00:53:46,930 што я кажу HTTP версіі 1.1, 845 00:53:46,930 --> 00:53:51,980 А таксама для добрай мерай, я збіраюся расказаць вам, што гаспадар, што я хачу на галоўную старонку 846 00:53:51,980 --> 00:53:54,120 з'яўляецца facebook.com. 847 00:53:54,120 --> 00:53:57,730 Як правіла, вэб-браўзэр, непрыкметна для вас, чалавека, 848 00:53:57,730 --> 00:54:03,350 пасылае гэта паведамленне ў Інтэрнэце, калі вы проста ўводзіце www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Пазначце, у Вашым браўзэры. 850 00:54:05,370 --> 00:54:07,300 І што Facebook адкажа? 851 00:54:07,300 --> 00:54:12,540 Ён рэагуе з некаторым падобны выгляд загадкавыя дэталі, але і многае іншае. 852 00:54:12,540 --> 00:54:14,310 Дазвольце мне ісці наперад на галоўную старонку Facebook тут. 853 00:54:14,310 --> 00:54:17,480 Гэта экран, што большасць з нас, верагодна, ніколі не ўбачыць, калі вы заставацца ў сістэме ўвесь час, 854 00:54:17,480 --> 00:54:19,830 але гэта сапраўды іх хатнюю старонку. 855 00:54:19,830 --> 00:54:24,150 Калі мы зробім гэта ў Chrome, заўважылі, што вы можаце падцягнуць гэтыя маленькія кантэкстныя меню. 856 00:54:24,150 --> 00:54:26,980 Выкарыстанне Chrome, ці то на Mac OS, Windows, Linux і да т.п., 857 00:54:26,980 --> 00:54:31,840 Калі вы кантралюеце мышы або пстрыкніце левай кнопкай мышы, як правіла, можна падцягнуць меню, якое выглядае так, 858 00:54:31,840 --> 00:54:35,870 дзе чакаюць некалькі варыянтаў, адзін з якіх з'яўляецца прадстаўленне крыніцы старонку. 859 00:54:35,870 --> 00:54:39,920 Вы таксама можаце звычайна атрымліваюць на гэтыя рэчы, перайшоўшы ў меню Выгляд і калупацца. 860 00:54:39,920 --> 00:54:42,750 Напрыклад, тут, пад View, распрацоўніка адно і тое ж. 861 00:54:42,750 --> 00:54:45,780 Я збіраюся ісці наперад і глядзець на View Source старонку. 862 00:54:45,780 --> 00:54:50,800 Тое, што вы бачыце, HTML, што Марк напісаў для прадстаўлення facebook.com. 863 00:54:50,800 --> 00:54:55,910 Гэта поўны бардак, але мы ўбачым, што гэта робіць трохі больш сэнсу ў хуткім часе. 864 00:54:55,910 --> 00:54:59,840 Але ёсць некаторыя мадэлі тут. Дазвольце мне пракруціць ўніз, каб рэчы, як гэта. 865 00:54:59,840 --> 00:55:05,730 Гэта цяжка для чалавека, каб чытаць, але заўважыў, што ёсць гэтая мадэль вуглавыя дужкі 866 00:55:05,730 --> 00:55:10,360 з ключавымі словамі, як варыянт, ключавыя словы, як каштоўнасць, некаторыя двукоссях. 867 00:55:10,360 --> 00:55:15,660 Гэта дзе, калі вы зарэгістраваліся ў першы раз, удакладніў, што ваша нараджэнне годзе. 868 00:55:15,660 --> 00:55:19,020 Гэта выпадальнае меню нараджэння гады неяк закадзіраваны тут 869 00:55:19,020 --> 00:55:23,870 У гэтай мове называецца HTML, мова гіпертэкставай разметкі. 870 00:55:23,870 --> 00:55:27,730 Іншымі словамі, калі ваш браўзэр запытвае вэб-старонку, 871 00:55:27,730 --> 00:55:30,610 яна кажа гэтая канвенцыя называецца HTTP. 872 00:55:30,610 --> 00:55:35,170 Але што ж facebook.com адказаць на гэты запыт? 873 00:55:35,170 --> 00:55:38,260 >> Ён рэагуе з некаторымі з гэтых загадкавых паведамленняў, як мы ўбачым праз імгненне. 874 00:55:38,260 --> 00:55:43,760 Але вялікую частку свайго адказу ў выглядзе HTML, мова гіпертэкставай разметкі. 875 00:55:43,760 --> 00:55:47,170 Гэта фактычна мова, на якім вэб-старонка напісана. 876 00:55:47,170 --> 00:55:52,030 І тое, што вэб-браўзэр сапраўды гэта значыць, пры атрыманні нешта накшталт гэтага, 877 00:55:52,030 --> 00:55:57,120 чытае яе зверху ўніз, злева направа, і ў любы момант ён бачыць адну з гэтых кутніх дужках 878 00:55:57,120 --> 00:56:03,370 варта ключавое слова, як варыянт, ён паказвае, што мова разметкі адпаведным чынам. 879 00:56:03,370 --> 00:56:06,820 У гэтым выпадку ён будзе адлюстроўваць выпадальнае меню гадоў. 880 00:56:06,820 --> 00:56:09,240 Але зноў жа, гэта поўны бардак на што паглядзець. 881 00:56:09,240 --> 00:56:16,630 Гэта не таму, што распрацоўшчыкі Facebook выяўляюцца 0, 5 для стылю, напрыклад. 882 00:56:16,630 --> 00:56:20,190 Гэта адбываецца таму, што вялікая частка кода, што яны пішуць, на самай справе, напісана прыгожа, 883 00:56:20,190 --> 00:56:22,450 добра прокомментірован, прыгожа водступам, і да таго падобнае, 884 00:56:22,450 --> 00:56:26,080 але, вядома, машын, кампутараў, браўзэраў сапраўды не напляваць 885 00:56:26,080 --> 00:56:27,890 Ці ваш код і стылі. 886 00:56:27,890 --> 00:56:33,100 І на самай справе, гэта цалкам марнатраўна ударыў клавішу табуляцыі усе тыя часы 887 00:56:33,100 --> 00:56:37,650 і паставіць каментарыяў на працягу ўсяго вашага кода і выбраць сапраўды апісальныя імёны зменных 888 00:56:37,650 --> 00:56:42,340 таму што, калі браўзэр не хвалюе, усё, што вы робіце ў канцы працоўнага дня марнуе байт. 889 00:56:42,340 --> 00:56:46,660 >> Вось і атрымліваецца, што большасць вэб-сайтаў зрабіць, гэта, нават калі зыходны код для facebook.com, 890 00:56:46,660 --> 00:56:49,550 для cs50.net і ўсе гэтыя іншыя сайты ў Інтэрнэце 891 00:56:49,550 --> 00:56:53,730 , Як правіла, добра напісана і добра прокомментірован і прыемна водступ і да т.п., 892 00:56:53,730 --> 00:56:59,270 Звычайна, перш чым пакласці сайт у Інтэрнэт, код паменшаная, 893 00:56:59,270 --> 00:57:02,970 якой HTML і CSS - нешта яшчэ, што мы хутка ўбачым - 894 00:57:02,970 --> 00:57:05,960 Код JavaScript мы хутка ўбачым сціскаецца, 895 00:57:05,960 --> 00:57:09,250 якой доўгіх імёнаў зменных стаць X, У і Z, 896 00:57:09,250 --> 00:57:13,900 і ўсё гэта прабел, які робіць усё выглядае так чытаецца ўсё гэта выкідваць, 897 00:57:13,900 --> 00:57:17,700 таму што, калі вы думаеце пра гэта так, Facebook атрымлівае млрд зваротаў да старонцы ў дзень - 898 00:57:17,700 --> 00:57:21,670 нешта вар'ят, як што - так што, калі праграміст проста быць анальны 899 00:57:21,670 --> 00:57:26,660 націсніце прабел адно дадатковы час, проста для водступу некаторыя радкі кода усё настолькі больш? 900 00:57:26,660 --> 00:57:29,500 Што маецца на ўвазе калі Facebook захоўваецца, што прабелы 901 00:57:29,500 --> 00:57:32,880 Ва ўсіх байтаў яны адпраўляюць назад у людзей у Інтэрнэце? 902 00:57:32,880 --> 00:57:36,400 Націск клавішы прабелу раз дае вам дадатковы байт у файле. 903 00:57:36,400 --> 00:57:39,730 І калі мільярда чалавек затым перайсці да загрузцы хатняй старонкі ў той дзень, 904 00:57:39,730 --> 00:57:42,060 наколькі больш дадзеных вы перадаюцца праз Інтэрнэт? 905 00:57:42,060 --> 00:57:45,200 Gigabyte без паважлівай прычыны. 906 00:57:45,200 --> 00:57:48,510 І эксплуатацыю, для многіх вэб-сайтах, гэта не такая маштабуецца пытанне, 907 00:57:48,510 --> 00:57:51,030 але для Facebook, для Google, для некаторых з самых папулярных вэб-сайтаў 908 00:57:51,030 --> 00:57:54,860 ёсць вялікі стымул фінансава каб зрабіць ваш код выглядае як беспарадак 909 00:57:54,860 --> 00:57:58,980 так што вы будзеце выкарыстоўваць як некалькі байт, як магчыма ў дадатак да затым сціснуць яго 910 00:57:58,980 --> 00:58:01,500 выкарыстоўваючы нешта накшталт маланкі, алгарытм, званы GZIP, 911 00:58:01,500 --> 00:58:04,250 , Што браўзэр аўтаматычна. Але гэта жахліва. 912 00:58:04,250 --> 00:58:08,060 Мы ніколі не даведаемся нічога пра сайтах іншых людзей, і, як праектаваць вэб-старонак 913 00:58:08,060 --> 00:58:09,680 калі мы павінны глядзець на гэта так. 914 00:58:09,680 --> 00:58:13,620 >> Так што, на шчасце, браўзэры, такія як Chrome і IE і Firefox у гэтыя дні 915 00:58:13,620 --> 00:58:16,450 як правіла, маюць убудаваныя прылады распрацоўніка. 916 00:58:16,450 --> 00:58:21,730 На самай справе, калі я іду сюды, каб агляд элементаў або калі я іду, каб паглядзець, распрацоўшчыкаў, 917 00:58:21,730 --> 00:58:25,220 і перайдзіце да Прылады распрацоўкі відавочна, 918 00:58:25,220 --> 00:58:27,640 гэта акно ў ніжняй частцы экрана цяпер мая ўсплывае. 919 00:58:27,640 --> 00:58:31,230 Гэта трохі страшным спачатку, таму што там шмат незнаёмых ўкладкі тут, 920 00:58:31,230 --> 00:58:34,510 але калі я націскаю на элементы на ўсім шляху ў левым ніжнім, 921 00:58:34,510 --> 00:58:38,810 Chrome, відавочна, вельмі разумны. Ён ведае, як інтэрпрэтаваць ўвесь гэты код. 922 00:58:38,810 --> 00:58:42,320 І тое, што Chrome робіць гэта чысціць ўсе HTML Facebook. 923 00:58:42,320 --> 00:58:45,680 Нават калі там не прабелы там, не водступу там, 924 00:58:45,680 --> 00:58:51,120 Цяпер заўважаю, што я магу пачаць навігацыю гэтай вэб-старонцы, тым больш іерархічна. 925 00:58:51,120 --> 00:58:56,910 Атрымліваецца, што кожная вэб-старонка напісаная на мове завецца HTML5 павінны пачаць з гэтага, 926 00:58:56,910 --> 00:59:03,980 гэтая дэкларацыя DOCTYPE, так сказаць: 927 00:59:03,980 --> 00:59:07,840 Гэта свайго роду святлом і шэры там, але гэта самая першая радок кода ў гэтым файле, 928 00:59:07,840 --> 00:59:12,080 і што менавіта кажа браўзэру, "Гэй, вось некаторыя HTML5. вось вэб-старонку". 929 00:59:12,080 --> 00:59:18,490 Першая адкрытая дужках акрамя таго, здараецца, гэтая рэч, якая адкрывае дужкі HTML тэгаў, 930 00:59:18,490 --> 00:59:22,320 , А затым, калі я нырнуць у глыбокія - гэтыя стрэлкі цалкам бессэнсоўна; 931 00:59:22,320 --> 00:59:25,140 яны толькі дзеля прэзентацыі, яны не з'яўляюцца на самай справе ў файле - 932 00:59:25,140 --> 00:59:30,300 заўважыце, што ўнутры HTML тэга Facebook, усё, што пачынаецца з адкрывае дужкі 933 00:59:30,300 --> 00:59:32,910 а затым слова называецца тэгам. 934 00:59:32,910 --> 00:59:38,610 Такім чынам, усярэдзіне тэга HTML-відаць, з'яўляецца тэг галавы і цела тэга. 935 00:59:38,610 --> 00:59:41,930 Усярэдзіне галавы тэгі зараз увесь беспарадак на Facebook 936 00:59:41,930 --> 00:59:45,620 таму што ў іх шмат метададзеныя і іншыя рэчы для маркетынгу і рэкламы. 937 00:59:45,620 --> 00:59:50,600 >> Але калі мы пракруціць ўніз, уніз, уніз, уніз, давайце паглядзім, дзе ён знаходзіцца. Вось ён. 938 00:59:50,600 --> 00:59:52,210 Гэта адна крайняй меры крыху знаёмыя. 939 00:59:52,210 --> 00:59:55,990 Назва галоўнай старонкі Facebook, калі вы паглядзіце на ўкладцы ў радку загалоўка, 940 00:59:55,990 --> 00:59:59,060 з'яўляецца Сардэчна запрашаем на Facebook - Заходзьце, Зарэгістравацца або даведацца больш. 941 00:59:59,060 --> 01:00:01,110 Вось тое, што вы бачыце ў загалоўку Chrome, 942 01:00:01,110 --> 01:00:03,100 і вось як гэта прадстаўлена ў кодзе. 943 01:00:03,100 --> 01:00:08,090 Калі мы будзем ігнараваць усе астатняе ў галаве, большая частка кішкі вэб-старонка знаходзіцца ў целе, 944 01:00:08,090 --> 01:00:10,940 і атрымліваецца, што код Facebook, будзе выглядаць больш складанымі 945 01:00:10,940 --> 01:00:14,540 чым большасць рэчаў, якія мы напішам першапачаткова толькі таму, што яна была пабудавана на працягу многіх гадоў, 946 01:00:14,540 --> 01:00:17,260 але ёсць шмат сцэнарыяў тэгі, JavaScript код, 947 01:00:17,260 --> 01:00:18,870 , Што робіць сайт вельмі інтэрактыўным: 948 01:00:18,870 --> 01:00:22,330 бачачы абнаўлення статусу імгненна выкарыстанні моў, такіх як JavaScript. 949 01:00:22,330 --> 01:00:25,270 Там-то завецца спраў, якая з'яўляецца падраздзяленнем старонку. 950 01:00:25,270 --> 01:00:27,940 Але перш чым мы пяройдзем да гэтага падрабязнасці, давайце паспрабуем, каб паменшыць маштаб 951 01:00:27,940 --> 01:00:31,920 і паглядзім на простую версію Facebook 1.0, так бы мовіць. 952 01:00:31,920 --> 01:00:34,740 Вось Добры дзень, свет вэб-старонак. 953 01:00:34,740 --> 01:00:37,370 Ён мае, што DOCTYPE дэкларацыі на самым версе 954 01:00:37,370 --> 01:00:40,280 які трохі адрозніваецца ад усяго астатняга. 955 01:00:40,280 --> 01:00:46,130 Нічога іншага мы пішам на вэб-старонцы будзе пачынацца з 01:00:48,880 і, за выключэннем так званых каментары ў HTML. 957 01:00:48,880 --> 01:00:53,000 Але па большай частцы, усё ў вэб-старонка адкрыта кранштэйн, ключавое слова, якая зачыняе дужкі. 958 01:00:53,000 --> 01:00:56,220 >> У гэтым выпадку можна ўбачыць самыя простыя вэб-старонак магчыма. 959 01:00:56,220 --> 01:01:00,260 HTML тэгаў ўтрымлівае галавой тэгі і змяшчае цела тэга, 960 01:01:00,260 --> 01:01:04,580 але зьвярніце ўвагу, што ёсць такое паняцце запуску і прыпынку тэгамі. 961 01:01:04,580 --> 01:01:11,360 Гэта пачатак тэга HTML, гэта зачыняе тэг або зачыняе тэга. 962 01:01:11,360 --> 01:01:15,400 Звярніце ўвагу, што яны накшталт супрацьлегласці ў тым сэнсе, што зачыняе тэг або зачыняе тэг 963 01:01:15,400 --> 01:01:20,030 Ці мае гэта касую рысу ўнутры сябе. 964 01:01:20,030 --> 01:01:23,540 Між тым, ёсць адкрытыя тэгі галаву тут і зачыняе тэг галаву тут. 965 01:01:23,540 --> 01:01:26,880 >> Там у адкрытую назву і зачыняе тэг назвы тут. 966 01:01:26,880 --> 01:01:29,850 Той факт, што я паклаў кнігу на адной лініі, чыста ўмоўна. 967 01:01:29,850 --> 01:01:33,760 Ён проста глядзеў, як яна будзе змяшчаецца на адным радку, таму я не стаў ўдару Калі ласка, увядзіце пару разоў. 968 01:01:33,760 --> 01:01:38,200 Між тым, цела, я зрабіў водступ проста быць ніколі так ясна. 969 01:01:38,200 --> 01:01:41,050 Звярніце ўвагу, што HTML з'яўляецца даволі дурным мовай. 970 01:01:41,050 --> 01:01:43,410 На самай справе, яшчэ ў дзень да з'яўлення WYSIWYG рэдактараў 971 01:01:43,410 --> 01:01:46,770 і Microsoft Word, дзе вы можаце сказаць: "Зрабіце гэта адважнае, зрабіць гэта курсіў," 972 01:01:46,770 --> 01:01:50,850 вы на самой справе увядзіце мала каманд у нарысах 20 + гадоў назад 973 01:01:50,850 --> 01:01:55,740 , У якім вы сказалі б, "Пачніце рабіць гэтага тэксту паўтлустым шрыфтам. Спыніце рабіць гэтага тэксту паўтлустым". 974 01:01:55,740 --> 01:01:59,010 "Пачніце рабіць гэтага тэксту курсівам. Спыніце рабіць гэтага тэксту курсівам". 975 01:01:59,010 --> 01:02:01,850 >> Гэта тое, што HTML або любы іншы мова разметкі. 976 01:02:01,850 --> 01:02:05,530 Гэта першы тэг кажа: "Гэй, браўзэрам. Вось некаторыя HTML." 977 01:02:05,530 --> 01:02:09,880 Наступны тэг кажа: "Гэй, браўзэрам. Вось галава, загаловак маёй вэб-старонкі." 978 01:02:09,880 --> 01:02:11,650 "Гэй, браўзэрам. Вось тытул". 979 01:02:11,650 --> 01:02:15,880 А потым сюды: "Гэй, браўзэр. Вось менавіта за тытул". 980 01:02:15,880 --> 01:02:20,000 Так што гэта, як браўзэр ведае, больш не будзе адлюстроўваць больш сімвалаў, чым Добры дзень, свет! 981 01:02:20,000 --> 01:02:21,860 У радку загалоўка. 982 01:02:21,860 --> 01:02:23,640 Між тым, гэтая кажа: "Вось і ўсё на галаву". 983 01:02:23,640 --> 01:02:28,340 Гэта кажа: "Вось ідзе цела Вось рэальнае цела." - Літаральна, словы Hello, World. 984 01:02:28,340 --> 01:02:33,190 І гэта кажа тут: "Вось гэта для цела. Вось менавіта для HTML." 985 01:02:33,190 --> 01:02:34,640 Так браўзэраў даволі дурное. 986 01:02:34,640 --> 01:02:39,920 Яны толькі што прачыталі гэты матэрыял зверху ўніз, злева направа, і рабіць менавіта тое, што яны кажуць. 987 01:02:39,920 --> 01:02:41,860 Давайце на самай справе зрабіць невялікі прыклад. 988 01:02:41,860 --> 01:02:46,240 Дазвольце мне адкрыць найпростых праграм на маім Mac тут, а менавіта TextEdit. 989 01:02:46,240 --> 01:02:48,220 У Windows можна выкарыстоўваць Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Але гэта ўсё, што трэба, каб пачаць зарабляць вэб-старонак. 991 01:02:50,520 --> 01:02:53,730 Я збіраюся ісці наперад і проста скапіяваць і ўставіць гэты код у гэты файл. 992 01:02:53,730 --> 01:02:57,210 Я збіраюся ісці наперад і захаваць яго на маім працоўным стале, 993 01:02:57,210 --> 01:03:01,220 і я хачу захаваць гэта як hello.html, 994 01:03:01,220 --> 01:03:03,840 і цяпер файл з імем hello.html. 995 01:03:03,840 --> 01:03:05,690 Вось ён на маім працоўным стале. 996 01:03:05,690 --> 01:03:11,130 А цяпер дазвольце мне перайсці ў браўзэры і перацягнуць файл у браўзэры. 997 01:03:11,130 --> 01:03:14,060 І вуаля, вось мой самы першы вэб-старонкі. 998 01:03:14,060 --> 01:03:17,340 Звярніце ўвагу, што назвы ўкладкі Прывітанне, свет ў тэг загалоўка, 999 01:03:17,340 --> 01:03:20,040 і заўважце, што Добры дзень, свет ёсць цела маё вэб-старонкі, 1000 01:03:20,040 --> 01:03:22,190 і у-у-ух, я ў Інтэрнэце. 1001 01:03:22,190 --> 01:03:24,700 >> Я не сапраўды, маюць рацыю, таму што гэты файл не ў інтэрнэце. 1002 01:03:24,700 --> 01:03:28,330 Гэта здараецца, на мой лакальны жорсткі дыск у дадзены канкрэтны шлях. 1003 01:03:28,330 --> 01:03:32,720 Але ідэя тая ж. Усё, што нам цяпер трэба, гэта вэб-сервер, да якога, каб загрузіць яго. 1004 01:03:32,720 --> 01:03:37,410 Але спачатку давайце на самай справе ўвесці трохі больш складаны і крыху больш стылізацыі. 1005 01:03:37,410 --> 01:03:39,890 Гэта проста, калі сумна, вэб-старонкі. 1006 01:03:39,890 --> 01:03:41,990 Аказваецца, ёсць і іншыя тыпы тэгі мы можам выкарыстоўваць. 1007 01:03:41,990 --> 01:03:45,530 Напрыклад, тут, у жоўтым Я прадставіў 2 новых тэгаў. 1008 01:03:45,530 --> 01:03:49,630 Мы не будзем гуляць шмат з гэтым сёння, але заўважыў, што спасылка тэга 1009 01:03:49,630 --> 01:03:52,520 неяк вонкава адрозніваецца ад усяго астатняга. 1010 01:03:52,520 --> 01:03:55,370 Спасылка тэгі бярэ тое, што называюць атрыбутамі, 1011 01:03:55,370 --> 01:03:59,770 і атрыбутам з'яўляецца тое, што змяняе паводзіны тэга. 1012 01:03:59,770 --> 01:04:03,840 У дадзеным выпадку гэта не лепшы выбар імёнаў, спасылкі, таму што гэта збольшага бессэнсоўна, 1013 01:04:03,840 --> 01:04:11,590 але гэтая спасылка тэг кажа, па сутнасці, уключае файл пад назвай styles.css ўнутры маёй вэб-старонцы. 1014 01:04:11,590 --> 01:04:15,400 Вы можаце думаць пра гэта як аналагічны C # ўключае ў дырэктыве. 1015 01:04:15,400 --> 01:04:19,650 Styles.css мае на ўвазе іншай мовы наогул, што мы не будзем гуляць з сённяшняга дня, 1016 01:04:19,650 --> 01:04:23,790 але гэта для эстэтыкі: памеры шрыфта, колеру, водступы, водступы, поля 1017 01:04:23,790 --> 01:04:26,040 і ўсё такое падрабязней эстэтыкі. 1018 01:04:26,040 --> 01:04:28,820 Між тым, тэг функцыянальна падобныя, 1019 01:04:28,820 --> 01:04:33,140 Але замест таго, ўключаюць CSS, што мова, ён уключае ў сябе іншую мову, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Такім чынам, іншымі словамі, з гэтымі 2 тэгі я ў канчатковым выніку будзе магчымасць напісаць сваю ўласную вэб-старонку 1021 01:04:37,810 --> 01:04:41,490 але і цягнуць у код, што я ці хтосьці іншы напісаў 1022 01:04:41,490 --> 01:04:44,350 так што мы можам стаяць на плечы іншых людзей, мы можам практыкаваць добры дызайн, 1023 01:04:44,350 --> 01:04:46,120 вынясенне агульнага кода. 1024 01:04:46,120 --> 01:04:49,090 Калі ў мяне ёсць 10 розных вэб-старонак, гэта азначае, што некаторыя з маіх эстэтыка 1025 01:04:49,090 --> 01:04:52,490 можна вынесці, вельмі падобны на № ўключаюць у асобны файл. 1026 01:04:52,490 --> 01:04:54,420 Такім чынам, мы як туды дабрацца. 1027 01:04:54,420 --> 01:04:57,180 Але давайце на самай справе спачатку зрабіць нешта больш цікавае з гэтым файлам. 1028 01:04:57,180 --> 01:05:01,110 >> Зноў жа, гэта толькі TextEdit. Я тэхнічна не ў Інтэрнэце, але мы дабяромся туды. 1029 01:05:01,110 --> 01:05:04,910 Я хацеў бы зрабіць Прывітанне, свет крыху смялей, чым ён ёсць. 1030 01:05:04,910 --> 01:05:10,890 Так што прывітанне, давай калі заўгодна казаць для смелых. 1031 01:05:10,890 --> 01:05:15,910 Зноў жа, гісторыя тая ж: Прывітанне, коска, пачаць рабіць гэта смелы, 1032 01:05:15,910 --> 01:05:19,730 тады свет становіцца тоўстым шрыфтам, а гэта значыць спыніць друк гэтым тоўстым шрыфтам. 1033 01:05:19,730 --> 01:05:24,020 Дазвольце мне ісці наперад і захаваць свой файл, вярніцеся да Chrome, я буду павелічэння менавіта так мы бачым гэта лепш, 1034 01:05:24,020 --> 01:05:27,870 і перазагрузіць, і вы ўбачыце, што свет зараз тоўстым шрыфтам. 1035 01:05:27,870 --> 01:05:31,810 Вэб гэта ўсё аб гіперспасылкі, так што давайце ісці наперад і рабіць гэта: 1036 01:05:31,810 --> 01:05:38,550 мой каханы сайт, скажам, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Захаваць, перазагрузіць. Добра. Там ёсць пара праблем у цяперашні час, акрамя агіднасці на сайце. 1038 01:05:43,810 --> 01:05:47,310 1, я ўпэўнены, я ўдарыў Калі ласка, увядзіце тут. І я зрабіў. 1039 01:05:47,310 --> 01:05:51,590 Я не толькі ўдарыў Enter, я таксама водступы, практыкуючы тое, што мы прапаведавалі аб стылі, 1040 01:05:51,590 --> 01:05:54,930 але мае знаходзіцца побач з светам. 1041 01:05:54,930 --> 01:05:58,410 Дык чаму ж гэта? Браўзэры толькі тое, што вы кажаце ім зрабіць. 1042 01:05:58,410 --> 01:06:04,010 Я не сказаў браўзэра, "Break ліній тут. Устаўце абзаца тут". 1043 01:06:04,010 --> 01:06:07,820 Такім чынам, браўзэр, гэта не мае значэння, калі я ударыў Вяртанне ў 30 разоў, 1044 01:06:07,820 --> 01:06:10,820 ён па-ранейшаму збіраецца паставіць маю побач з светам. 1045 01:06:10,820 --> 01:06:15,930 Што мне сапраўды трэба зрабіць, тут сказаць нешта накшталт
, уставіць разрыў радка. 1046 01:06:15,930 --> 01:06:17,940 >> А на самай справе, разрыў радка гэта свайго роду дзіўныя рэчы 1047 01:06:17,940 --> 01:06:21,650 таму што вы не можаце сапраўды пачаць пераезд у іншай лініі, то нешта зрабіць, 1048 01:06:21,650 --> 01:06:25,380 а затым спыніць пераход на новы радок. Гэта свайго роду атамарнага аперацыі. 1049 01:06:25,380 --> 01:06:28,140 Вы альбо рабіць гэта ці не. Вы патрапілі Калі ласка, увядзіце або няма. 1050 01:06:28,140 --> 01:06:33,390 Так бр крыху іншай тэг, і таму мне трэба разабрацца як адкрыць і закрыць яго 1051 01:06:33,390 --> 01:06:35,230 ўсё адразу. 1052 01:06:35,230 --> 01:06:37,500 Сінтаксіс, што гэта. 1053 01:06:37,500 --> 01:06:41,760 Тэхнічна, вы маглі б зрабіць нешта накшталт гэтага ў некаторых версіях HTML, 1054 01:06:41,760 --> 01:06:45,600 Але гэта проста глупства, таму што няма ніякіх прычын для запуску і прыпынку нешта 1055 01:06:45,600 --> 01:06:48,420 калі вы можаце замест гэтага зрабіць усё адразу. 1056 01:06:48,420 --> 01:06:52,310 Зразумейце, што HTML5 не строга патрабуе гэтага чорта, 1057 01:06:52,310 --> 01:06:55,410 так што вы ўбачыце падручнікі і інтэрнэт-рэсурсы, якія не маюць яго, 1058 01:06:55,410 --> 01:06:59,780 але для добрай мерай давайце практыкаваць сіметрыі, якія мы бачылі да гэтага часу. 1059 01:06:59,780 --> 01:07:02,870 Гэта азначае, што тэг з'яўляецца як адкрываюцца і зачыняюцца. 1060 01:07:02,870 --> 01:07:05,220 Так што цяпер дазвольце мне захаваць мая справа, вярнуцца сюды. 1061 01:07:05,220 --> 01:07:10,240 Так, гэта пачынае выглядаць лепш, за выключэннем Web я ведаю, гэта свайго роду інтэрактыўным, 1062 01:07:10,240 --> 01:07:13,610 і ўсё ж YouTube тут, здаецца, не прывядзе ні да чаго. 1063 01:07:13,610 --> 01:07:17,560 Гэта таму, што, хоць яна выглядае як спасылку, браўзэр не ведае, што само па сабе, 1064 01:07:17,560 --> 01:07:20,670 так што я павінен сказаць браўзэру, што гэта спасылка. 1065 01:07:20,670 --> 01:07:22,620 >> Спосабам зрабіць гэта з'яўляецца выкарыстанне тэга: 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 і дазвольце мне перамясціць гэта новая лінія проста так, гэта крыху больш чытэльным, 1069 01:07:38,490 --> 01:07:40,060 і я буду скарачаць памер шрыфта. 1070 01:07:40,060 --> 01:07:43,890 Ці магу я зрабіць яшчэ? Няма. Там збіраецца быць гэтая дыхатамія. 1071 01:07:43,890 --> 01:07:46,760 Гэты тэг, тэг прывязкі, сапраўды мае атрыбут, 1072 01:07:46,760 --> 01:07:52,900 якія змяняюць яго паводзіны, і значэнне гэтага атрыбуту па-відаць URL YouTube. 1073 01:07:52,900 --> 01:07:56,380 Але звярніце ўвагу на тое, што дыхатамія толькі таму, што гэта URL вы збіраецеся, 1074 01:07:56,380 --> 01:08:01,020 гэта не значыць, што павінна быць слова, якое вы падкрэсленне і робіць спасылку. 1075 01:08:01,020 --> 01:08:03,960 Хутчэй за ўсё, што можа быць нешта накшталт гэтага. 1076 01:08:03,960 --> 01:08:10,870 Такім чынам, я павінен сказаць, спыніць гэтае слова спасылку з дапамогай зачыняе тэга якар. 1077 01:08:10,870 --> 01:08:12,650 Звярніце ўвагу, што я не раблю гэтага. 1078 01:08:12,650 --> 01:08:15,890 1, гэта будзе проста марнаванне часу кожнага, і ў гэтым няма неабходнасці. 1079 01:08:15,890 --> 01:08:19,290 >> Каб закрыць тэг, вы толькі згадаць імя тэга зноў. 1080 01:08:19,290 --> 01:08:21,800 Вы не кажучы ўжо аб любым з атрыбутаў. 1081 01:08:21,800 --> 01:08:26,189 Так што давайце эканоміць, што вярнуся. Добра, вуаля, цяпер гэта сіні і гіперспасылкамі. 1082 01:08:26,189 --> 01:08:29,430 Калі я націскаю, я на самой справе пайсці ў YouTube. 1083 01:08:29,430 --> 01:08:32,529 Таму, нават калі мой вэб-старонкі не ў інтэрнэце, гэта па меншай меры HTML, 1084 01:08:32,529 --> 01:08:37,930 і калі мы дазволім Інтэрнэт даганяць, мы на самай справе ў канчатковым выніку тут на youtube.com. 1085 01:08:37,930 --> 01:08:40,670 І я магу вярнуцца і вось мае вэб-старонкі. Але зьвярніце ўвагу на гэта. 1086 01:08:40,670 --> 01:08:43,120 Калі вы калі-небудзь атрымаў спам або фішынг-атакай, 1087 01:08:43,120 --> 01:08:45,850 Зараз у вас ёсць магчымасць ужо праз пяць хвілін, каб зрабіць тое ж самае. 1088 01:08:45,850 --> 01:08:50,920 Мы можам пайсці сюды і зрабіць нешта накшталт www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 або што адрывістыя сайт, а затым вы можаце сказаць пацвердзіць свой PayPal рахунак. 1090 01:08:59,319 --> 01:09:04,840 [Смяецца] І зараз гэта будзе ісці ў badguy.com, які я не збіраюся націснуць на 1091 01:09:04,840 --> 01:09:08,000 таму што я паняцця не маю, што прыводзіць. [Смех] 1092 01:09:08,000 --> 01:09:10,859 >> Але зараз у нас ёсць магчымасць на самай справе ў канчатковым выніку там. 1093 01:09:10,859 --> 01:09:12,640 Такім чынам, мы сапраўды толькі пачынае драпаць паверхню. 1094 01:09:12,640 --> 01:09:15,830 Мы не праграмавання як такога, мы пішам на мове разметкі. 1095 01:09:15,830 --> 01:09:18,569 Але як толькі мы акругляецца нашу лексіку ў HTML, 1096 01:09:18,569 --> 01:09:21,520 мы ўвядзем PHP, фактычна мова праграмавання 1097 01:09:21,520 --> 01:09:26,859 , Што дазволіць нам генераваць HTML аўтаматычна генераваць CSS аўтаматычна, 1098 01:09:26,859 --> 01:09:29,430 так што мы можам пачаць у сераду для рэалізацыі, скажам, 1099 01:09:29,430 --> 01:09:31,700 нашай ўласнай пошукавай сістэмы і многае іншае. 1100 01:09:31,700 --> 01:09:34,770 Але пра гэта на працягу некалькіх дзён. Мы ўбачымся. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]