1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] Jordan JOZWIAK: Tipo malplenigita, en la plej simpla senco, estas 2 00:00:10,270 --> 00:00:13,300 maniero por ŝanĝi al komputilo lego de iuj datumoj de 3 00:00:13,300 --> 00:00:16,560 implice aŭ eksplicite ŝanĝanta ĝia datumtipo. 4 00:00:16,560 --> 00:00:19,940 Kiel ŝanĝi la int por kaleŝego, aŭ inverse. 5 00:00:19,940 --> 00:00:21,550 Por kompreni tipo malplenigita, ni bezonas 6 00:00:21,550 --> 00:00:22,680 starti kun la fundamentoj - 7 00:00:22,680 --> 00:00:24,140 datumtipoj sin. 8 00:00:24,140 --> 00:00:26,960 En komputilo lingvoj kiel C, ĉiuj variabloj havas ian 9 00:00:26,960 --> 00:00:29,690 de datumtipo kiu determinas kiom la komputilo, kaj same 10 00:00:29,690 --> 00:00:32,140 la uzanto, interpretas ke variablo. 11 00:00:32,140 --> 00:00:35,160 Nombraj datumtipoj tiaj kiel int, longa tempo, kaleŝego kaj 12 00:00:35,160 --> 00:00:38,110 duobla, ĉiuj havas siajn proprajn trajtojn unika kaj estas 13 00:00:38,110 --> 00:00:41,370 uzita al precizigi valoroj de varianta gamoj kaj precizeco. 14 00:00:41,370 --> 00:00:44,800 Tipo casting nin permesas preni glitpunkta nombro kiel 15 00:00:44,800 --> 00:00:49,170 3.14 kaj akiri la parto antaŭ la dekuma, 3 en ĉi tiu kazo, 16 00:00:49,170 --> 00:00:51,590 per jxetantajn ŝin al int. 17 00:00:51,590 --> 00:00:53,900 Ni prenu ekzemplon de la angla lingvo por mallonga 18 00:00:53,900 --> 00:00:56,910 revizii de tipoj, kaj vidi kiel tipo casting povas ŝanĝi 19 00:00:56,910 --> 00:00:59,380 la vojo ni interpreti peco de datumoj. 20 00:00:59,380 --> 00:01:05,269 Por datumoj, ni prenu la simboloj tie. 21 00:01:05,269 --> 00:01:07,570 Mi nur raporti al tiuj zorgeme agordis linioj kiel 22 00:01:07,570 --> 00:01:10,100 simboloj, sed kiel iu kiu konas la anglan lingvon, 23 00:01:10,100 --> 00:01:12,750 vi tuj agnoski ke ili estas, fakte, leteroj. 24 00:01:12,750 --> 00:01:15,580 Vi implice komprenita la datumtipo. 25 00:01:15,580 --> 00:01:17,620 Rigardante tiun ĉenon de literoj oni povas vidi du 26 00:01:17,620 --> 00:01:20,140 malsamaj vortoj, ĉiu kun sia signifo. 27 00:01:20,140 --> 00:01:25,530 Jen la substantivo, vento, kiel en la vento blovas ekstere. 28 00:01:25,530 --> 00:01:28,280 Kaj tie estas la verbo, vento, kiel en mi bezonas 29 00:01:28,280 --> 00:01:31,410 vento mia analoga horloĝo. 30 00:01:31,410 --> 00:01:33,420 Tiu estas interesa ekzemplo, ĉar ni povas vidi 31 00:01:33,420 --> 00:01:36,270 kiom la tipo kiu ni atribuas al niaj datumoj, ĉu substantivo aŭ 32 00:01:36,270 --> 00:01:39,080 verbo, ŝanĝoj kiel ni uzas tiun datumoj - 33 00:01:39,080 --> 00:01:41,730 kiel la vorto vento aŭ vento. 34 00:01:41,730 --> 00:01:44,100 Kvankam komputilo ne zorgas pri gramatiko kaj partoj 35 00:01:44,100 --> 00:01:47,750 de angla lingvo, la sama baza principo validas. 36 00:01:47,750 --> 00:01:50,290 Tio estas, ni povas ŝanĝi la lego de la ĝusta 37 00:01:50,290 --> 00:01:53,140 samaj datumoj stokitaj en memoro per simple jxetantajn ĝin al 38 00:01:53,140 --> 00:01:54,576 malsama tipo. 39 00:01:54,576 --> 00:01:57,250 Jen la grandecoj de la plej komunaj tipoj sur 32-bita 40 00:01:57,250 --> 00:01:58,340 mastruma sistemo. 41 00:01:58,340 --> 00:02:02,070 Ni havas char je 1 bajto, int kaj flosas en 4 bajtoj, longa 42 00:02:02,070 --> 00:02:04,390 longa kaj duobla al la 8 bajtoj. 43 00:02:04,390 --> 00:02:07,670 Ĉar int okupas 4 bajtoj, estos preni 32 bitoj 44 00:02:07,670 --> 00:02:10,060 kiam estas stokita en memoro kiel duuma serio 45 00:02:10,060 --> 00:02:11,500 de nuloj kaj aĵoj. 46 00:02:11,500 --> 00:02:14,020 Tiel longe kiel nia variablo restas kiel tipo int, la 47 00:02:14,020 --> 00:02:16,740 komputilo ĉiam konverti tiujn kaj nuloj de 48 00:02:16,740 --> 00:02:19,120 duuma en la originala nombro. 49 00:02:19,120 --> 00:02:21,270 Tamen, ni povus teorie jxetu tiuj 32 50 00:02:21,270 --> 00:02:23,510 bitoj en serio de Bulea tipoj. 51 00:02:23,510 --> 00:02:26,090 Kaj tiam la komputilo ne plu vidas numeron, sed 52 00:02:26,090 --> 00:02:28,810 anstataŭ kolekto de nuloj kaj aĵoj. 53 00:02:28,810 --> 00:02:31,570 Ni povus ankaŭ provi legi tiun datumon malsamaj nombraj 54 00:02:31,570 --> 00:02:34,660 tajpi, aŭ eĉ kiel linio de kvar signojn. 55 00:02:34,660 --> 00:02:37,820 Kiam kontraktanta kun nombroj en malplenigita, vi devas konsideri kiel 56 00:02:37,820 --> 00:02:40,470 la precizeco de via valoro estos trafitaj. 57 00:02:40,470 --> 00:02:43,240 Konsideru ke la precizeco povas resti la sama, 58 00:02:43,240 --> 00:02:47,150 aŭ vi povas perdi precizecon, sed vi neniam povas gajni precizeco. 59 00:02:47,150 --> 00:02:49,060 Ni iru tra la tri plej komunaj formoj kiuj vi povas 60 00:02:49,060 --> 00:02:50,400 perdi precizecon. 61 00:02:50,400 --> 00:02:53,060 Jxetantajn kaleŝego al int kaŭzos tranĉon de ĉio 62 00:02:53,060 --> 00:02:54,900 post la dekuma punkto, do vi forlasis 63 00:02:54,900 --> 00:02:55,950 kun la tuta nombro. 64 00:02:55,950 --> 00:03:02,000 Se vi prenos la kaleŝego x kiu egalos 3.7, ni povas jxetu 65 00:03:02,000 --> 00:03:05,580 ĉi variablo x al int per simple skribi int en 66 00:03:05,580 --> 00:03:07,050 krampoj. 67 00:03:07,050 --> 00:03:10,010 Kiam ajn ni uzas ĉi tiun terminon ĉi tie, ni efektive 68 00:03:10,010 --> 00:03:12,810 esti uzanta la valoro tri ĉar ni senpintigita 69 00:03:12,810 --> 00:03:14,880 ĉio post la dekuma punkto. 70 00:03:14,880 --> 00:03:17,210 Ni povas ankaŭ konverti longaj al int, kiu volas 71 00:03:17,210 --> 00:03:20,760 simile konduki al perdo de alta ordo bitoj. 72 00:03:20,760 --> 00:03:23,910 Longa tempo okupas 8 bajtoj, aŭ 64 bitoj en memoro. 73 00:03:23,910 --> 00:03:27,050 Do kiam ni ĵetis ĝin al int kiu nur havas 4 bajtoj, aŭ 32 74 00:03:27,050 --> 00:03:29,820 bitoj, ni esence batante sur ĉiuj bitoj kiujn 75 00:03:29,820 --> 00:03:32,420 reprezentas la plej duuma valoroj. 76 00:03:32,420 --> 00:03:34,690 Vi povus ankaŭ jxetu duobla al kaleŝego, kiu donos 77 00:03:34,690 --> 00:03:37,340 vi la plej proksima ebla kaleŝego al la duobla sen 78 00:03:37,340 --> 00:03:39,100 nepre rondigas ĝin. 79 00:03:39,100 --> 00:03:41,840 Simila al nia longa tempo por int konvertiĝo, la perdo en 80 00:03:41,840 --> 00:03:44,890 precizeco estas ĉar duoblan enhavas pli datumojn. 81 00:03:44,890 --> 00:03:47,910 Duobla permesos stoki 53 signifa bitoj, 82 00:03:47,910 --> 00:03:50,650 proksimume 16 signifaj ciferoj. 83 00:03:50,650 --> 00:03:53,050 Dum kaleŝego nur permesas stoki 24 84 00:03:53,050 --> 00:03:56,235 signifa bitoj, proksimume sep signifaj ciferoj. 85 00:03:56,235 --> 00:03:58,700 En ĉi tiuj du lastaj kazoj, ĝi povas esti utila pensi pri 86 00:03:58,700 --> 00:04:01,200 tajpi casting kiel regrandigi foton. 87 00:04:01,200 --> 00:04:03,860 Kiam vi iros de granda amplekso al malgranda grandeco, vi ne povas vidi 88 00:04:03,860 --> 00:04:05,600 aĵoj kiel klare ĉar vi perdis datumoj 89 00:04:05,600 --> 00:04:07,530 en formo de rastrumeroj. 90 00:04:07,530 --> 00:04:09,270 Tipo casting povas ankaŭ kaŭzi problemojn kiam ni 91 00:04:09,270 --> 00:04:11,050 jxetu ints al flosas. 92 00:04:11,050 --> 00:04:13,920 Ekde flosas sur 32-bita maŝino nur havas 24 93 00:04:13,920 --> 00:04:16,959 signifa bitoj, ili ne povas precize prezenti valorojn 94 00:04:16,959 --> 00:04:22,750 super 2 al la potenco de 24, aŭ 16777217. 95 00:04:22,750 --> 00:04:25,540 Nun ni parolu pri eksplicita kaj implica casting. 96 00:04:25,540 --> 00:04:28,000 Eksplicita casting estas kiam ni skribas la tipo en krampoj 97 00:04:28,000 --> 00:04:29,430 antaux variablo nomo. 98 00:04:29,430 --> 00:04:33,100 Kiel ekzemplo, antaŭ ol ni skribis int en krampoj antaŭ niaj 99 00:04:33,100 --> 00:04:35,640 flosi variablo x. 100 00:04:35,640 --> 00:04:37,200 Tiamaniere, ni preni la int valoro, la 101 00:04:37,200 --> 00:04:38,593 senpintigita valoro de 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Implicita casting estas kiam la tradukilo aŭtomate ŝanĝas 104 00:04:42,970 --> 00:04:46,340 simila tipoj super tipo, aŭ plenumas iu alia speco de 105 00:04:46,340 --> 00:04:48,310 jxetantajn sen postuli la uzanto por skribi 106 00:04:48,310 --> 00:04:49,720 neniu plia kodo. 107 00:04:49,720 --> 00:04:53,550 Ekzemple, kiam ni aldonas 5 kaj 1,1, niaj valoroj jam havas 108 00:04:53,550 --> 00:04:55,680 tipoj asociita kun ili. 109 00:04:55,680 --> 00:04:59,480 La 5 estas int, dum 1,1 estas kaleŝego. 110 00:04:59,480 --> 00:05:02,390 Por aldoni ilin, la komputilo ĵetas 5 en kaleŝego, 111 00:05:02,390 --> 00:05:04,530 kiu estus estinta la sama afero kiel skribi 5.0 en la 112 00:05:04,530 --> 00:05:06,476 unuan lokon. 113 00:05:06,476 --> 00:05:13,210 Sed tiamaniere ni diras kaleŝego 5, aŭ 5.0, alpago, kio jam 114 00:05:13,210 --> 00:05:16,960 kaleŝego, 1.1, kaj de tie ni povas vere aldoni tiujn 115 00:05:16,960 --> 00:05:18,640 valorojn kaj atingi la valoron 6.1. 116 00:05:21,170 --> 00:05:23,500 Implicita casting ankaŭ permesas al ni atribui variablojn de 117 00:05:23,500 --> 00:05:25,590 malsamaj tipoj al ĉiu alia. 118 00:05:25,590 --> 00:05:28,110 Ni povas ĉiam asigni malpli preciza tipo en pli 119 00:05:28,110 --> 00:05:29,250 preciza unu. 120 00:05:29,250 --> 00:05:37,060 Ekzemple, se ni havas duoblan x, kaj int y - 121 00:05:37,060 --> 00:05:40,120 kaj ĉi tiuj povus havi ajnan valoroj kiujn ni starigis ilin al - 122 00:05:40,120 --> 00:05:43,560 ni povas diri x egalas y. 123 00:05:43,560 --> 00:05:46,340 Ĉar la duoblaj havas pli precizeco ol int, do ni 124 00:05:46,340 --> 00:05:48,380 ne perdos neniun informon. 125 00:05:48,380 --> 00:05:50,420 Aliflanke, ĝi ne nepre estu ĝentila diri 126 00:05:50,420 --> 00:05:54,060 y egalas x, ĉar la duoblaj havu pli grandan valoron ol 127 00:05:54,060 --> 00:05:55,220 la entjero. 128 00:05:55,220 --> 00:05:57,420 Kaj tial la entjero eble ne povos teni la tuta 129 00:05:57,420 --> 00:05:59,560 informo stokita en la duobla. 130 00:05:59,560 --> 00:06:02,610 Implicita casting estas uzata ankaŭ en komparo operatoroj kiel 131 00:06:02,610 --> 00:06:06,410 pli granda ol, malpli ol, aŭ la egalecon operatoro. 132 00:06:06,410 --> 00:06:13,050 Tiel ni povas diri se 5.1 estas pli granda ol 5, kaj ni preni la 133 00:06:13,050 --> 00:06:14,750 rezulti vera. 134 00:06:14,750 --> 00:06:18,470 Ĉar 5 estas int, sed estos jxetita al kaleŝego por 135 00:06:18,470 --> 00:06:22,090 estas egala al la kaleŝego 5.1, ni dirus 5.1 estas 136 00:06:22,090 --> 00:06:24,550 pli granda ol 5.0. 137 00:06:24,550 --> 00:06:31,320 La sama estas vera kun diri se 2.0 egalas egalas 2. 138 00:06:31,320 --> 00:06:34,190 Ni ŝatus ankaŭ akiri vera, ĉar la komputilo forpusxos la 139 00:06:34,190 --> 00:06:39,750 entjero 2 flosi kaj poste diri 2.0 egalas egalas 2.0, 140 00:06:39,750 --> 00:06:41,660 ĉi tio estas vera. 141 00:06:41,660 --> 00:06:44,180 Ne forgesu, ke ni povas ankaŭ ĵetis inter ints kaj signoj, 142 00:06:44,180 --> 00:06:46,350 aŭ ASCII valoroj. 143 00:06:46,350 --> 00:06:49,690 Signaĵoj ankaŭ bezonas esti reduktita al binaraj, tial vi 144 00:06:49,690 --> 00:06:51,920 povas facile konverti inter signoj kaj iliaj respektivaj 145 00:06:51,920 --> 00:06:53,260 ASCII valoroj. 146 00:06:53,260 --> 00:06:56,180 Por lerni pli pri ĉi tio, kontrolu nian video sur ASCII. 147 00:06:56,180 --> 00:06:58,080 Kiam vi preni momenton por pensi pri kiel datumoj estas stokita, 148 00:06:58,080 --> 00:06:59,990 komencas fari multajn senco. 149 00:06:59,990 --> 00:07:02,790 Estas nur kiel la diferenco inter vento kaj vento. 150 00:07:02,790 --> 00:07:05,490 La datumoj estas la sama, sed la tipo povas ŝanĝi nian manieron 151 00:07:05,490 --> 00:07:06,720 interpreti ĝin. 152 00:07:06,720 --> 00:07:10,430 Mia nomo estas Jordanon Jozwiak, ĉi cs50.