1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Linggo 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvard University] 3 00:00:04,730 --> 00:00:07,490 [Ito ay CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Ayos lang. Maligayang pagbabalik. Ito ay CS50, at ito ay ang simula ng linggo 7. 5 00:00:12,280 --> 00:00:14,690 Ang ilang mga maliit na mga anunsyo: 6 00:00:14,690 --> 00:00:18,150 Pset5 na nagaganap ngayon, o sa lalong madaling panahon ay magiging, 7 00:00:18,150 --> 00:00:21,590 at hayaang sabihin sa akin, medyo totoo lang, ito ay may posibilidad na kasama ng mas mapaghamong 8 00:00:21,590 --> 00:00:24,460 ng set ng problema ang kurso, kaya hayaan mo akong banggitin ito ngayon 9 00:00:24,460 --> 00:00:28,190 sa gayon na ang linggo na ito higit pa sa kailanman hindi mo maghintay hanggang, sabihin nating, Miyerkules gabi 10 00:00:28,190 --> 00:00:29,920 o Huwebes gabi sa sumisid. 11 00:00:29,920 --> 00:00:32,369 Ito ay talagang isang kawili-wiling pset. Sa tingin namin ito ay masaya. 12 00:00:32,369 --> 00:00:36,110 Kung iyong aktwal na ito makakuha ng ganap na tama at pagkatapos hamunin ang tinatawag na Big Board, 13 00:00:36,110 --> 00:00:39,830 magkakaroon ka ng pagkakataon upang tumugma ang mga wits kasama ang ilan sa mga staff ng kurso 14 00:00:39,830 --> 00:00:41,620 at ang ilan ng iyong mga kaklase. 15 00:00:41,620 --> 00:00:44,670 Ano Ang Big Board ay sa sandaling mayroon kang ang iyong spell-checker pagtatrabaho, 16 00:00:44,670 --> 00:00:48,860 magagawa mong pumunta sa cs50.net pagkatapos ng pagpapatakbo ng isang command, 17 00:00:48,860 --> 00:00:52,430 pulos sumali sa, at pagkatapos ay ang halaga ng oras at ang halaga ng RAM at higit pa 18 00:00:52,430 --> 00:00:56,130 na ginamit mo sa iyong pagpapatupad ay exhibited dito sa home page ng kurso. 19 00:00:56,130 --> 00:00:59,740 Mapapansin mo na ang isang buong grupo ng mga kasamahan dito ay nakalista bilang kawani 20 00:00:59,740 --> 00:01:04,220 dahil sa ibabaw ng katapusan ng linggo, ang staff ng naisip magiging masaya magparamihan. 21 00:01:04,220 --> 00:01:07,390 Kaya Napagtanto na ang layunin dito ay hindi lumalo sa mga tauhan. 22 00:01:07,390 --> 00:01:09,790 Kahit Ako lamang dito sa numero 13. 23 00:01:09,790 --> 00:01:13,790 Pulos sumali sa, ngunit ito ay isang pagkakataon upang makita lamang kung paano maliit na RAM 24 00:01:13,790 --> 00:01:16,790 at kung paano ilang CPU segundo maaari mong gamitin ang vis-a-vis ilan sa iyong mga kaklase. 25 00:01:16,790 --> 00:01:20,540 >> At makikita ko umamin na Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 kasalukuyang nasa numero 1 posisyon bilang isa ng ang TFs, 27 00:01:23,750 --> 00:01:28,120 ito ay isang pagpapatupad na tinatawag naming hindi posible 28 00:01:28,120 --> 00:01:32,700 ibinigay na siya ay gumagamit ng halos 0 RAM at halos 0 segundo para sa paglo-load. 29 00:01:32,700 --> 00:01:35,670 Kaya kami na ang bahala ng Kevin offline. [Tawa] 30 00:01:35,670 --> 00:01:40,950 Mayroong ilang mga kasanayan na Kevin ay paglalagay ng sa test dito. 31 00:01:40,950 --> 00:01:45,280 Isa ng mga bagay na naisip naming gawin ngayon ay CS50x ay isang linggo sa pag-unlad, 32 00:01:45,280 --> 00:01:49,520 at guys bilang magkano ang isang bahagi ng eksperimentong ito ng mga mag-aaral ay. 33 00:01:49,520 --> 00:01:53,720 Namin ang nagtanong sa kanila bilang bahagi ng kanilang pset0, kung saan ay katulad sa magsumite ng isang proyekto ng scratch 34 00:01:53,720 --> 00:01:58,280 ng interes sa kanila - isang laro, isang interactive na piraso ng sining, ang isang animation, o ang tulad ng - 35 00:01:58,280 --> 00:02:03,700 1 - 2-minutong video, kung nais nila, na sinasabi kumusta sa mundo at na aktwal na sila ay. 36 00:02:03,700 --> 00:02:06,780 Akala ko Gusto kong ibahagi sa iyo ng ilang mga video na isinumite sa gayon ngayon 37 00:02:06,780 --> 00:02:10,759 dahil para sa amin, sa kawani ng hindi bababa sa, talagang ay kapana-panabik na 38 00:02:10,759 --> 00:02:14,220 at kagila upang makita ang mga ito ng mga tao mula sa buong mundo - Mga bansa sa buong mundo - 39 00:02:14,220 --> 00:02:18,160 tuning sa, ng lahat ng mga bagay, sa isang kurso ng computer science sa Internet, 40 00:02:18,160 --> 00:02:20,410 kung ito ay dahil gusto nilang patuloy ang kanilang sariling mga pag-aaral, 41 00:02:20,410 --> 00:02:22,300 nais nilang gumawa ng kanilang mga karera sa isang bagong direksyon, 42 00:02:22,300 --> 00:02:24,390 gusto nila upang punan gaps sa kanilang sariling kaalaman, 43 00:02:24,390 --> 00:02:27,190 kaya ilang ng parehong mga kadahilanan na iyong guys marahil ay dito. 44 00:02:27,190 --> 00:02:31,090 >> Kaya ako magbibigay sa iyo ng isang tulad ng mag-aaral dito. Maaari mong taasan ang dami ng lang ng kaunti. 45 00:02:31,090 --> 00:02:35,520 Narito ang isa sa 1-minutong pagsusumite ng aming mga mag-aaral. 46 00:02:35,520 --> 00:02:40,380 Kumusta, mundo. Ako ay isang mag-aaral ng pang-industriya engineering dito sa Malaga, Espanya. 47 00:02:40,380 --> 00:02:45,840 Ako nasasabik tungkol sa online na kurso dahil gustung-gusto ko ang computer science, ko talagang gawin, 48 00:02:45,840 --> 00:02:48,880 at Pinahahalagahan ko tunay na nakukuha ko upang galugarin ito. 49 00:02:48,880 --> 00:02:51,940 At ang katunayan na maaari kong malaman ang parehong lahat ng ka guys gawin 50 00:02:51,940 --> 00:02:57,040 ngunit sa halip ng pagiging sa Harvard Kasama ko sa Malaga, kung paano kahanga-hangang ay na? 51 00:02:57,040 --> 00:03:02,040 Well, Ako Fernando, at ito ay CS50. Tingnan ang mga ka guys. 52 00:03:02,040 --> 00:03:07,100 [Tawa] isa pang clip namin lalo na gusto, makikita mo na Ingles ito ginoo ay hindi kaya malakas. 53 00:03:07,100 --> 00:03:11,520 Mukhang niya ito machine isinalin, kaya ang pagsasalin mismo ng kaunti hindi lubos na pagsisisi, 54 00:03:11,520 --> 00:03:15,790 ngunit ito ay isa sa aming mga paborito sa gayon ay malayo pati na rin. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Kumusta, mundo. [Nagsasalita sa wikang Hapon] 57 00:03:32,370 --> 00:03:39,830 [Ako ay upang batiin sa Japanese dahil ang aking Ingles ay napaka-maaasahan.] 58 00:03:39,830 --> 00:03:45,380 [Ko na naihatid ang mensahe sa iyo mula sa lungsod ng Gifu, Japan.] 59 00:03:45,380 --> 00:03:49,820 [Ko ay maaaring maging isang mag-aaral para sa unang pagkakataon sa 20 taon, bilang ay maaaring makita.] 60 00:03:49,820 --> 00:03:54,640 [Ako ay labis na nagpapasalamat sa Harvard University na ibinigay sa akin ang pagkakataong ito at edX.] 61 00:03:54,640 --> 00:04:01,510 [Golf gitara at aking paboritong bagay na tumatakbo.] [Tawa] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Bakit mo sa tingin ko ay sinusubukan na dumalo ng cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Harvard University, ito ay ang aking pananabik.] 65 00:04:14,990 --> 00:04:19,740 [Lalo na kung ako malayong presensya nakatira sa Japan.] 66 00:04:19,740 --> 00:04:26,680 [Nais kong subukan kaagad na kamalayan ng pagkakaroon ng tulad edX kailan.] 67 00:04:26,680 --> 00:04:32,500 [Huwag sa tingin mo kaya hindi mo na may kaugnayan sa edad ng pag-aaral I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 ang aking pananabik. Ang pangalan ko ay Kazu, at ito ay cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [palakpakan at pagpalakpak] 70 00:04:43,090 --> 00:04:49,220 Isinumiteng ito dito mula sa isang tao ang isa pang paboritong ng sa atin. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google ito kung hindi ka pamilyar na may ganitong meme. 72 00:04:55,380 --> 00:05:01,480 >> At pagkatapos ay bilang wakas, ng ilang mga iba na Nakakuha nai-post na marahil manalo ang karapat-dapat sambahin award. 73 00:05:01,480 --> 00:05:06,820 [Mag-aaral] Aww! >> [Malan] Magkakaroon kami upang makinig. Ito ay maikli, kaya makinig malapit. 74 00:05:08,580 --> 00:05:11,150 [Babae speaker] Ano ang iyong pangalan? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Babae speaker] Ano ito? >> [Giggles] CS50. [Tawa] 76 00:05:16,120 --> 00:05:19,510 [Malan] niya ng dalawang tumatagal, bagaman. 77 00:05:19,510 --> 00:05:22,240 Narito pumunta namin, ang huling. 78 00:05:23,030 --> 00:05:26,980 Ang pangalan ko ay Louie, at ito ay CS50. 79 00:05:26,980 --> 00:05:30,250 [Tawa] ito pagkatapos ay CS50x. 80 00:05:30,250 --> 00:05:33,230 Salamat sa lahat ng mga mo habang sumusunod na kasama sa bahay 81 00:05:33,230 --> 00:05:35,620 na pagsalo sa gayon ay malayo. 82 00:05:35,620 --> 00:05:39,510 Ngayon, pagtibayin namin ang aming mga talakayan ng mga istraktura ng data, 83 00:05:39,510 --> 00:05:41,160 hindi bababa sa ilan sa mga pinaka-pangunahing, 84 00:05:41,160 --> 00:05:44,760 at pagkatapos ay ipagpapatuloy namin ang aming pag-uusap tungkol sa HTML at web programming. 85 00:05:44,760 --> 00:05:48,520 Sa katunayan, namin na ginugol ang nakaraang ilang pitong linggo naghahanap sa batayan ng programming - 86 00:05:48,520 --> 00:05:50,450 algorithm, kaayusan ng mga data, at ang mga tulad ng - 87 00:05:50,450 --> 00:05:53,050 at C, bilang na maaari mong naranasan sa gayon ay malayo, 88 00:05:53,050 --> 00:05:57,060 ay hindi nangangahulugang ang pinaka-naa-access ng mga wika 89 00:05:57,060 --> 00:05:59,090 na ipatupad ang ilan sa mga ideya. 90 00:05:59,090 --> 00:06:01,880 At kaya simula sa linggong ito at sa susunod na linggo at pagkatapos ay ang mga sumusunod, 91 00:06:01,880 --> 00:06:07,110 makikita namin sa wakas makakapag-transition mula sa C, na kung saan ay karaniwang kilala bilang isang medyo mababang antas na wika, 92 00:06:07,110 --> 00:06:11,190 sa mga bagay na mas mataas na antas, kasama ng mga ito PHP, JavaScript, at ang mga tulad ng, 93 00:06:11,190 --> 00:06:14,850 kung saan ipapakita namin ang gumuhit kapag ang parehong mga aralin na aming natutunan sa nakalipas na ilang linggo, 94 00:06:14,850 --> 00:06:19,430 ngunit makikita mo na ang deklarasyon ng mga bagay tulad ng array at hash na mga talahanayan at paghahanap at pag-uuri-uri 95 00:06:19,430 --> 00:06:23,370 maging kaya mas madali dahil ang mga mga wika na mismo magsisimula kaming gamit 96 00:06:23,370 --> 00:06:25,290 ay magiging mas malakas na. 97 00:06:25,290 --> 00:06:27,410 Ngunit una, isang application ng mga puno. 98 00:06:27,410 --> 00:06:30,240 Napaka-karaniwang mga araw na ito kailangang i-compress ang impormasyon. 99 00:06:30,240 --> 00:06:34,770 Sa anong konteksto ay gusto mong i-compress ang ilang mga uri ng digital na impormasyon? 100 00:06:37,190 --> 00:06:39,670 >> Oo. >> [Mag-aaral] Kapag kailangan mo upang ipadala ang mga ito sa ibabaw ng Web. 101 00:06:39,670 --> 00:06:41,450 Oo, kung nais mong magpadala ng isang bagay sa ibabaw ng Web. 102 00:06:41,450 --> 00:06:44,950 Kung nais mong i-download ang isang malaking file, mainam kung may isang taong sa kabilang dulo 103 00:06:44,950 --> 00:06:48,760 ay naka-compress na file gamit ang format ng zip o isang bagay tulad na 104 00:06:48,760 --> 00:06:53,760 kaya ka pagpapadala ng mga mas kaunti bit kaysa sa maaaring kung hindi man ay ipinadala. 105 00:06:53,760 --> 00:06:55,500 Kaya kung paano mo compress ang impormasyon? 106 00:06:55,500 --> 00:07:00,540 Sa kahulihan babagsak ito sa paggamit ng mas kaunti bit kaysa ay kinakailangan sa pamamagitan ng default. 107 00:07:00,540 --> 00:07:03,220 Ngunit ito ay uri ng hindi pangkaraniwang bagay dahil sa tingin pabalik sa linggo 0 at 1 108 00:07:03,220 --> 00:07:07,370 kapag usapan natin ang tungkol ASCII at binary at usapan natin ang tungkol sa ASCII sa partikular na 109 00:07:07,370 --> 00:07:10,690 ng paggamit ng 8 bits upang kumatawan ang mga titik ng alpabeto 110 00:07:10,690 --> 00:07:16,120 kaya na titik ay kinakatawan ng 65, lowercase ay ang bilang 97, 111 00:07:16,120 --> 00:07:21,210 at gayunpaman ay kumakatawan sa iyo ng 65 o 97, gumagamit ka ng 7 o 8 bit. 112 00:07:21,210 --> 00:07:24,120 Subalit catch ay na may ilang mga titik sa Ingles alpabeto 113 00:07:24,120 --> 00:07:26,230 na hindi tulad ng popular na bilang ng iba. 114 00:07:26,230 --> 00:07:31,600 Z ay hindi ang lahat ng popular na, Q ay hindi ang lahat ng popular na, ngunit A at E ay sobrang sikat na. 115 00:07:31,600 --> 00:07:37,280 At pa para sa lahat ng mga sulat na ito, sa pamamagitan ng default ang mundo ay gumagamit ng parehong bilang ng mga bits, lamang 8. 116 00:07:37,280 --> 00:07:42,690 Kaya hindi ito ay mas matalinong kung sa halip ng paggamit ng 8 bits para sa bawat titik, 117 00:07:42,690 --> 00:07:47,440 kahit na ang pinaka-madalang ginagamit tulad ng T at Z, 118 00:07:47,440 --> 00:07:51,910 paano kung ginamit namin ang mas kaunting mga piraso para sa A at E at S at ang pinaka-popular na mga titik 119 00:07:51,910 --> 00:07:55,000 at ginagamit ng higit pang mga piraso para sa mga hindi gaanong popular na mga titik, 120 00:07:55,000 --> 00:07:57,770 ang ideya natin na-optimize para sa karaniwang pagkakataon, 121 00:07:57,770 --> 00:08:01,160 na isang tema sa computer science ng sinusubukang i-optimize ang kung ano ang nangyayari mangyari ang pinaka 122 00:08:01,160 --> 00:08:05,310 at gastusin ng konting oras, isang maliit na mas maraming espasyo sa mga bagay na, oo, maaaring mangyari 123 00:08:05,310 --> 00:08:07,680 ngunit hindi kinakailangang madalas. 124 00:08:07,680 --> 00:08:09,330 Kaya natin ang isang halimbawa. 125 00:08:09,330 --> 00:08:12,610 >> Ipagpalagay na gusto naming upang i-encode ang impormasyon medyo mahusay. 126 00:08:12,610 --> 00:08:15,090 Maaari mong lumaki alam ng kaunti ng isang bagay tungkol sa Morse code, 127 00:08:15,090 --> 00:08:17,450 at logro ay hindi mo alam ang aktwal na code, 128 00:08:17,450 --> 00:08:21,750 ngunit maaari mong isipin ang na ito ng hindi bababa sa ito serye ng mga tuldok at gitling. 129 00:08:21,750 --> 00:08:26,640 Ito ay isang medyo mahusay coding, at paunawa na ang pinakasikat na titik - halimbawa, E - 130 00:08:26,640 --> 00:08:28,980 gumagamit ang pinakamaikling ng beeps. 131 00:08:28,980 --> 00:08:31,740 Morse code ay ang lahat tungkol pugak-pugak-pugak-pugak-pugak-pugak at may hawak ng mga tono 132 00:08:31,740 --> 00:08:34,799 alinman sa para sa maikling tagal ng panahon o mahabang tagal ng panahon. 133 00:08:34,799 --> 00:08:40,330 E, bilang naitala sa pamamagitan ng ang tuldok, ay isang napaka-maikling pugak, pugak, at na nais kumatawan E. 134 00:08:40,330 --> 00:08:43,960 Sa pamamagitan ng kaibahan, ang T ay isang mas mahabang pugak, tulad ng pugak [prolongs tunog], 135 00:08:43,960 --> 00:08:45,710 at na kumakatawan sa T. 136 00:08:45,710 --> 00:08:48,840 Ngunit iyon pa rin medyo maikling dahil, sa pamamagitan ng kaibahan, kung tiningnan mo ang Z, 137 00:08:48,840 --> 00:08:52,690 upang ipahayag Z kang pumunta pugak, pugak [na tunog], pugak, pugak [mas maikli tunog]. 138 00:08:52,690 --> 00:08:55,360 Kaya na dahil ito ay mas mababa karaniwang. 139 00:08:55,360 --> 00:08:58,150 Ngunit ang gotcha dito ay ang Morse code bit flawed 140 00:08:58,150 --> 00:09:00,610 na ito ay hindi agad decodable. 141 00:09:00,610 --> 00:09:07,350 Halimbawa, ipagpalagay na maririnig mo sa ilang mga dulo ng wire ang pugak [maikling], pugak [mahaba]. 142 00:09:07,350 --> 00:09:12,480 Anong mensahe ay ko lang ng? Isang tuldok at isang gitling. Ano na kumakatawan? 143 00:09:12,480 --> 00:09:15,330 [Mag-aaral] A. >> [Malan] Siguro. 144 00:09:15,330 --> 00:09:18,270 Din ito ng E na sinundan sa pamamagitan ng T. 145 00:09:18,270 --> 00:09:23,390 Sa ibang salita, Morse code, kahit na ito ay Pinakikinabangan ito prinsipyo ng pag-optimize ng sulok kaso, 146 00:09:23,390 --> 00:09:26,250 ito ay hindi bang ipahiram sa mismong sa agarang decodability. 147 00:09:26,250 --> 00:09:29,850 Iyon ay, ang mga tao na pagdinig o pagtanggap ng mga tuldok at gitling 148 00:09:29,850 --> 00:09:34,540 ay sa paanuman malaman kung saan ang mga break sa pagitan ng mga titik, 149 00:09:34,540 --> 00:09:39,660 dahil kung hindi mo alam kung saan mga break, maaaring mo lituhin A para sa ET o vice versa. 150 00:09:39,660 --> 00:09:43,880 >> Kaya kung ano ang maaari mong gawin? Sa Morse code ay maaaring mo lamang i-pause sa pagitan ng bawat isa sa ang mga titik. 151 00:09:43,880 --> 00:09:47,660 Ngunit pag-pause uri ng counter sa buong punto ng pagpapabilis ng mga bagay up. 152 00:09:47,660 --> 00:09:52,880 Kaya kung ano kung sa halip namin dumating na may code kung saan nagkaroon ng hindi masamang sitwasyon na ito 153 00:09:52,880 --> 00:09:56,570 kung saan E ay isang prefix, halimbawa, ng A - 154 00:09:56,570 --> 00:10:00,020 sa ibang salita, kung maaari naming tiyakin na ang mga pattern pa rin ang maikling para sa mga popular na mga titik 155 00:10:00,020 --> 00:10:04,850 mahaba para sa mga hindi gaanong popular na mga titik, ngunit walang posibleng pagkalito? 156 00:10:04,850 --> 00:10:08,930 Ang isang tao sa pamamagitan ng pangalan ng Huffman taon na ang nakakaraan imbento scheme na ito na tinatawag na Huffman coding 157 00:10:08,930 --> 00:10:12,390 na aktwal na Pinakikinabangan isa ng ang istraktura ng data namin na ginugol ng isang bit ng oras ng pakikipag-usap tungkol sa 158 00:10:12,390 --> 00:10:16,560 ang nakaraang linggo na ito, na ng mga puno, binary puno partikular - 159 00:10:16,560 --> 00:10:19,710 puno ng kahulugan ng binary na ito ay walang higit pa kaysa sa 2 bata. 160 00:10:19,710 --> 00:10:22,720 Siguro Ito ay may kaliwa anak, maaaring may karapatan na bata, at na ito. 161 00:10:22,720 --> 00:10:26,510 Kaya ipagpalagay na para lamang sa ang kapakanan ng talakayan na may gustong magpadala ng mensahe 162 00:10:26,510 --> 00:10:31,270 na ganito ang hitsura. Kumpletong katarantaduhan ngunit ito ay binubuo ng Bilang, BS, CS, DS, at Es. 163 00:10:31,270 --> 00:10:34,890 At kung aktwal mong bilangin ang lahat ng Bilang, BS, CS, DS, at Es 164 00:10:34,890 --> 00:10:36,870 at pagkatapos ay hatiin sa pamamagitan ng kabuuang bilang ng mga titik, 165 00:10:36,870 --> 00:10:42,710 ito maliit na chart dito sabi ni na ang 45% ng ang mga titik ay Es, 20% Bilang, 166 00:10:42,710 --> 00:10:45,010 10% ng BS, at iba pa. 167 00:10:45,010 --> 00:10:47,330 Kaya sa ibang salita, ipinapalagay na ang naka-quote na string doon 168 00:10:47,330 --> 00:10:49,080 lamang ang ilang mga mensahe na nais mong ipadala. 169 00:10:49,080 --> 00:10:52,180 Ito ay nangyayari na bagay na walang kapararakan lamang sa gayon maaari naming gamitin bilang ilang mga titik hangga't maaari, 170 00:10:52,180 --> 00:10:55,220 ngunit ito talaga ang kaso na ang E nananatiling ang pinaka tanyag na, 171 00:10:55,220 --> 00:11:01,450 at B at C ang hindi bababa sa popular na, hindi bababa sa ng mga 5 mga titik ng alpabeto. 172 00:11:01,450 --> 00:11:04,040 Kaya kung paano namin pumunta tungkol sa darating na up na may pag-encode, 173 00:11:04,040 --> 00:11:08,430 isang binary na pag-encode, isang pattern ng 0s at 1s para sa bawat isa sa mga sulat na ito 174 00:11:08,430 --> 00:11:14,820 sa paraan na ang E ay isang maikling pattern at maaaring B at C ay bahagyang mas mahaba pattern, 175 00:11:14,820 --> 00:11:19,270 muli, ang ideya sa na nais naming gumamit ng mas kaunti bit karamihan ng oras 176 00:11:19,270 --> 00:11:21,790 at higit pa na mga bits nang isang beses lamang sa isang habang. 177 00:11:21,790 --> 00:11:26,070 Ayon sa Huffman coding, maaari kang lumikha ng isang gubat ng mga puno. 178 00:11:26,070 --> 00:11:31,190 May uri ng linya kuwento dito na nagsasangkot ng mga puno at din ang proseso ng pagbuo up ang mga ito. 179 00:11:31,190 --> 00:11:32,420 Natin simulan. 180 00:11:32,420 --> 00:11:36,140 >> Ipanukala ko na simulan mo sa gubat na ito, kaya na magsalita, ng 5 puno, 181 00:11:36,140 --> 00:11:38,260 ang bawat isa na kung saan ay isang medyo bobo puno. 182 00:11:38,260 --> 00:11:42,800 Puno ay binubuo ng isang solong node, bilang kinatawan dito sa pamamagitan ng isang lupon. 183 00:11:42,800 --> 00:11:45,310 Kaya sa bawat isa sa mga bagay na ito ay maaaring maging isang C struct 184 00:11:45,310 --> 00:11:50,200 at sa loob ng struct C ay maaaring maging isang Float kumakatawan sa dalas ang bilang ng 185 00:11:50,200 --> 00:11:52,510 at pagkatapos ay maaaring isang pansamantalang trabaho kumakatawan sa sulat. 186 00:11:52,510 --> 00:11:56,470 Kaya sa tingin ng mga node bilang anumang lumang struct C ngunit, sa ngayon, ang mas mataas na antas. 187 00:11:56,470 --> 00:12:01,230 Ito ay isang gubat ng 5 puno, ang bawat isa na lamang magkaroon ng iisang node. 188 00:12:01,230 --> 00:12:06,830 Ano Huffman ipinanukalang na sisimulan namin upang pagsamahin ang mga puno 189 00:12:06,830 --> 00:12:11,140 na may pinakamaliit na bilang ng dalas sa bahagyang mas malaking puno 190 00:12:11,140 --> 00:12:13,490 sa pamamagitan ng pagkonekta sa kanila na may bagong na root node. 191 00:12:13,490 --> 00:12:17,560 Kaya bukod sa ang mga titik dito, mapapansin na ang para sa kaginhawaan ko ang pinagsunod-sunod sa kanila mula kaliwa hanggang kanang, 192 00:12:17,560 --> 00:12:21,420 bagaman na hindi mahigpit na kinakailangan, at paunawa na ang pinakamaliit na node 193 00:12:21,420 --> 00:12:23,930 kasalukuyang 10% at 10%. 194 00:12:23,930 --> 00:12:28,940 Kaya iminungkahi Huffman na bumaybay namin mga 2 pinakamaliit na node sa isang bagong puno 195 00:12:28,940 --> 00:12:34,450 sa pamamagitan ng nagpapakilala sa isang bagong node ng magulang at pagkatapos ay bigyan na magulang ng kaliwang bata at kanang bata 196 00:12:34,450 --> 00:12:37,720 kung saan ay ang B mang kaliwa at C ay mang kanan. 197 00:12:37,720 --> 00:12:41,590 At pagkatapos Huffman higit pang ipinanukalang na natin ngayon lamang sa tingin ng kaliwang anak 198 00:12:41,590 --> 00:12:44,790 sa isa sa mga puno ay laging kinakatawan ng 0 199 00:12:44,790 --> 00:12:47,890 at ang karapatan ng bata ay palaging bilang kinakatawan ng numero 1. 200 00:12:47,890 --> 00:12:50,680 >> Hindi mahalaga kung mo i-flip ang mga ito hangga't ikaw ay pare-pareho. 201 00:12:50,680 --> 00:12:54,650 Kaya ngayon kami ay may apat na mga puno sa gubat na ito. 202 00:12:54,650 --> 00:12:58,050 At sinasabi ko ang apat dahil ngayon ang puno sa kaliwa - 203 00:12:58,050 --> 00:13:00,570 at hindi kaya magkano ng puno sa kamalayan na ito ay lumalaki sa ganitong paraan, 204 00:13:00,570 --> 00:13:05,170 ito ay higit pa tulad ng isang family tree kung saan ngayon ang 0.2 uri ng mga magulang ng dalawang bata - 205 00:13:05,170 --> 00:13:07,930 mapansin na sa magulang namin na iginuhit 0.2. 206 00:13:07,930 --> 00:13:13,370 Idinagdag namin ang mga bilang ng dalas ng dalawang bata at ibinigay ang bagong node ang kabuuang kabuuan. 207 00:13:13,370 --> 00:13:15,310 Kaya ngayon lang namin ulitin ang prosesong ito. 208 00:13:15,310 --> 00:13:19,490 Hanapin ang dalawang pinakamaliit na node at pagkatapos ay sumali sa kanila sa isang bagong puno 209 00:13:19,490 --> 00:13:21,380 at ulitin ang proseso pa. 210 00:13:21,380 --> 00:13:26,390 Sa ngayon mayroon kami ng ilang mga kandidato, 20%, 15%, at isa pang 20%. 211 00:13:26,390 --> 00:13:29,780 Sa kasong ito, mayroon kaming upang basagin ang kurbatang. Maaari naming gawin ito mang. 212 00:13:29,780 --> 00:13:31,540 Dapat lang namin gawin ito nang walang palya. 213 00:13:31,540 --> 00:13:33,760 Sa kasong ito, makikita ko mang pumunta gamit ang isa sa kaliwa, 214 00:13:33,760 --> 00:13:39,880 at ako ngayon sumanib sa 20% at 15% upang bigyan ako ng isang bagong magulang na tinatawag na 35%, 215 00:13:39,880 --> 00:13:46,310 na kaliwang anak ay 0, na ang kanang bata ay 1, at ngayon ay mayroon kaming may tatlong mga puno sa gubat. 216 00:13:46,310 --> 00:13:47,960 Maaari mong marahil makita kung saan ito ay pagpunta. 217 00:13:47,960 --> 00:13:51,150 Kung ulitin namin ito ng ilang higit pang mga beses, kami ay na magkaroon ng isang mas malaking puno, 218 00:13:51,150 --> 00:13:53,900 lahat ng na ang mga gilid ay may label na may 0s at 1s. 219 00:13:53,900 --> 00:13:55,710 Natin gawin ito muli. 220 00:13:55,710 --> 00:14:02,600 35% ugat na puno. 20% at 45%, kaya kami ay pagpunta upang sumanib sa 35% at 20%. 221 00:14:02,600 --> 00:14:05,610 Ngayon na mayroon kami dito ang puno na ito. Idagdag namin ang mga magkasama, mayroon kaming 55%. 222 00:14:05,610 --> 00:14:07,910 Ngayon ay mayroong dalawang puno lamang sa kagubatan. 223 00:14:07,910 --> 00:14:11,900 Ginagawa namin ito sa isang huling oras, at sana mathematically ang lahat ng mga frequency magdagdag ng hanggang 224 00:14:11,900 --> 00:14:15,570 dahil dapat dahil sila namin nakalkula sa kanila mula sa makakuha-pumunta upang magdagdag ng hanggang sa 100%. 225 00:14:15,570 --> 00:14:17,960 At ngayon kami ay may isang puno. 226 00:14:17,960 --> 00:14:20,580 Kaya ito ay puno Huffman coding. 227 00:14:20,580 --> 00:14:24,400 Ito uri ng kinuha ng isang habang upang makakuha ng doon pasalita, ngunit ang katotohanan na may para sa loop 228 00:14:24,400 --> 00:14:27,620 o may isang recursive function na, maaari mong bumuo ng ito bagay up medyo mabilis. 229 00:14:27,620 --> 00:14:32,440 Kaya ngayon kami ay may isang bagong node, at ang lahat ng mga panloob na node ay malloc'd, 230 00:14:32,440 --> 00:14:34,690 siguro, kasama ang paraan. 231 00:14:34,690 --> 00:14:38,650 Kaya ngayon sa tuktok ng puno na ito na mayroon kami 100%, ngunit ngayon mapansin mayroon kaming isang path 232 00:14:38,650 --> 00:14:43,780 mula sa ang bagong mahusay na mahusay na-nuno sa nuno sa lahat ng dakilang-dakilang-dakilang-inapo 233 00:14:43,780 --> 00:14:45,930 ang lahat ng mga paraan sa ibaba, sa lahat ng mga dahon. 234 00:14:45,930 --> 00:14:52,840 >> Ano kami ay pagpunta sa gawin ngayon ay ipanukala na upang kumatawan sa sulat E, 235 00:14:52,840 --> 00:14:55,670 lamang namin gamitin ang bilang 1. Bakit? 236 00:14:55,670 --> 00:15:01,000 Dahil kung pagbagtas namin ito puno mula sa huling ugat pababa sa dahon na kilala bilang E, 237 00:15:01,000 --> 00:15:06,050 sundin namin ang isa lamang sa gilid, ang kanang gilid, at na may label ng kurso sa tuktok na kanang 1. 238 00:15:06,050 --> 00:15:11,550 Kaya ang implikasyon dito para Huffman na pag-encode E sa binary ay lamang na ng 1. 239 00:15:11,550 --> 00:15:14,490 At na ang medyo mapahamak mahusay. Hindi maaaring talagang makakuha ng anumang mas maliit kaysa sa. 240 00:15:14,490 --> 00:15:18,350 Sa pamamagitan ng kaibahan, ang isang na kinakatawan, kung sundin mo ang logic, 241 00:15:18,350 --> 00:15:21,610 sa pamamagitan ng kung ano ang pattern ng mga bits sa halip? 01. 242 00:15:21,610 --> 00:15:25,500 Kaya upang makakuha ng A, simulan namin sa root at pumunta kami sa kaliwa at pagkatapos ay pumunta kami sa kanan, 243 00:15:25,500 --> 00:15:28,580 na nangangahulugan na sinundan namin ng 0 at pagkatapos ng 1. 244 00:15:28,580 --> 00:15:32,810 Kaya tayo ay kumakatawan sa sulat A may pattern ng 0 at 1. 245 00:15:32,810 --> 00:15:36,010 At ngayon mapansin namin na magkaroon ng isang ari-arian ng agarang decodability 246 00:15:36,010 --> 00:15:38,090 na hindi namin sa Morse code. 247 00:15:38,090 --> 00:15:42,840 Kahit na parehong ng mga pattern ay medyo maikling - E 1 bit, A 2 bit - 248 00:15:42,840 --> 00:15:45,080 mapansin na hindi nila maaaring nalilito isa o ang iba, 249 00:15:45,080 --> 00:15:54,870 dahil kung nakakita ka ng 1 ito nakuha sa isang E, kung nakakita ka ng 0 pagkatapos ng 1 malinaw naman ito ay nakuha ng A. 250 00:15:54,870 --> 00:15:58,410 Gayundin, kung ano ang D? 001. 251 00:15:58,410 --> 00:16:01,440 Ano ang C? 0001. 252 00:16:01,440 --> 00:16:05,320 At ano ang B? 0000. 253 00:16:05,320 --> 00:16:09,550 At muli, dahil ang lahat ng mga titik na mahalaga kami tungkol sa mga dahon 254 00:16:09,550 --> 00:16:13,890 at wala sa kanila ang uri ng middlemen sa path mula sa ugat sa dahon, 255 00:16:13,890 --> 00:16:18,760 walang panganib ng conflating ng iba't ibang mga pag-encode ng 2 titik na ' 256 00:16:18,760 --> 00:16:22,300 dahil ang lahat ng mga pattern ng bit deterministic. 257 00:16:22,300 --> 00:16:25,280 0000 ay palaging magiging B. 258 00:16:25,280 --> 00:16:29,480 Walang node sa isang lugar sa pagitan ng na maaari mong lituhin ang isang sulat para sa isa. 259 00:16:29,480 --> 00:16:31,150 Kaya kung ano ang implikasyon dito? 260 00:16:31,150 --> 00:16:35,080 >> Ang pinaka-popular na titik - sa kasong ito ng E - na nakuha ang pinakamaikling na pag-encode, 261 00:16:35,080 --> 00:16:37,430 Na nakuha ang susunod pinakamaikling pag-encode, 262 00:16:37,430 --> 00:16:41,390 at B at C, na alam na namin mula sa makakuha-go ay uri ng hindi bababa sa popular na 263 00:16:41,390 --> 00:16:45,390 sa 10% dalas bawat, nakuha ang pinakamahabang pag-encode. 264 00:16:45,390 --> 00:16:49,410 At kaya kung ano ang ibig sabihin nito ay ngayon ay na kung nais mong magpadala ng mensahe na naka-compress 265 00:16:49,410 --> 00:16:51,950 sa Internet o sa isang email o tulad ng, 266 00:16:51,950 --> 00:16:56,730 sa halip na gamit ang standard ASCII, maaari kang magpadala ng mensahe sa Huffman code 267 00:16:56,730 --> 00:17:01,720 kung saan kung gusto mong ipadala ang sulat E, magpadala sa iyo ng isang bit. 268 00:17:01,720 --> 00:17:05,680 Kung gusto mong ipadala ang isang A, magpadala sa iyo ng 2 bits, 01, sa halip ng pagpapadala ng 8 bit 269 00:17:05,680 --> 00:17:10,190 sinundan ng isa pang 8 bit na sinundan ng isa pang 8 bit at iba pa. 270 00:17:10,190 --> 00:17:11,940 Ngunit ang isang gotcha dito. 271 00:17:11,940 --> 00:17:17,079 Ito ay hindi sapat upang bumuo ng mga ito puno at pagkatapos ay simulan ang pagpapadala mula sa Alice sa Bob 272 00:17:17,079 --> 00:17:20,010 ang mas maikli pattern ng bit, string mula ASCII, 273 00:17:20,010 --> 00:17:23,140 dahil Alice ay mayroon ding upang ipaalam ang Bob ng kung ano 274 00:17:23,140 --> 00:17:26,880 kung ang Bob ay upang mabasa ang kanyang compressed mensahe? 275 00:17:26,880 --> 00:17:30,770 [Hindi marinig na mag-aaral ng tugon] >> Ano iyon? 276 00:17:30,770 --> 00:17:32,310 [Hindi marinig na mag-aaral ng tugon] >> Ng kung ano ang puno ay. 277 00:17:32,310 --> 00:17:35,160 O kahit na higit na partikular, kung ano ang mga pag-encode, 278 00:17:35,160 --> 00:17:39,010 lalo na dahil sa panahon na ito kuwento naming gumawa ng isang paghatol na tawag sa isang punto. 279 00:17:39,010 --> 00:17:43,640 Tandaan na namin ay upang pumili sa pagitan ng 2 magkaibang 20% ​​node mang? 280 00:17:43,640 --> 00:17:49,800 Kaya hindi ito ang kaso na Bob, ang tatanggap, maaari itayong muli ang puno sa kanyang sariling 281 00:17:49,800 --> 00:17:53,390 dahil maaaring siya ay lumikha ng tree kailanman kaya bahagyang naiiba mula sa Alice. 282 00:17:53,390 --> 00:17:56,670 Bukod dito, si Bob ay hindi alam kung ano ang orihinal na mensahe ay 283 00:17:56,670 --> 00:18:00,770 dahil ang tanging bagay na Alice ay pagpapadala ng kanya, siyempre, ang naka-compress na mensahe. 284 00:18:00,770 --> 00:18:05,900 >> Kaya ang catch may compression tulad nito na, oo, Alice maaaring i-save ang isang buong maraming ng bit 285 00:18:05,900 --> 00:18:09,900 sa pamamagitan ng pagpapadala ng 1 para sa E at 01 para sa A at iba pa, 286 00:18:09,900 --> 00:18:15,180 ngunit siya ay mayroon ding upang ipaalam sa Bob kung ano ang pagma-map ay sa pagitan ng mga titik at mga bits 287 00:18:15,180 --> 00:18:19,620 dahil hindi malinaw nila umasa sa lamang ASCII ito kung hindi namin ginagamit ASCII. 288 00:18:19,620 --> 00:18:22,200 Kaya maaari niyang alinman sa magpadala sa kanya ng tree sa paanuman - 289 00:18:22,200 --> 00:18:26,600 itong isulat,-imbak ang mga ito bilang mga data ng binary o isang bagay tulad na - 290 00:18:26,600 --> 00:18:30,280 o lamang magpadala sa kanya ng isang maliit na impostor sheet, isang Excel file, na nagpapakita ng pagmamapa. 291 00:18:30,280 --> 00:18:36,480 Kaya ang pagiging epektibo ng compression talagang Ipinagpapalagay na ang mga mensahe na ipapadala mo 292 00:18:36,480 --> 00:18:40,230 medyo malaki, hindi bababa sa katamtaman ang laki, 293 00:18:40,230 --> 00:18:42,180 dahil kung ikaw ay pagpapadala ng sobrang maikling mensahe, 294 00:18:42,180 --> 00:18:45,390 kung gusto mo lang magpadala ng mensahe masamang, na ang mangyayari sa isang salita na maaari naming ini-ispel dito, 295 00:18:45,390 --> 00:18:49,550 B-A-D, marahil ka upang gamitin ang mas kaunting mga bits, 296 00:18:49,550 --> 00:18:53,130 ngunit ang catch ay kung mayroon ka ring upang ipaalam sa Bob kung ano ang puno ay 297 00:18:53,130 --> 00:18:57,530 o kung ano ang mga pag-encode, ka sa marahil higtan sa timbang lahat ng pagtitipid 298 00:18:57,530 --> 00:19:00,110 ng pagkakaroon ng naka-compress na mga bagay upang magsimula sa. 299 00:19:00,110 --> 00:19:02,210 Kaya maaari itong aktwal na kaso na kung susubukan mo pigain 300 00:19:02,210 --> 00:19:05,330 kahit na may isang bagay tulad ng zip o mga format ng file na maaari mong maging pamilyar sa - 301 00:19:05,330 --> 00:19:07,780 medyo maliliit na mga file, kahit walang laman ang file - 302 00:19:07,780 --> 00:19:10,930 minsan mga file ay maaaring makakuha ng mas malaki at hindi mas maliit. 303 00:19:10,930 --> 00:19:14,320 Ngunit realistically, na mangyayari lamang para sa mga maliliit na laki ng file, 304 00:19:14,320 --> 00:19:16,920 kaya hindi ito ay pagpunta sa gumawa ng isang gigabyte ng file 2 gigabytes; 305 00:19:16,920 --> 00:19:19,480 talagang pinag-uusapan natin bytes o lamang ng ilang kilobytes. 306 00:19:19,480 --> 00:19:22,330 >> Na smart sapat upang mapagtanto na ang ilang mga programa tulad ng zip, 307 00:19:22,330 --> 00:19:24,590 "Ikaw ay pagpunta sa gastos ng higit pang mga bit pigain ito." 308 00:19:24,590 --> 00:19:27,460 "Hayaan akong hindi abala pigain ang mga ito para sa iyo sa lahat ng." 309 00:19:27,460 --> 00:19:30,160 Kaya ito ay isa lamang paraan ng pigain text format. 310 00:19:30,160 --> 00:19:32,300 Kami maaaring ipatupad ang isang bagay tulad nito sa C. 311 00:19:32,300 --> 00:19:35,370 Halimbawa, narito ang kung paano namin kumakatawan sa isang node sa puno 312 00:19:35,370 --> 00:19:39,320 kung saan mayroon kaming isang pansamantalang trabaho para sa simbolo, isang lumulutang na halaga para sa dalas, 313 00:19:39,320 --> 00:19:42,250 at bilang nasaksihan namin sa aming iba pang mga istraktura ng data, 2 pointer, 314 00:19:42,250 --> 00:19:47,080 1 sa kaliwang bata, 1 sa kanan, alinman sa na maaaring maging null, 315 00:19:47,080 --> 00:19:50,850 ngunit kung hindi, ito ay tumutukoy sa kaliwa anak at kanang bata. 316 00:19:50,850 --> 00:19:55,130 Kaya ito pagkatapos ay Huffman coding, at ito ay isang paraan na maaari kang pumunta tungkol sa pigain impormasyon, 317 00:19:55,130 --> 00:19:57,880 at ito ay tiyak na isa sa mga pinaka-madaling ipatupad 318 00:19:57,880 --> 00:20:00,830 sa konteksto ng, sabihin nating, ang mga kaayusan ng data ng nakaraang linggo, 319 00:20:00,830 --> 00:20:03,250 kahit na mas sopistikadong algorithm umiiral 320 00:20:03,250 --> 00:20:08,220 na maaaring gawin ng mga mas sopistikadong mga mutations ng iyong data. 321 00:20:08,220 --> 00:20:11,640 Anumang mga katanungan pagkatapos ay sa puno, puno ng binary, o compression ng teksto? 322 00:20:11,640 --> 00:20:15,590 [Mag-aaral] Mayroon bang ilang mga kalabuan, tulad ng kung [hindi marinig] split sa 01, 323 00:20:15,590 --> 00:20:19,160 pagkatapos 011 ay hindi maliwanag, i-right? 324 00:20:19,160 --> 00:20:22,730 [Hindi marinig] >> Magandang katanungan. Kalabuan. 325 00:20:22,730 --> 00:20:25,940 Hayaan akong sabihin sa maikling pangungusap sa pamamagitan ng nagre-refer na sa ang larawang ito dito. 326 00:20:25,940 --> 00:20:29,650 Dahil ang mga character na pigain, ang mga representasyon ng, 327 00:20:29,650 --> 00:20:32,850 ng kahulugan ng algorithm na ito ay laging mananatili ang mga dahon, 328 00:20:32,850 --> 00:20:41,870 hindi sinasadyang mo na gamitin ang parehong pattern ng mga bit para sa prefix ng maramihang mga titik. 329 00:20:41,870 --> 00:20:46,740 Kaya sa ibang salita, nababahala ka tungkol sa, Mukhang, isang kalabuan magmumula 330 00:20:46,740 --> 00:20:51,580 kung saan 001 ay maaaring simula ng B o simula ng C o isang bagay tulad na. 331 00:20:51,580 --> 00:20:56,780 Ngunit iyon ay hindi maaaring ang kaso dahil paunawa na ang lahat ng mga titik ng alpabeto namin ang page-encode 332 00:20:56,780 --> 00:20:58,290 sa mga dahon. 333 00:20:58,290 --> 00:21:01,910 >> Kalabuan ay maaari lamang na lumabas dahil, tulad ng sa kaso ng Morse code, 334 00:21:01,910 --> 00:21:06,770 kung, halimbawa, C ay isang lugar sa kahabaan ng path mula sa root sa B. 335 00:21:06,770 --> 00:21:12,290 [Mag-aaral] Kanan. Kaya sa kasong iyon, sabihin A ay may 2 dahon. >> Sabihing A ay may - Pakiulit ang sinabi. 336 00:21:12,290 --> 00:21:18,760 [Mag-aaral] Sabihin A ay may 2 dahon, F at G, at pagkatapos G - >> Okay. Ngunit hindi ito maaari. 337 00:21:18,760 --> 00:21:23,230 Ay hindi mismo ay maaaring magkaroon mga dahon ng F at G dahil sa mga titik F at G 338 00:21:23,230 --> 00:21:27,560 ay ang kanilang mga sarili na umalis sa isang lugar sa kaliwa ng B o sa kanan ng E. 339 00:21:27,560 --> 00:21:28,900 Kaya sa pamamagitan ng kahulugan, dapat silang mga dahon. 340 00:21:28,900 --> 00:21:32,940 Kung hindi, ikaw ay akmang-akma, hindi namin malutas ang problema ng Morse code nakaharap. 341 00:21:32,940 --> 00:21:38,150 Magandang tanong. Iba pang mga tanong? Ayos lang. 342 00:21:38,150 --> 00:21:42,050 Ito paniwala ng mga bits, lumiliko out kami ay may kapangyarihan lahat kahabaan na hindi namin ang aktwal na ginagamit 343 00:21:42,050 --> 00:21:44,200 kapag dumating ito sa pagmamanipula ng mga 0s at 1s. 344 00:21:44,200 --> 00:21:46,600 Tinanong namin tungkol ito sa isa sa pinakamaagang set ng problema: 345 00:21:46,600 --> 00:21:52,340 lalo, paano mo pumunta tungkol sa-convert sa uppercase sa lowercase o kabaligtaran? 346 00:21:52,340 --> 00:21:55,460 O, mas concretely, isa ng mga unang psets nagtanong 347 00:21:55,460 --> 00:22:01,090 kung gaano karaming mga bits ay iyong aktwal na upang i-flip upang baguhin Isang lowercase ng o vice versa? 348 00:22:01,090 --> 00:22:05,580 Narito ang isang mabilis na paalala ng kung ano ang 65 at 97 hitsura sa binary. 349 00:22:05,580 --> 00:22:08,060 At kahit na tanong na uri ng kupas sa iyong memorya, 350 00:22:08,060 --> 00:22:11,290 maaari mong makita muli dito na kung gaano karaming mga bits kailangan Binaligtad 351 00:22:11,290 --> 00:22:15,810 upang baguhin ang kabisera A sa lowercase ng? Isa lamang. 352 00:22:15,810 --> 00:22:19,650 >> Lang sila ng iba sa isang lokasyon, sa ikatlong bit mula sa kaliwa. 353 00:22:19,650 --> 00:22:24,240 Sapagkat may 010, kaunti ay may 011. 354 00:22:24,240 --> 00:22:26,250 Kaya sa paano pa man, kailangan namin lamang upang i-flip na bit, 355 00:22:26,250 --> 00:22:29,410 at maaari naming sulatin sa malaking titik o lowercase titik. 356 00:22:29,410 --> 00:22:32,720 Namin nagawa mo na ito sa nakaraan sa pamamagitan ng aktwal na paggamit kung kundisyon 357 00:22:32,720 --> 00:22:35,930 at pagsuri kung ang titik sa pagitan ng capital A at kabisera Z, 358 00:22:35,930 --> 00:22:41,480 ang output tulad ng A - a + 26 o isang bagay tulad na. 359 00:22:41,480 --> 00:22:46,130 Marahil ang isang aritmetika pagbabago sa ang mga titik ng alpabeto. 360 00:22:46,130 --> 00:22:49,270 Ngunit ano kung kami lamang i-flip na single bit? 361 00:22:49,270 --> 00:22:59,080 Kung paano maaari kang pumunta tungkol sa pagkuha ng nagkakahalaga ng isang byte ng bits, kaya 8 bit tulad ng 01,000,001 at 01,100,001? 362 00:22:59,080 --> 00:23:03,170 Kung mayroon kang mga pattern ng mga bits, kung paano namin pumunta tungkol sa pagbabago ng isa lamang sa mga ito? 363 00:23:03,170 --> 00:23:07,610 Paano kung ipakilala kami sa dilaw dito ang iba pang mga pattern ng mga bits? 364 00:23:07,610 --> 00:23:13,420 Kung gumawa ako ng buong dilaw string 0s maliban para sa isang bit na gusto kong baguhin 365 00:23:13,420 --> 00:23:17,900 at pagkatapos ay ba kitang ipakilala ang isang bagong operator na kilala bilang isang bitwise operator - 366 00:23:17,900 --> 00:23:21,210 bitwise sa kamalayan na ito ay nagpapatakbo ng sa mga indibidwal na bit, 367 00:23:21,210 --> 00:23:25,360 hindi sa isang buong byte o apat na bytes nang sabay-sabay. 368 00:23:25,360 --> 00:23:31,170 Ito vertical bar doon sa kulay dilaw ay nagmumungkahi na ang kung namin ang representasyon ng kabisera A 369 00:23:31,170 --> 00:23:37,060 at bitwise O ito na ang dilaw na pagkakasunud-sunod ng mga bit? 370 00:23:37,060 --> 00:23:41,300 Sa ibang salita, sa tingin pabalik sa aming talakayan ng Boolean expression sa simula at pagkatapos ay sa C. 371 00:23:41,300 --> 00:23:47,520 >> Paggawa ng Boolean o ay nangangahulugan na upang maging totoo, alinman ang unang bagay na ito ay totoo 372 00:23:47,520 --> 00:23:50,700 o ang ikalawang bagay ay totoo o mayroon sila parehong totoo, 373 00:23:50,700 --> 00:23:53,270 at pagkatapos ay ang mga nagresultang output ay mismo ay totoo. 374 00:23:53,270 --> 00:24:00,230 Sa kasong ito dito, ano ang gagawin namin kung lubos naming 0 "o" ed may 0? Mali o mali? 375 00:24:00,230 --> 00:24:04,280 Pa rin maling, kaya ang lowercase nananatiling tulad ng inaasahan. 376 00:24:04,280 --> 00:24:07,540 Paano kung sa halip gawin namin 1 o 0? 377 00:24:07,540 --> 00:24:12,640 Ito ngayon ay nananatiling 1, ngunit mapapansin kung ano ang tungkol sa mangyayari dito. 378 00:24:12,640 --> 00:24:18,630 Kung sisimulan namin ang sa kabisera A at patuloy naming "o" ang mga indibidwal na bit tulad ng ginagawa namin dito, 379 00:24:18,630 --> 00:24:25,180 0 o ang dilaw ay nagbibigay sa amin kung ano ang down na dito? Ito ay nagbibigay sa amin ng 1. 380 00:24:25,180 --> 00:24:35,120 Sa katunayan, ipagpalagay na hindi namin malaman kung ano ang sa uppercase na bersyon ng maliit na isang aktwal na ay. 381 00:24:35,120 --> 00:24:38,270 Natin pumunta gawin ito. Hayaan akong ilipat ito pabalik sa paglipas dito. 382 00:24:38,270 --> 00:24:42,340 Natin gawin ito muli. 0 o 0 ay nagbibigay sa akin ng 0. 383 00:24:42,340 --> 00:24:45,020 1 o 0 ay nagbibigay sa akin ng 1. 384 00:24:45,020 --> 00:24:48,020 0 o 1 ay nagbibigay sa akin ng 1. 385 00:24:48,020 --> 00:24:52,880 0 o 0 ay nagbibigay sa akin ng 0. Ang susunod ay 0, sa susunod ay 0, sa susunod na isa ay 0. 386 00:24:52,880 --> 00:24:55,660 1 o 0 ay nagbibigay sa akin ng 1. 387 00:24:55,660 --> 00:24:59,140 At kaya kahit na hindi namin malaman nang maaga kung ano lowercase isang ay, 388 00:24:59,140 --> 00:25:04,770 sa pamamagitan lamang ng "o" Pina-A ang pattern na ito ng mga bit na namin ang ipinakita dito sa kulay dilaw, 389 00:25:04,770 --> 00:25:09,400 Maaari mo lowercase ng kabisera A sa pamamagitan ng flipping na bit. 390 00:25:09,400 --> 00:25:11,580 Ginamit namin ito expression linggo na ang nakakaraan: flipping ng kaunti. 391 00:25:11,580 --> 00:25:13,710 Paano mo aktwal na programa? 392 00:25:13,710 --> 00:25:16,390 Gamitin mo kung ano ang pangkalahatan ay tinatawag na ng mask, isang pagkakasunud-sunod ng mga bits, 393 00:25:16,390 --> 00:25:19,980 na sa kasong ito kaya ang mangyayari sa hitsura ang numerong ito dito, 394 00:25:19,980 --> 00:25:22,980 at pagkatapos mo "o" ito nang magkasama gamit ang bagong operator C, 395 00:25:22,980 --> 00:25:29,940 hindi | |, gamitin ka ng isang solong | at gusto mong aktwal na makuha ang sagot dito dahil kung bakit? 396 00:25:29,940 --> 00:25:35,120 Ito ay ang lugar 1s, 2s lugar, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Kaya ito lumiliko out na kung ikaw ay kumuha ng malaking titik A at bitwise O ito na may integer 32, 398 00:25:42,280 --> 00:25:47,520 dahil ang integer 32, kapag tiningnan mo ang mga ito bilang bit, ganito ang hitsura, 399 00:25:47,520 --> 00:25:50,860 na nangangahulugan na maaari mong i-flip ang bit na iyong aktwal na gusto. 400 00:25:50,860 --> 00:25:52,630 At katulad - at titingnan namin sa code sa sandali lamang - 401 00:25:52,630 --> 00:25:54,210 ipagpalagay na nais namin upang pumunta sa iba pang mga direksyon. 402 00:25:54,210 --> 00:25:58,210 >> Paano ka pumunta mula sa lowercase sa kabisera A? Aling bit kailangang baguhin? 403 00:25:58,210 --> 00:25:59,820 Ito ay ang parehong. 404 00:25:59,820 --> 00:26:03,970 Gusto naming baguhin na ang mga third bit mula sa 1 sa isang 0. 405 00:26:03,970 --> 00:26:06,310 At kung paano namin pumunta tungkol sa paggawa nito? 406 00:26:06,310 --> 00:26:10,130 Paano namin i-off ang isang bit? Sa kung ano ang pattern ng bits ay maaaring naming i-off ng isang bit? 407 00:26:11,580 --> 00:26:14,070 Paano kung naming ayusin ng Baliktarin ang mask? 408 00:26:14,070 --> 00:26:17,350 Sapagkat bago, ginawa namin ang buong dilaw 0s mask 409 00:26:17,350 --> 00:26:19,930 maliban para sa isang bit namin nais na i-on, 410 00:26:19,930 --> 00:26:25,580 kung ano kung oras na ito, ginawa namin ang buong mask 1s maliban para sa bit na gusto naming i-off 411 00:26:25,580 --> 00:26:28,330 at pagkatapos ay gamitin ang operator? 412 00:26:28,330 --> 00:26:30,560 Paano kung kami "at" bagay? Natin tingnan. 413 00:26:30,560 --> 00:26:34,880 Kung namin ngayon i-flip ito, ipagpalagay na muli ako lilikha ng isang mask na ang lahat ng 1s 414 00:26:34,880 --> 00:26:37,650 maliban para sa isang bit na gusto kong i-off 415 00:26:37,650 --> 00:26:43,860 at pagkatapos ay sa halip na "o" ang mga puting numero up tuktok na may dilaw na numero pababa dito, 416 00:26:43,860 --> 00:26:46,940 kung ano kung sa halip ko "at" iyon nang magkakasama? Ito ay tinatawag na isang bitwise at. 417 00:26:46,940 --> 00:26:49,450 Lohikal, ito ay ang parehong bagay bilang isang Boolean at. 418 00:26:49,450 --> 00:26:55,160 Ito ay nagbibigay sa akin 0 & 1 ay 0. Kaya maling at totoo ay hindi. 419 00:26:55,160 --> 00:26:58,160 Totoo at tunay ay totoo. 420 00:26:58,160 --> 00:27:04,020 At narito ang magic: Totoo at maling ay maling ngayon, kaya kami naka-off bit na. 421 00:27:04,020 --> 00:27:06,560 At ngayon, ang natitirang bahagi ng ang kuwento ay medyo direkta. 422 00:27:06,560 --> 00:27:11,970 Dahil ang lahat ng mask ay 1s, hindi mahalaga kung ano ang mga numero sa puting. 423 00:27:11,970 --> 00:27:15,580 Kapag ikaw "at" isang bagay na may tunay, hindi ka pagpunta upang baguhin ang halaga. 424 00:27:15,580 --> 00:27:20,200 Kung ito ay totoo, mananatili itong totoo. Kung ito ay maling, mananatili itong maling. 425 00:27:20,200 --> 00:27:23,190 >> Ngunit magic ang mangyayari kapag mong gawin ang isang bagay na tunay na 426 00:27:23,190 --> 00:27:25,430 at pagkatapos ay ang "at" ito na may maling. 427 00:27:25,430 --> 00:27:30,030 Ito ay ang epekto ng pag-i-off na bit. 428 00:27:30,030 --> 00:27:31,980 Kaya isang maliit na misteriyoso doon. 429 00:27:31,980 --> 00:27:35,390 Natin tunay na tumingin sa ilang code, na maaaring aktwal na hitsura mas misteriyoso, 430 00:27:35,390 --> 00:27:38,220 ngunit sabihin tingnan dito sa tolower. 431 00:27:38,220 --> 00:27:45,880 Kung titingnan ko sa tolower, pagpunta mula sa kabisera A sa lowercase ng, 432 00:27:45,880 --> 00:27:47,730 sabihin makita kung paano namin ipatupad ang programang ito. 433 00:27:47,730 --> 00:27:51,280 Narito ang pangunahing, at ito ay hindi pagkuha ng anumang command-line argumento. 434 00:27:51,280 --> 00:27:55,980 Ako deklarasyon ng character c para sa titik na ang gumagamit ay i-type in. 435 00:27:55,980 --> 00:28:00,690 Ako pagkatapos gumamit ng isang pamilyar na Do habang loop sa tiyakin lamang na ang gumagamit ay talagang nagbibigay sa akin ng kabisera Isang 436 00:28:00,690 --> 00:28:05,010 o B o C. .. Z, kaya bigyan sila sa akin ng isang bagay sa pagitan ng A at Z. 437 00:28:05,010 --> 00:28:08,580 At ngayon kung ano ang ako ginagawa dito? 438 00:28:08,580 --> 00:28:14,870 Ako "o" Pina ito sa 0x20, ngunit na talagang kapareho ng - 439 00:28:14,870 --> 00:28:19,500 at kami na bumalik na ito sa isang sandali - 32. 440 00:28:19,500 --> 00:28:24,830 Kaya muli, 32 ang pattern na ito ng mga bits sa dito. Bakit namin ito alam? 441 00:28:24,830 --> 00:28:26,320 Lamang sa tingin bumalik sa linggo 0. 442 00:28:26,320 --> 00:28:31,010 Ito ay ang lugar 1s, 2s lugar, 4s, 8s, 16s, 32s lugar. 443 00:28:31,010 --> 00:28:33,470 Kaya dilaw bilang na ito ay mangyayari sa 32. 444 00:28:33,470 --> 00:28:40,570 Ko ng sulat tulad ng pansamantalang trabaho dito, bitwise "o" ito sa literal ang bilang 32, 445 00:28:40,570 --> 00:28:45,250 at kung ano ang ko makabalik? Ang lowercase na bersyon ng na magpasinda. 446 00:28:45,250 --> 00:28:48,830 Isang sandali ang nakalipas, bagaman, ako ipinahayag ito sa ibang base pagtatanda. 447 00:28:48,830 --> 00:28:51,370 Ano ang ito kumatawan? >> [Mag-aaral] hexadecimal. 448 00:28:51,370 --> 00:28:53,050 [Malan] Ito ay mangyayari upang kumatawan sa hexadecimal. 449 00:28:53,050 --> 00:28:55,170 Hindi namin na-uusapang tungkol hexadecimal ang lahat na magkano, 450 00:28:55,170 --> 00:28:57,330 ngunit ang aktwal na maginhawa sa mga kaso tulad nito. 451 00:28:57,330 --> 00:29:01,730 >> Kahit na mukhang mas kumplikado at kahit na mukhang 20 at hindi 32, 452 00:29:01,730 --> 00:29:06,240 ito lumiliko out na hexadecimal ay talagang sobrang maginhawang pagtatanda 453 00:29:06,240 --> 00:29:10,810 dahil sa hexadecimal bawat digit pagkatapos ng 0x - at ito ay nangangahulugan na walang; 454 00:29:10,810 --> 00:29:13,960 ito lamang ang tao convention na sinasabi dito ay isang hexadecimal numero - 455 00:29:13,960 --> 00:29:18,590 bawat isa sa mga digit na ito, ang 2 at pagkatapos ay 0, maaari ang kanilang mga sarili na kinakatawan 456 00:29:18,590 --> 00:29:20,800 na may eksaktong 4 bit. 457 00:29:20,800 --> 00:29:27,840 Kaya kung gagawin namin ito, hayaan mo akong magbukas ng isang text editor dito - kakaiba autocomplete - 458 00:29:27,840 --> 00:29:35,940 kung gagawin namin ang isang maliit na editor ng teksto dito, ay nangangahulugan na ang bilang 0x20 dito 4 bits, narito ang isa pang 4 bit. 459 00:29:35,940 --> 00:29:38,050 Sabihin rightmost 4 bit muna. 460 00:29:38,050 --> 00:29:44,690 0 kapag kinakatawan na may 4 na bit kung ano? Napakadaling. Lamang ang lahat ng 0s. 461 00:29:44,690 --> 00:29:46,780 Kaya 4 na piraso bilang 0s. 462 00:29:46,780 --> 00:29:53,510 Paano mo kumatawan 2? Ito ay habang ang isang mula noong ginawa namin ito, ngunit ito 0100. 463 00:29:53,510 --> 00:29:57,310 Kaya ito ay ang lugar 1s, ito ay ang 2s lugar, at pagkatapos ay hindi mahalaga kung ano ang iba pang mga lugar. 464 00:29:57,310 --> 00:30:00,610 Sa ibang salita, sa hexadecimal kumbaga 0x20, 465 00:30:00,610 --> 00:30:04,340 ngunit kung sa tingin mo pagkatapos tungkol sa kung ano ang 2 at paano ito kinakatawan sa binary, 466 00:30:04,340 --> 00:30:07,130 ano ay 0 at paano ito kinakatawan sa binary, 467 00:30:07,130 --> 00:30:10,440 ang mga sagot sa mga tanong na ito at ito, ayon sa pagkakasunud-sunod. 468 00:30:10,440 --> 00:30:14,380 Kaya 0x20 mangyayari upang kumatawan ang pattern na ito ng 8 bits, 469 00:30:14,380 --> 00:30:16,880 na tiyak ang mask na gusto naming. 470 00:30:16,880 --> 00:30:20,140 Kaya ito ay para sa sandali lamang ng intelektwal na pagmamay-ehersisyo, 471 00:30:20,140 --> 00:30:24,520 ngunit ang katotohanan ay sa code na ito ay karaniwang mas karaniwang upang sumulat ng mga constants tulad nito 472 00:30:24,520 --> 00:30:28,360 hexadecimal dahil pagkatapos ay ang programmer kaya medyo madali, 473 00:30:28,360 --> 00:30:32,560 kahit na ito ay nangangailangan ng ilang mga papel at lapis, malaman kung ano ang na pattern ng mga bits ay 474 00:30:32,560 --> 00:30:35,960 dahil hindi lamang ka maaaring ipahayag 0s at 1s karaniwang code. 475 00:30:35,960 --> 00:30:38,540 Hindi ka maaaring pumunta 00,010 at iba pa. 476 00:30:38,540 --> 00:30:42,380 >> Mayroon kang pumili ng decimal o hexadecimal o octal o iba pang mga notations. 477 00:30:42,380 --> 00:30:47,540 Karamihan sa mga tao ay may posibilidad upang pumili ng hexadecimal lamang kaya na digit na kinakatawan ng bawat 4 bit 478 00:30:47,540 --> 00:30:49,320 at maaari mong gawin ito mabilis matematika. 479 00:30:49,320 --> 00:30:54,990 At makikita iwagayway ko ang aking kamay sa toupper, na kung saan ay halos ang parehong, ito mukhang halos magkakahawig. 480 00:30:54,990 --> 00:31:01,900 Mga Toupper mangyayari gamitin hindi ang operator o kundi ang tao na ito at df. 481 00:31:01,900 --> 00:31:09,300 Ano ang df kumatawan? df? Sinuman? >> [Mag-aaral] 255. 482 00:31:09,300 --> 00:31:12,780 255? Hindi 255. Na ff. 483 00:31:12,780 --> 00:31:15,210 Namin na nakalabas ang isang ito bilang isang maliit na ehersisyo. 484 00:31:15,210 --> 00:31:23,460 Ngunit kung pumunta ka mula 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 at pagkatapos ay kung ano ay pagkatapos ng 9? 485 00:31:23,460 --> 00:31:26,510 Humihingi kami ng uri ng out ng mga decimal digit, ngunit sa hexadecimal kung ano ay pagkatapos ng 9? 486 00:31:26,510 --> 00:31:29,510 [Mag-aaral] a. >> Kaya a, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Maaari mong malaman mula doon kung anong pattern ng mga bit d aktwal na kumakatawan. 488 00:31:33,470 --> 00:31:38,850 At kung gagawin namin ang matematika, makikita namin makita na ang mask na magtapos ka pagbalik ay kapareho sa. 489 00:31:38,850 --> 00:31:45,580 Ito ay f, lahat ng 1s, at ito ay d. Kaya df kumakatawan na mask. Ayos lang. 490 00:31:45,580 --> 00:31:50,980 At bilang wakas, hindi upang gumawa ng mga bagay ng tunog sobrang, sobrang teknikal, 491 00:31:50,980 --> 00:31:53,840 ngunit ipagpalagay na namin nais na magsulat ng isang programa na ito. 492 00:31:53,840 --> 00:31:58,960 Hayaan akong magpatuloy at binary, kung saan ay isang programa sa isang file na tinatawag na binary.c. 493 00:31:58,960 --> 00:32:02,050 At ngayon hayaan mo akong magpatakbo ng binary at bigyan ako ng isang hindi-negatibong integer. 494 00:32:02,050 --> 00:32:03,960 Natin simulan madali at uri sa 0. 495 00:32:03,960 --> 00:32:09,010 Ito ngayon ay isang programa na mga Kopya isang integer sa binary na representasyon nito. 496 00:32:09,010 --> 00:32:13,470 Kaya kung i-play ko ito laro muli at i-type sa may 1, ang dapat kong makakuha ng isang 32-bit na representasyon ng 1. 497 00:32:13,470 --> 00:32:15,490 Kung gagawin ko ito muli may 2, dapat ako makakakuha na. 498 00:32:15,490 --> 00:32:19,310 Kung gawin ko 7, ang dapat kong makakuha ng ilang 1s sa dulo at iba pa. 499 00:32:19,310 --> 00:32:22,740 Lumiliko out ako banggitin ito dahil may bitwise pagpapatakbo 500 00:32:22,740 --> 00:32:25,490 Maaari aktwal mong gawin ang isa sa iba pang mga bagay pati na rin. 501 00:32:25,490 --> 00:32:29,130 Maaari kang lumikha ng mga mask na ito sa dynamic. 502 00:32:29,130 --> 00:32:32,800 Dalhin tingnan sa isang huling halimbawa kinasasangkutan ang bitwise pagpapatakbo. 503 00:32:32,800 --> 00:32:35,490 Narito ang unang bahagi ng code, prompt ang user para sa isang numero, 504 00:32:35,490 --> 00:32:38,130 at insists na ba ninyo akong bigyan ng isang hindi-negatibong integer. 505 00:32:38,130 --> 00:32:39,780 Kaya, na uri ng old school bagay. 506 00:32:39,780 --> 00:32:41,980 Ngunit dito ay isang bagay na uri ng kawili-wiling. 507 00:32:41,980 --> 00:32:44,910 >> Paano ko pumunta tungkol sa pag-print ng isang numero sa binary? 508 00:32:44,910 --> 00:32:48,970 Ko muna umulit mula sa kung ano sa kung ano? 509 00:32:48,970 --> 00:32:52,270 Ano ang laki ng isang int sa karaniwang, ng hindi bababa sa appliance? >> [Mag-aaral] 4. 510 00:32:52,270 --> 00:32:57,130 Ito 4. Kaya 4 * 8 32 - 1 ay 31. 511 00:32:57,130 --> 00:33:02,590 Kaya kung ako simula mabibilang mula sa 31, na kumakatawan, ito lumiliko out, 512 00:33:02,590 --> 00:33:07,630 lamang conceptually, ang ika-31 bit o ang pinakamataas na bit sa pagkakasunud-sunod, na ang tao na ito sa paglipas dito, 513 00:33:07,630 --> 00:33:09,650 kung saan ito ay pagpunta sa 0 bit. 514 00:33:09,650 --> 00:33:12,850 Kaya ito ay 01 bit ... bit 31. 515 00:33:12,850 --> 00:33:14,950 Kaya kung ano ang code na ito ginagawa? 516 00:33:14,950 --> 00:33:20,140 Mapansin ito para sa loop, kahit mukhang misteriyoso, ay lamang iterating mula 31 pababa sa 0. Iyan na ang lahat. 517 00:33:20,140 --> 00:33:24,530 Kaya ang kawili-wiling bahagi ngayon ay dapat na sa mga 5 linya dito. 518 00:33:24,530 --> 00:33:28,110 Pansinin na sa linya ako deklarasyon ng variable na tinatawag na mask 519 00:33:28,110 --> 00:33:30,790 upang maging pare-pareho sa aming mga kuwento ng mga dilaw na mga numero. 520 00:33:30,790 --> 00:33:32,200 At pagkatapos ay kung ano ang ito ginagawa? 521 00:33:32,200 --> 00:33:35,720 Ito ay isa pang bitwise operator na hindi namin nakita bago, pinaka-malamang. 522 00:33:35,720 --> 00:33:38,300 Sa kaliwa shift operator. 523 00:33:38,300 --> 00:33:40,060 Operator ito. 524 00:33:40,060 --> 00:33:44,920 Narito ang numero 1, at kung gagawin mo i umalis shift, kaliwa shift, 525 00:33:44,920 --> 00:33:49,260 kung ano ang tingin mo na may epekto ng paggawa sa na ang mga indibidwal na 1? 526 00:33:49,260 --> 00:33:51,290 Literal paglilipat ito. 527 00:33:51,290 --> 00:33:57,540 Kaya kung ang numero 1 ay kung ano ang mayroon ka sa kaliwa at magsisimula ka sa pamamagitan ng Sinisimulan i 31, 528 00:33:57,540 --> 00:34:03,490 kung ano ay na gawin? Ito ay ang numerong ito 1 at shift ito ng 31 lugar sa paglipas dito. 529 00:34:03,490 --> 00:34:06,210 At dahil mayroong malinaw naman walang iba pang mga numero sa likod nito, 530 00:34:06,210 --> 00:34:10,350 mga ay sa pamamagitan ng default na pinalitan ng 0s. 531 00:34:10,350 --> 00:34:15,120 Kaya ikaw ay magsisimulang sa mga numero 1, na siyempre ay ganito ang hitsura - 532 00:34:15,120 --> 00:34:18,659 at ipaalam sa akin gumuhit ito sa paglipas dito sa sentro. 533 00:34:18,659 --> 00:34:22,139 At pagkatapos ay bilang shift mo ang mga bagay sa kaliwa, ang tao na ito ay mahalagang napupunta ang paraan na ito. 534 00:34:22,139 --> 00:34:24,659 Ngunit sa lalong madaling gawin mo na, 0 ay makakakuha ng puno. 535 00:34:24,659 --> 00:34:28,360 Kung ikaw shift ito sa pangalawang pagkakataon, pupunta ang paraan na ito at 0 isa pang maipo-puno. 536 00:34:28,360 --> 00:34:31,000 >> Shift mo ulit at pagkatapos ay 0 isa pang maipo-puno. 537 00:34:31,000 --> 00:34:37,900 Kaya kung gawin mo ang bagay na ito ng 1 << i 31 lugar, magtapos ka pagkuha ng mask 538 00:34:37,900 --> 00:34:42,550 na 32 mga character ang haba, sa pinakakaliwa na kung saan ay isang 1, 539 00:34:42,550 --> 00:34:45,199 lahat ng natitirang kung saan ay 0. 540 00:34:45,199 --> 00:34:50,880 At ito lumiliko out, bilang isang bukod, paglilipat ng isang numero sa kaliwa tulad nito 541 00:34:50,880 --> 00:34:53,530 din coincidentally, at minsan maginhawang, 542 00:34:53,530 --> 00:34:57,520 may epekto ng ginagawa kung ano ang sa numerong iyon? >> [Mag-aaral] pagdodoble ito. 543 00:34:57,520 --> 00:35:00,980 Pagdodoble ito dahil ang bawat isa ng mga haligi - 1s lugar, 2s lugar, 4s lugar, 544 00:35:00,980 --> 00:35:05,030 8s lugar, 16s lugar - they're lahat ng pagdodoble bilang pumunta ka sa kaliwa. 545 00:35:05,030 --> 00:35:09,500 O sa halip, kapag shift ang 1s ka pagpunta sa pagdodoble ang halaga ng numero. 546 00:35:09,500 --> 00:35:12,070 Maaari mong paggawa ng mga kawili-wiling mga transformations ng mga digit 547 00:35:12,070 --> 00:35:15,640 sa pamamagitan ng paglilipat ng lahat sa ganitong paraan sa pamamagitan ng kapangyarihan ng 2. 548 00:35:15,640 --> 00:35:17,150 Kaya kung paano ito gumagana? 549 00:35:17,150 --> 00:35:22,580 Pagkatapos na ito ay nagbibigay ako ng mask na ang lahat ng 0s maliban para sa isang 1 sa tiyak ang lugar Gusto ko ito, 550 00:35:22,580 --> 00:35:27,920 at pagkatapos na ito expression, na ninakaw mula toupper.c, 551 00:35:27,920 --> 00:35:31,770 lamang sinasabi ang numero n na ang gumagamit na nai-type sa, 552 00:35:31,770 --> 00:35:34,730 "At" ito sa na mask, at kung ano ang iyong pagpunta upang makakuha ng? 553 00:35:34,730 --> 00:35:39,200 Ka upang makakuha ng 1 kung may 1 sa na lihim na lokasyon, 554 00:35:39,200 --> 00:35:41,570 o ka pagpunta upang makakuha ng 0 kung mayroong hindi. 555 00:35:41,570 --> 00:35:44,370 At sa gayon ang lahat ng mga programa na ito ay epektibo ito ay may loop, 556 00:35:44,370 --> 00:35:48,340 at lumilikha ng isang mask na may 1 sa dito, pagkatapos ng 1 sa paglipas dito, pagkatapos ng 1 sa paglipas dito, 557 00:35:48,340 --> 00:35:52,950 at gumagamit ito bitwise AT panlinlang upang sabihin may 1 bit sa input ng user dito? 558 00:35:52,950 --> 00:35:59,220 >> May 1 bit sa input ng user dito? At kung kaya, literal-print 1, tao-print 0. 559 00:35:59,220 --> 00:36:03,780 Ginagawa namin ito na may mga ints dahil lamang na dahilan kung bakit ginagawa namin ng 32 piraso sa halip na 8, 560 00:36:03,780 --> 00:36:06,900 ngunit kung ano ang ipinakilala namin ang pagkatapos ito bitwise AT, ito bitwise O, 561 00:36:06,900 --> 00:36:10,450 at ito kaliwa shift ng operator, na hindi madalas lubha kapaki-pakinabang, 562 00:36:10,450 --> 00:36:12,230 ngunit ito lumiliko out nila. 563 00:36:12,230 --> 00:36:16,560 Sa katunayan, kung ikaw ay kumakatawan sa isang bagay tulad ng isang array ng Booleans 564 00:36:16,560 --> 00:36:21,260 lamang upang kumatawan ang true o false, ipagpalagay na nais mong subaybayan ng kung o hindi 565 00:36:21,260 --> 00:36:24,630 isang silid na puno ng 300 mga mag-aaral ay kasalukuyan, 566 00:36:24,630 --> 00:36:29,420 maaari mong ipinapahayag ng isang array ng laki 300 ng uri bool kaya na makakakuha ka ng 300 bools, 567 00:36:29,420 --> 00:36:33,090 at maaari mong itakda ang bawat sa totoo kung ang isang tao ay dito at maling kung hindi man. 568 00:36:33,090 --> 00:36:37,550 Bakit na pagkatawan sa data na istraktura hindi mabisa? 569 00:36:39,370 --> 00:36:44,800 Ano ang masamang tungkol sa disenyo ng na istraktura ng data, ang isang hanay ng mga 300 bools? 570 00:36:46,190 --> 00:36:49,600 Ano ang isang bool, sa katunayan, sa ilalim ng hood? 571 00:36:49,600 --> 00:36:52,310 Ito, masyadong, ay isang bagay na maaaring hindi pamilyar. 572 00:36:52,310 --> 00:36:53,720 Lumiliko out walang bool. 573 00:36:53,720 --> 00:36:56,620 Namin Tandaan uri ng nilikha na gamit ang cs50.h file, 574 00:36:56,620 --> 00:36:58,630 kung saan mismo kasama ang standard bool. 575 00:36:58,630 --> 00:37:00,930 C uri ng pipi, bagaman, pagdating sa bool. 576 00:37:00,930 --> 00:37:04,880 Gumagamit ito ng 8 bits upang kumatawan sa bawat bool, na kung saan ay ganap na mapag-aksaya 577 00:37:04,880 --> 00:37:09,040 dahil malinaw naman, kung gaano karaming mga bits kailangan mong kumakatawan sa isang bool? Lang 1. 578 00:37:09,040 --> 00:37:13,190 Kaya ito lumiliko out na kung mayroon ka na ngayong ng kakayahan sa bitwise operator 579 00:37:13,190 --> 00:37:17,760 upang manipulahin ang mga indibidwal na mga piraso kahit na sa isang pansamantalang trabaho, kahit na sa isang solong byte, 580 00:37:17,760 --> 00:37:21,380 ito lumiliko out maaari mong bawasan ang memory na kinakailangan upang kumatawan ng isang bagay bobo 581 00:37:21,380 --> 00:37:25,490 tulad ng na pagdalo sa naka-istilong istraktura ng data sa pamamagitan ng isang kadahilanan ng 8. 582 00:37:25,490 --> 00:37:29,820 Sa halip ng paggamit ng walong bits upang kumatawan tama o mali, maaari mong literal gamitin ang isa 583 00:37:29,820 --> 00:37:34,500 sa pamamagitan ng paggamit ng isang solong byte para sa bawat walong mga mag-aaral sa klase 584 00:37:34,500 --> 00:37:41,990 at toggling mula 0 hanggang 1 indibidwal na bit sa pamamagitan ng paggamit ng mga uri ng mababang antas na mga trick. 585 00:37:43,850 --> 00:37:49,460 Na talagang tapusin sa enerhiya. Mayroon bang anumang mga katanungan tungkol sa bitwise pagpapatakbo? 586 00:37:49,460 --> 00:37:52,710 >> Oo. >> [Mag-aaral] Mayroon bang isang eksklusibong o operator? 587 00:37:52,710 --> 00:37:56,440 Oo. May ay isang eksklusibong o operator na ganito ang hitsura, ^, ang simbolo ng karot, 588 00:37:56,440 --> 00:38:02,070 na nangangahulugan lamang ang unang bagay o ang ikalawang bagay ay maaaring maging isang 1 para sa output ng 1. 589 00:38:02,070 --> 00:38:07,750 Mayroon ding hindi, ~, na kung saan ay magbibigay-daan sa iyo upang saliwain ng 0 hanggang 1 o vice versa pati na rin. 590 00:38:07,750 --> 00:38:11,600 At mayroon ding ng karapatan shift operator, >>, na kung saan ay sa tapat ng nakita natin. 591 00:38:11,600 --> 00:38:13,850 Ayos lang. Natin ang mga bagay na ngayon sa isang mas mataas na antas. 592 00:38:13,850 --> 00:38:16,770 Namin na nagsimula sa pamamagitan ng pakikipag-usap tungkol sa teksto at pagkatapos ay pigain ito 593 00:38:16,770 --> 00:38:19,650 at kumakatawan sa teksto na may mas kaunting bilang ng mga bits; 594 00:38:19,650 --> 00:38:22,890 usapan natin ng kaunti tungkol sa kung paano namin ngayon simulan ang pagmamanipula ng mga bagay sa isang antas bitwise. 595 00:38:22,890 --> 00:38:26,640 Natin ngayon mag-zoom muli hanggang 10,000 talampakan sa representasyon 596 00:38:26,640 --> 00:38:29,250 ng mas kumplikadong mga bagay tulad ng graphics. 597 00:38:29,250 --> 00:38:32,950 Narito mayroon kaming isang flag ng Germany, dito kami ay may isa ng Pransya. 598 00:38:32,950 --> 00:38:36,350 Mga ito ay maaaring kinakatawan sa mga format ng file na maaari mong alam - GIF, halimbawa. 599 00:38:36,350 --> 00:38:40,030 Kung nakita mo ang isang imahe sa Web na nagtatapos sa. Gif, 600 00:38:40,030 --> 00:38:43,000 ito ay isang graphics pagpalitin format. 601 00:38:43,000 --> 00:38:47,530 Mga dalawang flag dito uri ng bang ipahiram sa kanilang mga sarili sa compression 602 00:38:47,530 --> 00:38:52,050 para sa kung ano ang marahil halata dahilan? >> [Hindi marinig na mag-aaral tugon] 603 00:38:52,050 --> 00:38:53,440 May ng maraming ng pag-uulit, i-right? 604 00:38:53,440 --> 00:38:57,270 Upang magpadala ng bandila ng Alemanya, sa tingin ng mga ito bilang isang imahe sa screen 605 00:38:57,270 --> 00:38:59,030 -back sa iyong mga araw sa scratch. 606 00:38:59,030 --> 00:39:02,380 Maaari mong isipin ang na may mga indibidwal na pixels o tuldok na sumulat ng isang imahe. 607 00:39:02,380 --> 00:39:06,650 >> May isang buong hilera ng itim na mga tuldok at isa pang buong hilera ng mga itim na tuldok. 608 00:39:06,650 --> 00:39:10,110 May ng grupo ng mga hilera ng mga itim na tuldok na maaari naming makita kung namin talagang naka-zoom in, 609 00:39:10,110 --> 00:39:13,370 mas gusto kapag kami naka-zoom in sa Rob ng mukha sa Photoshop. 610 00:39:13,370 --> 00:39:15,500 Sa lalong madaling namin nakuha mas malalim at mas malalim at mas malalim sa imahe, 611 00:39:15,500 --> 00:39:19,990 Sinimulan mo na nakikita ang pixelation, ang lahat ng mga parisukat na binubuo ang kanyang mata sa kasong iyon. 612 00:39:19,990 --> 00:39:24,130 Parehong deal dito. Kung kami naka-zoom in pa ng kaunti, gusto mong makita ang mga indibidwal na tuldok. 613 00:39:24,130 --> 00:39:27,110 Well, ito ay uri ng basura ng mga bits. 614 00:39:27,110 --> 00:39:32,120 Kung ang isang third ng bandila ay itim at isang third ng bandila ay dilaw at iba pa, 615 00:39:32,120 --> 00:39:34,860 kung bakit hindi namin sa paanuman-compress ang bandila na ito? 616 00:39:34,860 --> 00:39:39,560 At kahit ang French bandila ma-compress kahit ang pattern ay Medyo naiiba ang. 617 00:39:39,560 --> 00:39:44,120 Ito lumiliko ang GIF na file format ay isang Lossless compression format, 618 00:39:44,120 --> 00:39:48,420 na nangangahulugan na maaari mong gawin ang isang imahe tulad ng German-flag dito, 619 00:39:48,420 --> 00:39:53,540 maaari mong itapon ng maraming nito bit hindi sinasakripisyo kalidad. 620 00:39:53,540 --> 00:39:55,340 Ito ay sa kaibahan sa isang bagay tulad ng mga JPEG, 621 00:39:55,340 --> 00:39:57,050 na kung saan karamihan sa atin ay malamang mas pamilyar. 622 00:39:57,050 --> 00:39:59,000 Facebook larawan at Flickr larawan at ang mga tulad ng 623 00:39:59,000 --> 00:40:02,200 ay halos palaging naka-save bilang JPEG na kapag sila-upload, 624 00:40:02,200 --> 00:40:08,100 ngunit ang mga JPEG ay lossy - LOSSY - format kung saan mo itapon bit 625 00:40:08,100 --> 00:40:10,430 ngunit maaari mo ring itapon kalidad. 626 00:40:10,430 --> 00:40:13,890 At kaya kung nag-compress ng mga larawan sa Photoshop o i-upload ang mga ito sa Facebook 627 00:40:13,890 --> 00:40:15,580 o ang mga ito sa isang talagang crappy telepono, 628 00:40:15,580 --> 00:40:19,510 alam mo na ang larawan ay nagsisimula upang makakuha ng napaka nagmamantsa at pixelated, 629 00:40:19,510 --> 00:40:22,290 at na dahil ito compress ng computer o telepono 630 00:40:22,290 --> 00:40:24,550 sa pamamagitan ng literal na ibinabato ang impormasyon layo. 631 00:40:24,550 --> 00:40:28,500 Ngunit GIF ay kamangha-manghang na maaari itong gamitin ng mas kaunting mga piraso kaysa sa maaari ito sa pamamagitan ng default 632 00:40:28,500 --> 00:40:30,750 nang hindi nawawala ang anumang impormasyon. 633 00:40:30,750 --> 00:40:32,410 >> At mahalagang ito nagagawa ito tulad ng sumusunod. 634 00:40:32,410 --> 00:40:38,740 Kaysa sa tindahan sa isang file tulad ng BMP gagawin isang RGB triple para sa itim, itim, itim, itim, 635 00:40:38,740 --> 00:40:42,570 itim, itim, itim, itim, itim, itim, itim, itim at iba pa, 636 00:40:42,570 --> 00:40:45,640 sa halip, ang GIF format ay upang sabihin, "Black," 637 00:40:45,640 --> 00:40:48,330 at pagkatapos, "Ulitin ang 100 beses," o isang bagay tulad na. 638 00:40:48,330 --> 00:40:52,280 "Black, ulitin ito 100 beses, black, ulitin ito ng 100 beses ..." 639 00:40:52,280 --> 00:40:54,530 "Yellow, ulitin ito 100 ulit." 640 00:40:54,530 --> 00:40:57,200 At kaya Naaalala, mahalagang, ang pinakakaliwa pixel 641 00:40:57,200 --> 00:41:02,160 at pagkatapos encodes sa paanuman ang paniwala ng paulit-ulit na pixel muli at muli. 642 00:41:02,160 --> 00:41:06,110 Kaya't GIF ay maaaring pagkatapos compress ang kanilang sarili nang hindi nawawala ang anumang impormasyon. 643 00:41:06,110 --> 00:41:09,510 Ngunit kung mayroon kang upang hulaan, kung na ang algorithm na gifs paggamit, 644 00:41:09,510 --> 00:41:13,180 kung saan ng mga flag na ito, kahit tumingin ito ay katulad sa laki, 645 00:41:13,180 --> 00:41:19,620 ay pagpunta sa mas maliit kapag nai-save sa disk bilang isang GIF? >> [Mag-aaral] Alemanya. 646 00:41:19,620 --> 00:41:21,660 Alemanya ay mas maliit? Bakit? 647 00:41:21,660 --> 00:41:26,620 [Mag-aaral] Dahil ulitin mo ang mga ito marami, maraming beses nang pahalang 648 00:41:26,620 --> 00:41:29,010 at pagkatapos mong ulitin ng isa pang oras. >> Mismong. 649 00:41:29,010 --> 00:41:32,020 Dahil ang mga tao na imbento GIF lamang uri ng mang nagpasya 650 00:41:32,020 --> 00:41:36,040 na pag-uulit ay magagamit pahalang at hindi laterally. 651 00:41:36,040 --> 00:41:40,900 May ng maraming higit pang pag-uulit laterally dito sa German bandila kaysa sa French bandila. 652 00:41:40,900 --> 00:41:44,430 Kaya kung namin ang aktwal na buksan ang isang folder sa aking hard drive na may mga GIF, 653 00:41:44,430 --> 00:41:51,920 maaari mong makita ang aktwal na Aleman bandila dito ay 2 kilobytes at ang French isa ay 4 kilobytes. 654 00:41:51,920 --> 00:41:54,080 Ito ay nangyayari sa isang pagkakataon na ang isa ay dalawang beses ang iba pang, 655 00:41:54,080 --> 00:41:57,960 ngunit sa katunayan ang kaso na ang French bandila ay mas malaking. 656 00:41:57,960 --> 00:42:01,250 >> Kahit na pinag-uusapan natin dito tungkol sa mga graphics, ang parehong mga ideya ay maaaring ilapat sa 657 00:42:01,250 --> 00:42:05,150 hindi bagay tulad ng mga flag ngunit larawan na ng kaunti pa kumplikadong. 658 00:42:05,150 --> 00:42:08,170 Kung ikaw ay gumawa ng isang larawan ng isang mansanas, tiyak ng maraming ng duplicate doon, 659 00:42:08,170 --> 00:42:11,040 kaya kami sa paanuman tandaan na ang default na background asul 660 00:42:11,040 --> 00:42:13,230 at hindi, bilang kanang larawan ay nagmumungkahi, 661 00:42:13,230 --> 00:42:16,830 tandaan ang kulay ng bawat isang pixel sa larawan na ito. 662 00:42:16,830 --> 00:42:21,060 Upang maaari naming magtapon bit ang layo doon nang hindi nawawala ang impormasyon. 663 00:42:21,060 --> 00:42:23,340 Pa rin ang apple mukhang lamang ang parehong. 664 00:42:23,340 --> 00:42:27,510 Sa halimbawang ito dito, maaari mong makita kung ano ang mangyayari sa isang pelikula. 665 00:42:27,510 --> 00:42:31,970 Ito ang kumakatawan lumang-paaralan na reels ng film kung saan sa tuktok ng imahe sa doon 666 00:42:31,970 --> 00:42:36,900 mayroon kang isang RV nagmamaneho nakaraan ng bahay at isang puno. 667 00:42:36,900 --> 00:42:42,130 At bilang na van nag-mamaneho nakaraan mula kaliwa hanggang kanang, kung ano ang malinaw naman hindi nagbabago? 668 00:42:42,130 --> 00:42:45,320 Ang bahay ay hindi pagpunta kahit saan, at ang puno ay hindi pagpunta kahit saan. 669 00:42:45,320 --> 00:42:47,700 Ang tanging bagay na gumagalaw ang van sa kasong ito. 670 00:42:47,700 --> 00:42:51,650 Kaya bilang Background nabagong nagmumungkahi, kung ano ang maaari mong gawin sa mga pelikula 671 00:42:51,650 --> 00:42:56,530 ay katulad lamang itapon impormasyon na hindi magbago sa pagitan frame. 672 00:42:56,530 --> 00:42:58,900 Ito ay karaniwang na kilala bilang interframe compression 673 00:42:58,900 --> 00:43:02,120 kung saan kung ang frame na ito ay mukhang halos magkakahawig na ito, 674 00:43:02,120 --> 00:43:05,390 sabihin hindi abala sa pag-iimbak ng sa disk ng magkakahawig na impormasyon 675 00:43:05,390 --> 00:43:09,250 sa mga intermediate na frame, sabihin lamang gamitin ang key frame minsan 676 00:43:09,250 --> 00:43:13,420 na aktwal na-imbak na impormasyon redundantly lamang bilang isang maliit katinuan suriin. 677 00:43:13,420 --> 00:43:18,620 >> Sa pamamagitan ng kaibahan, ang isa pang diskarte sa pigain video sa ikalawang at mas mababang mga halimbawa dito, 678 00:43:18,620 --> 00:43:23,970 kung saan kaysa sa store 30 mga frame, bakit hindi mo lang iimbak ang 15 na frame ng ikalawang halip? 679 00:43:23,970 --> 00:43:27,070 Kaysa sa pelikula uri ng dumadaloy maganda, perpektong, 680 00:43:27,070 --> 00:43:30,060 maaaring magmukhang ito-ang ilang sandali, ang isang maliit na old school, 681 00:43:30,060 --> 00:43:37,190 ngunit ang net na epekto ay upang gamitin ang mga malayo mas kaunti bit kaysa sa maaaring kung hindi man ay kinakailangan. 682 00:43:37,190 --> 00:43:39,240 Kaya kung saan ay ito pagkatapos na mag-iwan sa amin? 683 00:43:39,240 --> 00:43:41,700 Na ay isang bit ng isang bukod sa kung saan pa ang maaari kang pumunta sa compression. 684 00:43:41,700 --> 00:43:45,140 Para sa higit pa sa na, isang klase tulad ng CS175 dito. 685 00:43:45,140 --> 00:43:46,990 Narito ang isa pang halimbawa sa loob ng video. 686 00:43:46,990 --> 00:43:49,190 Kung ang pukyutan ay ang tanging bagay na gumagalaw, 687 00:43:49,190 --> 00:43:51,790 Maaari mo ba talagang itapon impormasyon sa mga gitnang frame 688 00:43:51,790 --> 00:43:55,260 dahil ang bulaklak at kalangitan at dahon ay hindi nagbabago. 689 00:43:55,260 --> 00:43:57,960 Ngunit ipaalam sa ngayon isaalang-alang ang isang huling bagay. 690 00:43:57,960 --> 00:44:03,890 Sa susunod na 5 minuto iwanan namin C likod magpakailanman sa panayam? Oo. Hindi sa ang mga psets, bagaman. 691 00:44:03,890 --> 00:44:10,210 Huling kuwento tungkol sa C at pagkatapos namin sa napakaseksi bagay 692 00:44:10,210 --> 00:44:13,870 kinasasangkutan ng HTML at Web at woo-hoo. Ayos lang. 693 00:44:13,870 --> 00:44:16,050 Narito kami. Na ang pagganyak. 694 00:44:16,050 --> 00:44:20,020 Ito ay lumiliko ang lahat oras na ito kapag tayo ay pagsulat ng mga programa nagsasagawa kami ng kumalatong. 695 00:44:20,020 --> 00:44:23,890 At kumalatong, namin ang sinabi mula noong unang linggo medyo mas tumatagal ng source code 696 00:44:23,890 --> 00:44:25,740 at convert ang mga ito sa object code. 697 00:44:25,740 --> 00:44:28,540 Ito ay tumatagal ng C at convert ito sa 0s at 1s. 698 00:44:28,540 --> 00:44:32,150 Ko ang uri ng ay namamalagi sa iyo para sa isang ilang linggo dahil ito ay hindi pa bilang simpleng bilang na. 699 00:44:32,150 --> 00:44:36,750 >> May ng maraming mas pagpunta sa ilalim ng hood kapag kang magpatakbo ng isang programa tulad ng kumalatong. 700 00:44:36,750 --> 00:44:39,560 Sa katunayan, ang proseso ng kino-compile ang isang programa ay maaaring talagang summarized, 701 00:44:39,560 --> 00:44:42,210 bilang maaari mong isipin ang mula sa Rob video sa compiler, 702 00:44:42,210 --> 00:44:47,580 sa mga 4 na hakbang: pre-processing, kino-compile ang mismong, assembling, at pag-link. 703 00:44:47,580 --> 00:44:51,950 Ngunit kami sa klase at karamihan ng mga tao sa mundo ay karaniwang sabihin sa maikling pangungusap ang lahat ng mga hakbang na ito 704 00:44:51,950 --> 00:44:54,410 bilang lamang "kino-compile." 705 00:44:54,410 --> 00:44:58,070 Ngunit kung sinimulan namin sa source code tulad nito, maalala muli ang ay marahil ang pinakasimpleng C programa 706 00:44:58,070 --> 00:45:03,530 namin ang nakasulat sa gayon ngayon, isipin ang na kapag pinagsama-sama ito ay nagtatapos up naghahanap ng tulad nito. 707 00:45:03,530 --> 00:45:07,310 Ngunit may talagang isang intermediate na hakbang, at ang mga hakbang ay ang mga sumusunod. 708 00:45:07,310 --> 00:45:10,750 Unang bagay na ito sa pinakatuktok ng mga ito at karamihan sa aming mga programa, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Ano ang ibig # include ko para sa amin? 711 00:45:17,210 --> 00:45:24,150 Ito medyo magkano ang kopya at pastes ang mga nilalaman ng stdio.h sa aking file sa gayon ay bakit? 712 00:45:24,150 --> 00:45:27,220 Bakit ko pakialam tungkol sa nilalaman ng stdio.h? Ano ang doon ng interes? 713 00:45:27,220 --> 00:45:32,310 Printf ng deklarasyon, ang prototype nito, sa gayon na tagatala pagkatapos ay alam kung ano ang ibig sabihin ko 714 00:45:32,310 --> 00:45:34,900 kapag ako banggitin ang function na printf. 715 00:45:34,900 --> 00:45:39,390 Kaya hakbang 1 sa kino-compile ang pre-processing, kung saan ang isang programa tulad ng kumalatong 716 00:45:39,390 --> 00:45:43,450 o ilang lingkod programa na kumalatong may bumabasa ng iyong code sa itaas hanggang sa ibaba, 717 00:45:43,450 --> 00:45:47,740 sa kaliwa sa kanan, at anumang oras nakikita ito ng # simbolo ay sinundan sa pamamagitan ng isang keyword tulad ng kinabibilangan, 718 00:45:47,740 --> 00:45:53,980 ito ay gumaganap na pagpapatakbo, pagkopya at pag-paste sa kasong ito stdio.h sa iyong file. 719 00:45:53,980 --> 00:45:55,510 Na hakbang 1. 720 00:45:55,510 --> 00:45:59,620 Pagkatapos mayroon kang isang mas mas malaking file C dahil sa ang malaking kopyahin, i-paste trabaho na lang nangyari. 721 00:45:59,620 --> 00:46:01,710 >> Hakbang 2 ngayon ay kino-compile. 722 00:46:01,710 --> 00:46:04,880 Ngunit ito lumiliko kino-compile ang tumatagal ng source code na ganito ang hitsura 723 00:46:04,880 --> 00:46:08,160 at lumiliko ang mga ito sa isang bagay na ganito ang hitsura, 724 00:46:08,160 --> 00:46:12,560 na para sa mga pamilyar ay tinatawag na? >> [Mag-aaral] Assembly. >> Assembly wika. 725 00:46:12,560 --> 00:46:16,700 Ito ay talagang isang bagay na kung gagawin mo CS61 makikita mo sumisid sa nang mas detalyado. 726 00:46:16,700 --> 00:46:22,380 Na ito ay tungkol sa mas malapit hangga't maaari kang makakuha sa pagsusulat ng 0s at 1s iyong sarili 727 00:46:22,380 --> 00:46:25,850 ngunit ang pagsusulat ng mga bagay sa isang paraan na pa rin na gumagawa ng hindi bababa sa ilang sandali ng kahulugan. 728 00:46:25,850 --> 00:46:30,760 Ito ang mga tagubilin ng machine, at kung mag-scroll namin pababa sa pangunahing function na dito, 729 00:46:30,760 --> 00:46:35,470 mapansin na may push pagtuturo na ito, ilipat ang pagtuturo, ibawas ang pagtuturo, 730 00:46:35,470 --> 00:46:38,550 tumawag ng pagtuturo, at iba pa. 731 00:46:38,550 --> 00:46:42,930 Kapag marinig mo na ang iyong computer ay may Intel loob, 732 00:46:42,930 --> 00:46:46,180 mayroon kang isang Intel CPU sa iyong Mac o PC, kung ano ang na ibig sabihin nito? 733 00:46:46,180 --> 00:46:51,200 CPU ay binuo sa pamamagitan ng mga kumpanya tulad ng Intel-unawa sa Mga ilang mga tagubilin. 734 00:46:51,200 --> 00:46:55,770 Wala silang ideya kung anong mga function tulad makipagpalitan ng o pangunahing ay per se, 735 00:46:55,770 --> 00:47:00,060 ngunit sila malaman kung ano ang mga napakababang-antas na mga tagubilin tulad idagdag, ibawas, itulak, 736 00:47:00,060 --> 00:47:02,430 ilipat, tumawag, at iba pa ay. 737 00:47:02,430 --> 00:47:06,170 Kaya kapag makatipon mo C code sa pagpupulong wika, 738 00:47:06,170 --> 00:47:11,820 iyong napaka user friendly na na anyo code ay convert sa isang bagay na ganito ang hitsura, 739 00:47:11,820 --> 00:47:21,670 na literal na gumagalaw bytes o 4 bytes sa paligid sa tulad maliit na unit sa loob at labas ng CPU. 740 00:47:21,670 --> 00:47:26,820 Ngunit sa wakas, kapag ang kumalatong ay handa na ito na representasyon ng iyong programa 741 00:47:26,820 --> 00:47:30,940 sa 0s at 1s, pagkatapos ay ang hakbang na tinatawag assembling ang mangyayari, 742 00:47:30,940 --> 00:47:33,850 at ito muli ang lahat ng mangyayari sa magpikit ng isang mata kapag tumatakbo kumalatong. 743 00:47:33,850 --> 00:47:39,300 Sisimulan namin dito, output ng file tulad nito, at pagkatapos-convert ito sa mga 0s at 1s. 744 00:47:39,300 --> 00:47:42,000 At kung gusto mong bumalik sa ilang mga punto at aktwal na makita ito sa aksyon, 745 00:47:42,000 --> 00:47:48,220 kung pumunta ako sa hello1.c--ito ay isa ng ang unang programa na itinuturing namin ang - 746 00:47:48,220 --> 00:47:53,710 normal namin ay makatipon ito may kalatungin hello1.c at ito ay magbibigay sa amin ng a.out. 747 00:47:53,710 --> 00:47:59,890 Kung sa pamamagitan ng kaibahan sa halip bigyan ito ng-S-flag, kung ano ang makakakuha ka ng hello1.s 748 00:47:59,890 --> 00:48:02,750 at ang tunay na makita ang assembly wika. 749 00:48:02,750 --> 00:48:05,750 >> Ako ginagawa ito para sa isang maikling programa, ngunit kung pumunta ka rin para mang-uayabit 750 00:48:05,750 --> 00:48:08,740 o Ibalik muli o anumang programa na naisulat at lamang sa labas ng pagkausyoso 751 00:48:08,740 --> 00:48:13,240 gusto mong makita kung ano ang aktwal na hitsura tulad ng, kung ano ang aktwal na fed sa CPU, 752 00:48:13,240 --> 00:48:15,700 maaari mong gamitin ang na-S-flag may kalatungin. 753 00:48:15,700 --> 00:48:17,770 Ngunit bilang wakas, may pa rin isang gotcha. 754 00:48:17,770 --> 00:48:21,810 Narito ang mga 0s at 1s na kumakatawan sa aking pagpapatupad ng halo, mundo. 755 00:48:21,810 --> 00:48:25,530 Subalit ginamit ko ng iba function sa aking programa. 756 00:48:25,530 --> 00:48:28,710 Kaya kahit na ang proseso ay ko tumagal ng hello.c, 757 00:48:28,710 --> 00:48:34,280 ito ay makakakuha ng inipon sa assembly code, at pagkatapos ito ay makakakuha binuo sa 0s at 1s, 758 00:48:34,280 --> 00:48:37,460 ang tanging 0s at 1s na outputted sa puntong ito sa panahon 759 00:48:37,460 --> 00:48:40,270 ay ang mga na resulta mula sa aking code. 760 00:48:40,270 --> 00:48:44,400 Ngunit ang mga tao na sinulat ni printf, inipon nila ang kanilang mga code 20 taon ang nakalipas 761 00:48:44,400 --> 00:48:47,000 at ngayon ito na naka-install sa isang lugar sa appliance, 762 00:48:47,000 --> 00:48:51,610 kaya namin sa paanuman upang sumanib 0s kanyang at 1s may aking 0s at 1s, 763 00:48:51,610 --> 00:48:56,160 at na pinagsasama-amin sa ika-4 at huling hakbang ng kino-compile ang, na kilala bilang pag-link. 764 00:48:56,160 --> 00:48:58,680 Kaya sa kaliwang bahagi namin ang eksaktong parehong larawan tulad ng dati: 765 00:48:58,680 --> 00:49:02,580 hello.c nagiging nagiging 0s at 1s ang assembly code. 766 00:49:02,580 --> 00:49:05,960 Ngunit isipin ang na ginamit ko ang standard I / O library sa aking code, 767 00:49:05,960 --> 00:49:10,350 at nangangahulugan iyon sa isang lugar sa computer may isang file na tinatawag stdio.c 768 00:49:10,350 --> 00:49:13,980 o hindi bababa sa ang inipon na bersyon nito dahil may ilang taon na ang nakalipas 769 00:49:13,980 --> 00:49:18,530 inipon stdio.c sa assembly code at pagkatapos ng buong bungkos ng 0s at 1s. 770 00:49:18,530 --> 00:49:21,130 Ito ay kung ano ang kilala bilang isang static o dynamic library. 771 00:49:21,130 --> 00:49:23,350 Ang ilang file sitting isang lugar sa appliance. 772 00:49:23,350 --> 00:49:28,710 >> Ngunit bilang wakas, mayroon akong tumagal ang aking 0s at 1s at ng taong iyon 0s at 1s 773 00:49:28,710 --> 00:49:32,760 at sa paanuman link sa mga ito nang magkasama, literal pagsamahin ang mga 0s at 1s 774 00:49:32,760 --> 00:49:37,900 sa isang solong file na tinatawag na a.out o hello1 o anumang tinatawag ko ang aking programa 775 00:49:37,900 --> 00:49:43,320 kaya na ang resulta ay may lahat ng 1s at 0s na dapat sumulat sa aking programa. 776 00:49:43,320 --> 00:49:45,660 Kaya lahat ng oras na ito ang semestre na ito kapag na ginagamit mo kumalatong 777 00:49:45,660 --> 00:49:48,750 at mas kamakailan sa pagtakbo upang patakbuhin ang kumalatong, 778 00:49:48,750 --> 00:49:53,580 lahat ng mga hakbang na ito ay nangyayari uri ng agad na ngunit napaka sadyang. 779 00:49:53,580 --> 00:49:57,830 At kaya kung patuloy ka sa sa computer science, lalo CS61, 780 00:49:57,830 --> 00:50:00,850 ito ay ang layer na kailangan mong patuloy na alisan ng balat off doon 781 00:50:00,850 --> 00:50:06,980 pakikipag-usap tungkol sa kahusayan, seguridad implikasyon, at tulad ng mga mas mababang mga detalye ng antas. 782 00:50:06,980 --> 00:50:09,220 Ngunit na iyon, hindi namin tungkol sa iwanan ang C sa likod. 783 00:50:09,220 --> 00:50:11,420 Natin sige at ang aming 5-minutong break na ngayon, 784 00:50:11,420 --> 00:50:14,190 at kapag dumating namin pabalik: ang Internet. 785 00:50:17,280 --> 00:50:19,170 Ayos lang. Kami ay bumalik. 786 00:50:19,170 --> 00:50:23,590 Ngayon namin simulan ang aming hitsura hindi lamang sa HTML dahil, tulad ng makikita mo, 787 00:50:23,590 --> 00:50:26,050 HTML mismo ay talagang medyo simple 788 00:50:26,050 --> 00:50:29,270 ngunit talagang sa web programming mas pangkalahatang paraan, networking mas pangkalahatang paraan, 789 00:50:29,270 --> 00:50:31,770 at kung paano ang lahat ng mga teknolohiya-tipon 790 00:50:31,770 --> 00:50:35,400 -daan sa amin upang lumikha ng higit na mas sopistikadong mga programa sa ibabaw ng Internet 791 00:50:35,400 --> 00:50:38,690 sa samakatuwid ay malayo kami nagawa sa mga black and white na bintana. 792 00:50:38,690 --> 00:50:42,140 Sa katunayan, sa puntong ito sa semestre kahit kaming magpalipas medyo mas kaunting oras 793 00:50:42,140 --> 00:50:46,200 sa PHP, HTML, CSS, JavaScript, SQL at iba pa, 794 00:50:46,200 --> 00:50:48,480 karamihan sa mga mag-aaral gawin pagtatapos paggawa ng pangwakas na mga proyekto na web-based 795 00:50:48,480 --> 00:50:51,230 dahil tulad ng makikita mo, background ka na ngayon sa C 796 00:50:51,230 --> 00:50:54,450 napaka naaangkop sa mga mas mataas na antas ng wika. 797 00:50:54,450 --> 00:50:56,800 >> At bilang simulan mo ang iniisip tungkol sa iyong panghuling proyekto, 798 00:50:56,800 --> 00:50:59,940 kung saan, tulad ng Problema Itakda 0, kung saan ikaw ay hinihikayat 799 00:50:59,940 --> 00:51:02,160 na gawin ang karamihan sa anumang bagay ng interes sa iyo sa simula, 800 00:51:02,160 --> 00:51:05,790 ang panghuling proyekto ay ang iyong pagkakataon sa iyong newfound kaalaman at katalinuhan na may C 801 00:51:05,790 --> 00:51:09,850 o PHP o JavaScript o i para sa isang iikot 802 00:51:09,850 --> 00:51:12,330 at lumikha ng iyong sariling piraso ng software para sa mundo upang makita. 803 00:51:12,330 --> 00:51:17,770 At sa binhi sa iyo ng mga ideya, alam na maaari mong magtungo dito, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Bawat taon, namin mangalap ng mga ideya mula sa mga guro at kawani at mga grupo ng mag-aaral sa campus 805 00:51:21,800 --> 00:51:27,330 lamang na isumite ang kanilang mga ideya para sa mga kawili-wiling mga bagay na maaaring malutas sa paggamit ng computer, 806 00:51:27,330 --> 00:51:29,860 paggamit ng mga website, gamit ang software. 807 00:51:29,860 --> 00:51:32,360 Kaya kung ikaw ay struggling upang makabuo ng isang ideya ng iyong sariling, 808 00:51:32,360 --> 00:51:35,790 sa pamamagitan ng ang lahat ng mga paraan mag-scroll sa pamamagitan ng ideya mula sa taong ito at huling. 809 00:51:35,790 --> 00:51:39,990 Perpektong okay upang matugunan isang proyekto na tackled bago. 810 00:51:39,990 --> 00:51:44,540 Nakita namin ang maraming mga apps para makita ang katayuan ng laundry sa campus, 811 00:51:44,540 --> 00:51:47,000 maraming apps para sa pag-navigate sa dining hall menu, 812 00:51:47,000 --> 00:51:49,540 maraming apps para sa pag-navigate ng kurso catalog at ang mga tulad. 813 00:51:49,540 --> 00:51:53,680 At sa katunayan, sa isang hinaharap panayam at sa hinaharap na mga seminar, 814 00:51:53,680 --> 00:51:57,750 namin ipakilala sa ilang mga pampublikong magagamit na mga API, parehong komersyal na magagamit 815 00:51:57,750 --> 00:52:02,520 pati na rin dito magagamit mula sa CS50 sa campus upang mayroon kang access sa data 816 00:52:02,520 --> 00:52:04,910 at maaaring gumawa ng mga kawili-wiling bagay dito. 817 00:52:04,910 --> 00:52:09,380 Kaya higit pa sa panghuling proyekto sa loob ng ilang araw kapag mailabas na namin ang detalye ng, 818 00:52:09,380 --> 00:52:12,990 ngunit sa ngayon, alam na maaari kang gumawa ng solo o may isa o dalawang kaibigan 819 00:52:12,990 --> 00:52:16,010 sa karamihan ng anumang proyekto ng interes sa iyo. 820 00:52:16,010 --> 00:52:18,080 Sa Internet. 821 00:52:18,080 --> 00:52:22,300 Pumunta ka magpatuloy at hilahin ang iyong laptop, pumunta ka sa facebook.com para sa unang pagkakataon, 822 00:52:22,300 --> 00:52:27,020 hindi pag-log sa kamakailan, at pindutin ang Enter. Anong eksaktong mangyayari? 823 00:52:27,020 --> 00:52:30,150 >> Kapag pinindot ninyo ang Enter sa iyong computer, ang maramihang mga hakbang 824 00:52:30,150 --> 00:52:32,600 simulan ang uri ng magically nangyayari. 825 00:52:32,600 --> 00:52:35,960 Kaya mo dito sa kaliwa, web server tulad ng Facebook dito sa kanan, 826 00:52:35,960 --> 00:52:42,500 at sa paanuman mo ginagamit ang wika na ito na tinatawag na HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP ay hindi isang programming language. Pa ng isang protocol. 828 00:52:46,770 --> 00:52:52,310 Ito ay isang hanay ng mga convention na mga browser ng web at mga web server gamitin kapag intercommunicating. 829 00:52:52,310 --> 00:52:54,360 At kung ano ay nangangahulugan na ito ay ang mga sumusunod. 830 00:52:54,360 --> 00:52:56,790 Karamihan bang sa tunay na mundo, mayroon kaming mga convention 831 00:52:56,790 --> 00:53:00,140 kung saan kung matugunan mo ang ilang mga tao sa unang pagkakataon, kung hindi tututol kayo humoring sa akin dito, 832 00:53:00,140 --> 00:53:03,980 Baka ko darating sa iyo, sabihing, "Hi, ang aking pangalan ay David." >> Hi, David. Ang pangalan ko ay Sammy. 833 00:53:03,980 --> 00:53:05,770 "Kumusta, David. Pangalan ko ay Sammy." 834 00:53:05,770 --> 00:53:08,310 Kaya ngayon lang namin na nakatuon sa ganitong uri ng ulok tao protocol 835 00:53:08,310 --> 00:53:12,200 kung saan ko na pinasimulan ng protocol, Sammy ay tumutugon, 836 00:53:12,200 --> 00:53:15,060 namin na inalog ng mga kamay, at ang transaksyon ay kumpleto. 837 00:53:15,060 --> 00:53:18,260 HTTP ay lubos na katulad sa espiritu. 838 00:53:18,260 --> 00:53:23,350 Kapag www.facebook.com ang iyong web browser kahilingan, 839 00:53:23,350 --> 00:53:27,020 kung ano ang iyong browser ay talagang ginagawa ang pagpapahaba ng kamay nito, kaya na magsalita, 840 00:53:27,020 --> 00:53:29,960 sa server at pagpapadala nito ng isang mensahe. 841 00:53:29,960 --> 00:53:34,220 At ang mensahe na ay karaniwang isang bagay tulad makapag - kung ano ang nais mong upang makakuha ng? - 842 00:53:34,220 --> 00:53:38,740 makakuha ng sa akin ang home page, na kung saan ay karaniwang naitala sa pamamagitan ng isang slash sa dulo ng isang URL. 843 00:53:38,740 --> 00:53:43,790 At lamang kaya alam mo kung ano ang wika ako nagsasalita, ako ang browser ako pagpunta sa sabihin sa iyo 844 00:53:43,790 --> 00:53:46,930 na ako nagsasalita ng HTTP na bersyon 1.1, 845 00:53:46,930 --> 00:53:51,980 At din para sa mabuting panukala, ako pagpunta sa sabihin sa iyo na ang host na gusto ko sa home page ng 846 00:53:51,980 --> 00:53:54,120 ay facebook.com. 847 00:53:54,120 --> 00:53:57,730 Karaniwan, ang isang web browser, walang anumang kaalaman sa iyo, ang mga tao, 848 00:53:57,730 --> 00:54:03,350 nagpapadala ng mensaheng ito sa Internet kapag ikaw ay simpleng i-type ang www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Ipasok, sa iyong browser. 850 00:54:05,370 --> 00:54:07,300 At kung ano ang Facebook tumugon na may? 851 00:54:07,300 --> 00:54:12,540 Tumugon na may ilang mga katulad na anyo misteriyoso mga detalye ngunit din higit pa. 852 00:54:12,540 --> 00:54:14,310 Hayaan akong magpatuloy sa home page ng Facebook dito. 853 00:54:14,310 --> 00:54:17,480 Ito ay ang screen na karamihan sa atin ay malamang na hindi kailanman makita kung ikaw ay manatiling naka-log in ka sa lahat ng oras, 854 00:54:17,480 --> 00:54:19,830 ngunit ito talaga ang kanilang home page. 855 00:54:19,830 --> 00:54:24,150 Kung gagawin namin ito sa Chrome, mapansin na maaari mong makuha ang mga maliit na menu ng konteksto. 856 00:54:24,150 --> 00:54:26,980 Gamit ang Chrome, kung sa Mac OS, Windows, Linux, o ang tulad ng, 857 00:54:26,980 --> 00:54:31,840 kung Kontrolin click o kaliwa-click, maaari mong karaniwang makuha ang isang menu na ganito ang hitsura, 858 00:54:31,840 --> 00:54:35,870 kung saan ang ilang mga pagpipilian Naghihintay, isa na kung saan ay Tingnan ang Pinagmulan ng Pahina. 859 00:54:35,870 --> 00:54:39,920 Maaari mo ring karaniwang sa mga bagay na ito sa pamamagitan ng pagpunta sa View menu at poking sa paligid. 860 00:54:39,920 --> 00:54:42,750 Halimbawa, dito sa ilalim ng View, Developer ay ang parehong bagay. 861 00:54:42,750 --> 00:54:45,780 Ako pagpunta sa sige at tingnan sa View Page Source. 862 00:54:45,780 --> 00:54:50,800 Ano ang makikita mo ang HTML na Mark ay nakasulat upang kumatawan sa facebook.com. 863 00:54:50,800 --> 00:54:55,910 Ito ay isang kumpletong gulo dito, ngunit naming makita na ito gumagawa ng kaunti pa sa pakiramdam bago mahaba. 864 00:54:55,910 --> 00:54:59,840 Ngunit mayroong ilang mga pattern dito. Hayaan sa akin na mag-scroll down sa bagay-bagay na tulad nito. 865 00:54:59,840 --> 00:55:05,730 Ito ay mahirap para sa isang tao na basahin ang, ngunit mapapansin na may ang pattern na ito ng angled bracket 866 00:55:05,730 --> 00:55:10,360 sa mga keyword tulad ng pagpipilian, ang mga keyword tulad ng halaga, ang ilang mga naka-quote na string. 867 00:55:10,360 --> 00:55:15,660 Ito ay kung saan, kapag nag-sign up ka para sa unang pagkakataon, tinukoy kung ano ang iyong taon ng kapanganakan. 868 00:55:15,660 --> 00:55:19,020 Na drop-down na menu ng mga taon ng kapanganakan sa paanuman naka-encode dito 869 00:55:19,020 --> 00:55:23,870 sa wikang ito na tinatawag na HTML, Hypertext Markup Language. 870 00:55:23,870 --> 00:55:27,730 Sa ibang salita, kapag humihiling ng iyong browser ng web page, 871 00:55:27,730 --> 00:55:30,610 ito ay nagsasalita ng convention na ito na tinatawag na HTTP. 872 00:55:30,610 --> 00:55:35,170 Ngunit kung ano ang facebook.com tumugon sa kahilingan na may? 873 00:55:35,170 --> 00:55:38,260 >> Tumugon sa ilan sa mga misteriyoso mensahe, dahil kakailanganin namin makita sa isang sandali. 874 00:55:38,260 --> 00:55:43,760 Ngunit karamihan ng mga tugon sa form ng HTML, Hypertext Markup Language. 875 00:55:43,760 --> 00:55:47,170 Na ang aktwal na wika na kung saan ang isang web page ay nakasulat. 876 00:55:47,170 --> 00:55:52,030 At kung ano ang isang web browser ay talagang ay pagkatapos ay, kapag nakatanggap ng isang bagay na ganito ang hitsura, 877 00:55:52,030 --> 00:55:57,120 bumabasa itaas hanggang sa ibaba, kaliwa papuntang kanan, at anumang oras nakikita ang isa sa mga angled bracket 878 00:55:57,120 --> 00:56:03,370 sinundan sa pamamagitan ng isang keyword tulad ng pagpipilian, ito ay ipinapakita na markup language sa naaangkop na paraan. 879 00:56:03,370 --> 00:56:06,820 Sa kasong ito, ipakita ang isang drop-down menu ng taon. 880 00:56:06,820 --> 00:56:09,240 Ngunit muli, ito ay isang kumpletong gulo upang tumingin sa. 881 00:56:09,240 --> 00:56:16,630 Na ito ay hindi dahil sa Facebook developer manifest 0 para sa 5 para sa estilo, halimbawa. 882 00:56:16,630 --> 00:56:20,190 Ito ay dahil karamihan ng code na magsulat sila ay, sa katunayan, nakasulat maganda, 883 00:56:20,190 --> 00:56:22,450 na rin Nagkomento, mabuti indent, at tulad ng, 884 00:56:22,450 --> 00:56:26,080 ngunit ng mga machine ng kurso, computer, browser talagang hindi magbigay ng isang sumpain 885 00:56:26,080 --> 00:56:27,890 kung ang iyong code ay well-istilong. 886 00:56:27,890 --> 00:56:33,100 At sa katunayan, ito ay ganap na mapag-aksaya sa pindutin ang tab na key ang lahat ng mga oras na iyon 887 00:56:33,100 --> 00:56:37,650 at upang ilagay ang mga komento lahat sa iyong buong code at piliin ang talagang mapaglarawang variable pangalan 888 00:56:37,650 --> 00:56:42,340 dahil kung ang browser ay hindi pakialam, ang lahat ng ginagawa mo sa pagtatapos ng araw ay pag-aaksaya ng mga bytes. 889 00:56:42,340 --> 00:56:46,660 >> Kaya ito lumiliko kung ano ang karamihan sa mga website ay kahit na ang source code para sa facebook.com, 890 00:56:46,660 --> 00:56:49,550 para sa cs50.net at ang lahat ng mga iba pang mga website sa Internet 891 00:56:49,550 --> 00:56:53,730 ay karaniwang mahusay na nakasulat at nagkomento na rin at mahusay na naka-indent at ang mga tulad ng, 892 00:56:53,730 --> 00:56:59,270 karaniwang bago ang website ay ilagay papunta sa Internet, ang code ay minified, 893 00:56:59,270 --> 00:57:02,970 kung saan ang HTML at CSS - ibang bagay makikita namin sa lalong madaling panahon makita - 894 00:57:02,970 --> 00:57:05,960 ang code ng JavaScript na makikita namin sa lalong madaling panahon ang mga naka-compress na, 895 00:57:05,960 --> 00:57:09,250 kung saan mahaba ang variable na pangalan maging X at Y at Z, 896 00:57:09,250 --> 00:57:13,900 at ang lahat ng na whitespace na ginagawang lahat tumingin kaya nababasa lahat itinapon ang layo, 897 00:57:13,900 --> 00:57:17,700 dahil kung sa tingin mo tungkol sa ito sa ganitong paraan, Facebook ay nakakakuha ng isang bilyong pahina hit sa isang araw - 898 00:57:17,700 --> 00:57:21,670 isang bagay na mabaliw tulad na - kaya kung ano kung programmer ng na anal 899 00:57:21,670 --> 00:57:26,660 pindutin ang space bar isang labis na oras upang i-indent ang ilang linya ng code napaka higit pa? 900 00:57:26,660 --> 00:57:29,500 Ano ang implikasyon sa kung Facebook pinapanatili na whitespace 901 00:57:29,500 --> 00:57:32,880 sa lahat ng bytes magpadala sila pabalik sa mga tao sa Internet? 902 00:57:32,880 --> 00:57:36,400 Pagpindot ang space bar nang isang beses ay nagbibigay sa iyo ng dagdag na byte sa iyong file. 903 00:57:36,400 --> 00:57:39,730 At kung ang isang bilyong katao pagkatapos ay magpatuloy upang i-download ang home page sa araw na iyon, 904 00:57:39,730 --> 00:57:42,060 kung magkano ang mas maraming data na ipinadala sa Internet? 905 00:57:42,060 --> 00:57:45,200 Ang isang gigabyte para sa walang magandang dahilan. 906 00:57:45,200 --> 00:57:48,510 At ipinagkaloob, para sa maraming mga website na ito ay hindi tulad ng nasusukat na mga isyu, 907 00:57:48,510 --> 00:57:51,030 ngunit para sa Facebook, Google, para sa ilan sa mga pinaka-popular na website 908 00:57:51,030 --> 00:57:54,860 may mahusay na insentibo sa pananalapi sa iyong code na hitsura ng gulo 909 00:57:54,860 --> 00:57:58,980 sa gayon ay ginagamit bilang ilang mga byte hangga't maaari sa karagdagan sa pagkatapos pigain ito 910 00:57:58,980 --> 00:58:01,500 gamit ang isang bagay tulad ng zip, ang algorithm ng tinatawag gzip, 911 00:58:01,500 --> 00:58:04,250 na browser ang ginagawa para sa iyo awtomatikong. Ngunit ito ay kakila-kilabot. 912 00:58:04,250 --> 00:58:08,060 Hindi namin kailanman malaman kahit ano tungkol sa mga website ng ibang mga tao at kung paano mag-disenyo ng mga web page 913 00:58:08,060 --> 00:58:09,680 kung mayroon kaming upang tingnan ito tulad nito. 914 00:58:09,680 --> 00:58:13,620 >> Kaya sa kabutihang-palad, ang mga browser tulad ng Chrome at IE at Firefox mga araw na ito 915 00:58:13,620 --> 00:58:16,450 karaniwang ay may built-in na mga tool ng nag-develop. 916 00:58:16,450 --> 00:58:21,730 Sa katunayan, kung pumunta ako pababa dito upang Siyasatin ang Elemento o kung pumunta ako sa Tingnan, Developer, 917 00:58:21,730 --> 00:58:25,220 at pumunta sa Tool ng Developer tahasang, 918 00:58:25,220 --> 00:58:27,640 ang window na ito sa ilalim ng aking screen ngayon nagpa-pop up. 919 00:58:27,640 --> 00:58:31,230 Ito ay isang maliit na intimidating sa unang dahil may maraming mga pamilyar na mga tab dito, 920 00:58:31,230 --> 00:58:34,510 ngunit kung ako mag-click sa Mga Elemento ng lahat ng mga paraan sa ibaba sa kaliwa, 921 00:58:34,510 --> 00:58:38,810 Chrome ay malinaw naman medyo na smart. Alam kung paano i-interpret ang lahat ng ang code na ito. 922 00:58:38,810 --> 00:58:42,320 At kaya kung ano ang Chrome ginagawa ito cleans lahat ng Facebook na HTML. 923 00:58:42,320 --> 00:58:45,680 Kahit na hindi whitespace doon, may indentation doon, 924 00:58:45,680 --> 00:58:51,120 ngayon mapansin na maaari kong simulan upang mag-navigate sa web page na ito ang lahat ng mga mas hierarchically. 925 00:58:51,120 --> 00:58:56,910 Ito lumiliko out na ang bawat web page na nakasulat sa isang wika na tinatawag na HTML5 ay dapat magsimula sa mga ito, 926 00:58:56,910 --> 00:59:03,980 ito DOCTYPE deklarasyon, kaya na magsalita: 927 00:59:03,980 --> 00:59:07,840 Uri ng ilaw at kulay abo doon, ngunit na ang unang linya ng code sa file na ito, 928 00:59:07,840 --> 00:59:12,080 at na lamang ay nagsasabi sa browser, "Uy, dito ay ilang mga HTML5. Narito ay isang web page." 929 00:59:12,080 --> 00:59:18,490 Ang unang bukas bracket lampas na mangyayari ito bagay, isang bukas na HTML tag bracket, 930 00:59:18,490 --> 00:59:22,320 at pagkatapos ay kung ako puwedeng sumisid sa mas malalim - mga arrow na ito ay ganap na walang kahulugan; 931 00:59:22,320 --> 00:59:25,140 ito ay para lamang sa kapakanan pagtatanghal, ang mga ito ay hindi tunay na sa file - 932 00:59:25,140 --> 00:59:30,300 mapansin na sa loob ng HTML tag ng Facebook, ang anumang bagay na nagsisimula sa isang bukas na bracket 933 00:59:30,300 --> 00:59:32,910 at pagkatapos ay ang isang salita ay tinatawag na tag. 934 00:59:32,910 --> 00:59:38,610 Kaya sa loob ng tag na HTML ay tila tag ng ulo at katawan tag. 935 00:59:38,610 --> 00:59:41,930 Inside ng ulo ang tag ngayon ay isang buong gulo para sa Facebook 936 00:59:41,930 --> 00:59:45,620 dahil mayroon silang maraming ng metadata at iba pang mga bagay para sa marketing at advertising. 937 00:59:45,620 --> 00:59:50,600 >> Ngunit kung namin mag-scroll pababa, pababa, pababa, pababa, sabihin makita kung saan ito ay. Narito ito ay. 938 00:59:50,600 --> 00:59:52,210 Ito ay hindi bababa sa medyo pamilyar. 939 00:59:52,210 --> 00:59:55,990 Ang pamagat ng home page ng Facebook, kung sakaling tumitingin sa tab sa iyong bar ng pamagat, 940 00:59:55,990 --> 00:59:59,060 Maligayang pagdating sa Facebook - Log In, Mag-sign Up o Dagdagan ang Nalalaman. 941 00:59:59,060 --> 01:00:01,110 Iyon ay kung ano ang gusto mong makita sa title bar ng Chrome, 942 01:00:01,110 --> 01:00:03,100 at na kung paano ito ay kinakatawan sa code. 943 01:00:03,100 --> 01:00:08,090 Kung balewalain namin ang lahat ng iba pa sa head, karamihan ng lakas ng loob ng isang web page sa katawan, 944 01:00:08,090 --> 01:00:10,940 at ito ay lumiliko code ng Facebook na iyon ay pagpunta upang tumingin ng mas kumplikadong 945 01:00:10,940 --> 01:00:14,540 kaysa sa karamihan ng mga bagay na makikita namin magsulat simula dahil lang sa ito ay binuo sa paglipas ng mga taon, 946 01:00:14,540 --> 01:00:17,260 ngunit may isang buong maraming ng mga script tag, JavaScript code, 947 01:00:17,260 --> 01:00:18,870 na ginagawang napaka-interactive ang website: 948 01:00:18,870 --> 01:00:22,330 nakikita ng mga update ng katayuan agad gamit ng mga wika tulad ng JavaScript. 949 01:00:22,330 --> 01:00:25,270 May isang bagay na tinatawag div, na kung saan ay isang sangay ng isang pahina. 950 01:00:25,270 --> 01:00:27,940 Ngunit bago makuha namin sa na detalye, sabihin subukan upang mag-zoom out 951 01:00:27,940 --> 01:00:31,920 at tumingin sa isang mas simpleng bersyon ng Facebook 1.0, kaya na magsalita. 952 01:00:31,920 --> 01:00:34,740 Narito ang kumusta, mundo ng mga pahina ng web. 953 01:00:34,740 --> 01:00:37,370 Ito ay may na DOCTYPE deklarasyon sa pinakatuktok 954 01:00:37,370 --> 01:00:40,280 kung saan ay isang maliit na naiiba mula sa lahat ng iba pa. 955 01:00:40,280 --> 01:00:46,130 Walang tao namin magsulat sa isang pahina ng web ay pagpunta sa magsimula sa 01:00:48,880 at maliban para sa isang bagay na tinatawag na mga komento sa HTML. 957 01:00:48,880 --> 01:00:53,000 Ngunit para sa pinaka-bahagi, ang lahat sa isang pahina ng web ay bukas bracket, keyword, malapit bracket. 958 01:00:53,000 --> 01:00:56,220 >> Sa kasong ito, maaari mong makita ang pinakasimpleng ng mga web page na posibleng. 959 01:00:56,220 --> 01:01:00,260 Ang HTML tag na naglalaman ng isang tag sa ulo at ito ay naglalaman ng isang tag sa katawan, 960 01:01:00,260 --> 01:01:04,580 ngunit mapapansin na ang paniwala na ito ng simula at pagpapahinto ng mga tag. 961 01:01:04,580 --> 01:01:11,360 Ito ang pambukas na tag para sa HTML, ito ay ang malapit na tag o pagtatapos ng tag. 962 01:01:11,360 --> 01:01:15,400 Pansinin na hindi sila ang uri ng opposites sa kamalayan na ang malapit na tag o pagtatapos ng tag 963 01:01:15,400 --> 01:01:20,030 ay ang forward slash sa loob ng sarili nito. 964 01:01:20,030 --> 01:01:23,540 Samantala, may isang bukas na head tag dito at malapit na tag ng ulo dito. 965 01:01:23,540 --> 01:01:26,880 >> Mayroong isang bukas na pamagat at isang malapit na tag ng pamagat dito. 966 01:01:26,880 --> 01:01:29,850 Ang katotohanan na Naglagay ako ng pamagat sa isang linya, pulos arbitrary. 967 01:01:29,850 --> 01:01:33,760 Tumingin lang ito tulad ng ito ay magkasya mabuti sa isang linya, kaya hindi ako abala sa pagpindot Magpasok ng isang beses ilang. 968 01:01:33,760 --> 01:01:38,200 Samantala, ang katawan ginawa ko i-indent lamang sa napaka malinaw. 969 01:01:38,200 --> 01:01:41,050 Pansinin na HTML ay isang medyo pipi wika. 970 01:01:41,050 --> 01:01:43,410 Sa katunayan, bumalik sa araw bago mayroong WYSIWYG na editor 971 01:01:43,410 --> 01:01:46,770 at Microsoft Word kung saan maaari mong sabihin, "Gawin itong naka-bold, gumawa ng mga ito italics," 972 01:01:46,770 --> 01:01:50,850 iyong aktwal na i-type ang mga maliit na command sa Sanaysay 20 + taon na ang nakalipas 973 01:01:50,850 --> 01:01:55,740 kung saan nais mong sabihin, "Simulan ang text na ito bold. Ihinto ang ang text na ito bold." 974 01:01:55,740 --> 01:01:59,010 "Simulan ang paggawa ng ito italics ng teksto. Ihinto ang paggawa ng ito italics ng teksto." 975 01:01:59,010 --> 01:02:01,850 >> Ang HTML o anumang markup language. 976 01:02:01,850 --> 01:02:05,530 Ang unang tag sabi, "Uy, browser. Narito ay ilang HTML." 977 01:02:05,530 --> 01:02:09,880 Ang susunod na tag sabi, "Uy, browser. Narito ay ang ulo, ang header ng aking web page." 978 01:02:09,880 --> 01:02:11,650 "Uy, browser. Narito ay ang pamagat." 979 01:02:11,650 --> 01:02:15,880 At pagkatapos ay sa paglipas dito, "Uy, browser. Iyon ay ito para sa pamagat." 980 01:02:15,880 --> 01:02:20,000 Kaya ito ay kung paano alam ng browser ang hindi na ipakita ang higit pang mga character kaysa kumusta, mundo 981 01:02:20,000 --> 01:02:21,860 sa title bar. 982 01:02:21,860 --> 01:02:23,640 Samantala, ang sabi, "Iyon ay ito para sa ulo." 983 01:02:23,640 --> 01:02:28,340 Nagsasabing, "Ito ay katawan Narito ang aktwal na katawan." - Literal, ang mga salita kumusta, mundo. 984 01:02:28,340 --> 01:02:33,190 At ito sabi dito, "Iyon ay ito para sa katawan. Iyon ay ito para sa HTML." 985 01:02:33,190 --> 01:02:34,640 Kaya browser medyo pipi. 986 01:02:34,640 --> 01:02:39,920 Sila lamang basahin ito bagay sa itaas hanggang sa ibaba, kaliwa papuntang kanan, at gawin nang eksakto kung ano ang kanilang sinabi sa gawin. 987 01:02:39,920 --> 01:02:41,860 Natin ang aktwal na gawin ang isang maliit na halimbawa dito. 988 01:02:41,860 --> 01:02:46,240 Hayaang buksan sa akin ang pinakasimpleng ng mga programa sa aking Mac dito, lalo TextEdit. 989 01:02:46,240 --> 01:02:48,220 Sa Windows, maaari mong gamitin Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Ngunit ito ang lahat ng kailangan mo upang simulan ang paggawa ng mga web page. 991 01:02:50,520 --> 01:02:53,730 Ako pagpunta upang magpatuloy at kopyahin lamang at i-paste ang code na ito sa ang file na ito. 992 01:02:53,730 --> 01:02:57,210 Ako pagpunta sa magpatuloy at i-save ang mga ito sa aking desktop, 993 01:02:57,210 --> 01:03:01,220 at ako pagpunta upang i-save ito bilang hello.html, 994 01:03:01,220 --> 01:03:03,840 at ngayon ang file ay pinangalanang hello.html. 995 01:03:03,840 --> 01:03:05,690 Dito sa aking desktop. 996 01:03:05,690 --> 01:03:11,130 Hayaan akong ngayon pumunta sa isang browser at i-drag ang mga file sa browser. 997 01:03:11,130 --> 01:03:14,060 At voila, narito ang aking unang web page. 998 01:03:14,060 --> 01:03:17,340 Pansinin na ang pamagat ng tab ay halo, ang mundo bilang bawat ang pamagat na tag, 999 01:03:17,340 --> 01:03:20,040 at notice na kumusta, mundo ang katawan ng aking web page, 1000 01:03:20,040 --> 01:03:22,190 at woo-hoo, ako sa Internet. 1001 01:03:22,190 --> 01:03:24,700 >> Hindi ako talaga, kanan, dahil ang file na ito ay hindi sa Internet. 1002 01:03:24,700 --> 01:03:28,330 Ang mangyayari sa aking lokal na hard drive sa na partikular na landas. 1003 01:03:28,330 --> 01:03:32,720 Ngunit ang ideya ay ang parehong. Ang namin ngayon ay kailangan ay isang web server na kung saan upang i-upload ito. 1004 01:03:32,720 --> 01:03:37,410 Ngunit unang sabihin aktwal na ipakilala ng kaunti pa sa kumplikado at ng kaunti pa estilisasyon. 1005 01:03:37,410 --> 01:03:39,890 Ito ay isang simpleng, kung pagbubutas, web pahina. 1006 01:03:39,890 --> 01:03:41,990 Lumiliko out may mga iba pang mga uri ng mga tag na maaari naming gamitin. 1007 01:03:41,990 --> 01:03:45,530 Halimbawa, dito sa dilaw ko na ipinakilala ng 2 bagong tag. 1008 01:03:45,530 --> 01:03:49,630 Ay hindi namin i-play ang mas may mga ngayon, ngunit mapapansin na ang mga tag ng link 1009 01:03:49,630 --> 01:03:52,520 sa paanuman mukhang naiiba mula sa lahat ng iba pa. 1010 01:03:52,520 --> 01:03:55,370 Ang link na tag ay tumatagal ng kung ano ay tinatawag na mga katangian, 1011 01:03:55,370 --> 01:03:59,770 at isang attribute ay isang bagay na binabago ang pag-uugali ng isang tag. 1012 01:03:59,770 --> 01:04:03,840 Sa kasong ito ito ay hindi ang pinakamahusay na pagpipilian ng mga pangalan, link, dahil ito ay uri ng walang kahulugan, 1013 01:04:03,840 --> 01:04:11,590 ngunit ang link na ito tag sabi, mahalagang, isama ang file na tinatawag na styles.css loob ng aking web page. 1014 01:04:11,590 --> 01:04:15,400 Maaari mong isipin ng mga ito bilang kahalintulad na sa C ng # include directive. 1015 01:04:15,400 --> 01:04:19,650 Styles.css ay nagre-refer sa ibang wika ng kabuuan na hindi namin magpe-play sa ngayon, 1016 01:04:19,650 --> 01:04:23,790 ngunit para sa mga aesthetics: laki ng font, kulay, padding, indentation, mga margin, 1017 01:04:23,790 --> 01:04:26,040 at ang lahat na uri ng aesthetics detalye. 1018 01:04:26,040 --> 01:04:28,820 Samantala, ang script tag pagtakbo katulad, 1019 01:04:28,820 --> 01:04:33,140 ngunit sa halip kaysa kinabibilangan ng CSS, wikang iyon, kasama ang isa pang wika, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Kaya sa ibang salita, may mga 2 tag ako kalaunan magagawang upang isulat ang aking sariling web page 1021 01:04:37,810 --> 01:04:41,490 ngunit ring hilahin sa code na ako o ang ibang tao ay nakasulat 1022 01:04:41,490 --> 01:04:44,350 upang maaari naming tumayo sa ibang mga tao balikat, maaari kaming magsagawa ng magandang disenyo, 1023 01:04:44,350 --> 01:04:46,120 factoring out karaniwang code. 1024 01:04:46,120 --> 01:04:49,090 Kung Mayroon akong 10 iba't ibang mga web page, ito ay nangangahulugan na ang ilan sa aking aesthetics 1025 01:04:49,090 --> 01:04:52,490 isinasali out, tulad ng # include, sa isang hiwalay na file. 1026 01:04:52,490 --> 01:04:54,420 Kaya kami ay nakakakuha doon. 1027 01:04:54,420 --> 01:04:57,180 Ngunit sabihin aktwal na unang gawin ang isang bagay na mas kawili-wili sa ang file na ito. 1028 01:04:57,180 --> 01:05:01,110 >> Muli, ito lamang TextEdit. Hindi ako technically sa Internet, ngunit gagamitin namin makapunta doon. 1029 01:05:01,110 --> 01:05:04,910 Gusto kong gumawa ng halo, mundo ng kaunti mas agresibong kaysa sa ito ay. 1030 01:05:04,910 --> 01:05:10,890 Kaya halo, sabihin mang sabihin para sa naka-bold. 1031 01:05:10,890 --> 01:05:15,910 Muli, ang kuwento ay pareho: hoy, kuwit, simulang ito bold, 1032 01:05:15,910 --> 01:05:19,730 pagkatapos mundo ay makakakuha ng naka-print na naka-bold, at nangangahulugan ito na itigil ang pag-print ito na naka-bold. 1033 01:05:19,730 --> 01:05:24,020 Hayaan akong magpatuloy at i-save ang aking file, bumalik sa Chrome, magpapadala ako sa mag-zoom in lamang upang maaari naming makita ito ng mas mahusay, 1034 01:05:24,020 --> 01:05:27,870 at i-reload, at makikita mo ang mundo na ngayon na naka-bold. 1035 01:05:27,870 --> 01:05:31,810 Web ay ang lahat tungkol sa mga hyperlink, kaya sabihin magpatuloy at gawin ito: 1036 01:05:31,810 --> 01:05:38,550 ang aking paboritong website ay, sabihin nating, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 I-save, i-reload. Okay. May ilang problema ngayon bukod ang pagkakilabot ng website. 1038 01:05:43,810 --> 01:05:47,310 1, ako ay medyo sigurado hit ko Ipasok dito. At ginawa ko. 1039 01:05:47,310 --> 01:05:51,590 Hindi ko lamang pindutin ang Enter, ako ay naka-indent, pagsasanay kung ano ang namin ang pangangaral tungkol sa estilo, 1040 01:05:51,590 --> 01:05:54,930 ngunit ang aking sa tabi mismo ng mundo. 1041 01:05:54,930 --> 01:05:58,410 Kaya bakit ito? Browser lamang gawin kung ano ang sabihin sa iyo ang mga ito na gawin. 1042 01:05:58,410 --> 01:06:04,010 Hindi ko pa Sinabi browser, "Break linya dito. Ipasok ang talata masira dito." 1043 01:06:04,010 --> 01:06:07,820 Kaya ang browser, hindi mahalaga kung ako pindutin ang Return 30 beses, 1044 01:06:07,820 --> 01:06:10,820 pa rin ito upang ilagay ang aking karapatan sa tabi ng mundo. 1045 01:06:10,820 --> 01:06:15,930 Ano ko talagang gawin dito ay sabihin isang bagay tulad ng
, magpasok ng isang line break. 1046 01:06:15,930 --> 01:06:17,940 >> At aktwal na, isang line break ay uri ng kakaiba bagay 1047 01:06:17,940 --> 01:06:21,650 dahil hindi ikaw talaga simulan ang paglipat sa isa pang linya, pagkatapos ay gawin ang isang bagay, 1048 01:06:21,650 --> 01:06:25,380 at pagkatapos ay itigil ang paglipat sa isang bagong linya. Ito ay uri ng isang atomic operasyon. 1049 01:06:25,380 --> 01:06:28,140 Mong alinman sa gawin ito o hindi mo gusto. Ka pindutin ang Enter o hindi mo gusto. 1050 01:06:28,140 --> 01:06:33,390 Kaya br ay isang maliit na bit ng isang iba't ibang mga tag, at kaya kailangan ko upang pag-uri-uriin ng parehong bukas at isara ito 1051 01:06:33,390 --> 01:06:35,230 nang sabay-sabay. 1052 01:06:35,230 --> 01:06:37,500 Ang syntax para sa ito. 1053 01:06:37,500 --> 01:06:41,760 Technically, maaari mong gawin ang isang bagay tulad nito sa ilang mga bersyon ng HTML, 1054 01:06:41,760 --> 01:06:45,600 ngunit ito lamang bobo dahil walang dahilan upang simulan at itigil ang isang bagay 1055 01:06:45,600 --> 01:06:48,420 kung maaari mong sa halip gawin ang lahat nang sabay-sabay. 1056 01:06:48,420 --> 01:06:52,310 Napagtanto HTML5 na hindi mahigpit na nangangailangan ito slash, 1057 01:06:52,310 --> 01:06:55,410 kaya makikita mo ang mga aklat-aralin at mga online na mapagkukunan na hindi ito, 1058 01:06:55,410 --> 01:06:59,780 ngunit para sa mabuting panukala sabihin magsagawa ang mahusay na proporsyon nasaksihan namin sa gayon malayo. 1059 01:06:59,780 --> 01:07:02,870 Nangangahulugan ito na tag ay parehong binuksan at sarado. 1060 01:07:02,870 --> 01:07:05,220 Kaya ngayon hayaan mo akong i-save ang aking file, bumalik dito. 1061 01:07:05,220 --> 01:07:10,240 Okay, kaya simula upang tumingin ng mas mahusay na, maliban sa Web Alam ko uri ng naki-click, 1062 01:07:10,240 --> 01:07:13,610 at pa youtube dito ay mukhang hindi na humantong sa anumang bagay. 1063 01:07:13,610 --> 01:07:17,560 Iyon ay dahil kahit na mukhang isang link, browser ay hindi alam na per se, 1064 01:07:17,560 --> 01:07:20,670 kaya mayroon akong sabihin sa browser na ito ay isang link. 1065 01:07:20,670 --> 01:07:22,620 >> Ang paraan upang gawin ito ay upang gamitin ang isang anchor tag: 1066 01:07:22,620 --> 01:07:26,770 01:07:35,900 = "Http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 at ipaalam sa akin ilipat ito sa isang bagong linya sa gayon ito ng kaunti pa nababasa, 1069 01:07:38,490 --> 01:07:40,060 at makikita ko paliitin ang laki ng font. 1070 01:07:40,060 --> 01:07:43,890 Ako pa tapos? No May pagpunta sa ang paghihiwalay sa dalawang bahagi. 1071 01:07:43,890 --> 01:07:46,760 Ang tag na ito, ang anchor tag, ay sa katunayan isang katangian, 1072 01:07:46,760 --> 01:07:52,900 na binabago ang pag-uugali nito, at ang halaga ng katangiang iyon ay tila URL ng YouTube. 1073 01:07:52,900 --> 01:07:56,380 Ngunit mapansin ang paghihiwalay sa dalawang bahagi na dahil lamang na ang URL na iyong pagpunta sa, 1074 01:07:56,380 --> 01:08:01,020 na ay hindi nangangahulugan na ang salita ka salungguhit at gumawa ng isang link. 1075 01:08:01,020 --> 01:08:03,960 Halip, na maaaring maging isang bagay tulad nito. 1076 01:08:03,960 --> 01:08:10,870 Kaya kong sabihin itigil ang isang hyperlink sa pamamagitan ng paggamit ng malapit anchor tag ang salita na ito. 1077 01:08:10,870 --> 01:08:12,650 Mapansin hindi ako ng paggawa nito. 1078 01:08:12,650 --> 01:08:15,890 1, ito ay lamang ng basura ng oras ng lahat at ito ay hindi kinakailangang. 1079 01:08:15,890 --> 01:08:19,290 >> Upang isara ang isang tag, lang banggitin ang pangalan ng tag sa muli. 1080 01:08:19,290 --> 01:08:21,800 Hindi mo banggitin ang anuman sa mga katangian. 1081 01:08:21,800 --> 01:08:26,189 Kaya sabihin i-save na, bumalik. Okay, voila, ngayon ito ay asul at naka-hyperlink. 1082 01:08:26,189 --> 01:08:29,430 Kung ako i-click ito, gawin ko aktwal na pumunta sa YouTube. 1083 01:08:29,430 --> 01:08:32,529 Kaya kahit ang aking web page ay hindi sa Internet, ito ay hindi bababa sa HTML, 1084 01:08:32,529 --> 01:08:37,930 at kung namin ipaalam sa Internet abutin ang, ay namin aktwal na magtapos dito sa youtube.com. 1085 01:08:37,930 --> 01:08:40,670 At maaari ba akong bumalik at narito ang aking web page. Ngunit mapansin ito. 1086 01:08:40,670 --> 01:08:43,120 Kung sakaling nakuha mo na spam o phishing na atake, 1087 01:08:43,120 --> 01:08:45,850 ngayon mayroon kang kakayahan pagkatapos ng limang minuto lamang na gawin ang pareho. 1088 01:08:45,850 --> 01:08:50,920 Maaari naming pumunta dito at gawin ang isang bagay tulad ng www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 o anuman ang pahapyaw website, at pagkatapos ay maaari mong sabihin i-verify ang iyong PayPal account. 1090 01:08:59,319 --> 01:09:04,840 [Tawa] At ngayon ito ay pagpunta sa pumunta sa badguy.com, kung saan hindi ako mag-click sa 1091 01:09:04,840 --> 01:09:08,000 dahil mayroon akong walang ideya kung saan na humantong. [Tawa] 1092 01:09:08,000 --> 01:09:10,859 >> Ngunit na namin ngayon ay may kakayahan upang aktwal na magtapos up doon. 1093 01:09:10,859 --> 01:09:12,640 Kaya talaga namin ka lamang simula sa scratch sa ibabaw. 1094 01:09:12,640 --> 01:09:15,830 Hindi namin mga programa per se; kami ay sumusulat markup language. 1095 01:09:15,830 --> 01:09:18,569 Ngunit sa lalong madaling isalin namin ang aming bokabularyo sa HTML, 1096 01:09:18,569 --> 01:09:21,520 magpapadala kami ipakilala PHP, isang aktwal na wika programming 1097 01:09:21,520 --> 01:09:26,859 na magbibigay-daan sa amin upang bumuo ng HTML awtomatikong, bumuo ng CSS awtomatikong, 1098 01:09:26,859 --> 01:09:29,430 upang maaari naming magsimula sa Miyerkules upang ipatupad, sabihin, 1099 01:09:29,430 --> 01:09:31,700 aming sariling search engine at higit pa. 1100 01:09:31,700 --> 01:09:34,770 Ngunit higit pa sa isang ilang mga araw. Susubukan naming makita kang pagkatapos. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]