1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDANI JOZWIAK: hedhjes Tipi, në sensin thjeshte, është një 2 00:00:10,270 --> 00:00:13,300 mënyrë për të ndryshuar interpretimin e një kompjuteri të disa të dhënave nga 3 00:00:13,300 --> 00:00:16,560 mënyrë eksplicite ose implicite ndryshimin e të dhënave llojin e vet. 4 00:00:16,560 --> 00:00:19,940 Të tilla si duke ndryshuar një int, float për një ose anasjelltas. 5 00:00:19,940 --> 00:00:21,550 Për të kuptuar hedh lloj, ne kemi nevojë për 6 00:00:21,550 --> 00:00:22,680 të fillojë me bazat - 7 00:00:22,680 --> 00:00:24,140 Llojet e të dhënave vetë. 8 00:00:24,140 --> 00:00:26,960 Në gjuhë kompjuterike si C, të gjitha variablave të ketë disa lloj 9 00:00:26,960 --> 00:00:29,690 e të dhënave të llojit që përcakton se si kompjuteri, dhe gjithashtu 10 00:00:29,690 --> 00:00:32,140 përdoruesit, interpreton atë ndryshore. 11 00:00:32,140 --> 00:00:35,160 Të dhënat numerike lloje të tilla si një int, float kohë të gjatë, dhe 12 00:00:35,160 --> 00:00:38,110 dyfishtë, të gjithë kanë karakteristikat e veta unike dhe janë 13 00:00:38,110 --> 00:00:41,370 përdorur për të specifikojë vlerat e ndryshme vargjet dhe saktësi. 14 00:00:41,370 --> 00:00:44,800 Lloji i hedh na lejon të marrin një numër lundrues pikë si 15 00:00:44,800 --> 00:00:49,170 3.14 dhe për të marrë pjesë para dhjetore, 3 në këtë rast, 16 00:00:49,170 --> 00:00:51,590 duke hedhur atë në një int. 17 00:00:51,590 --> 00:00:53,900 Le të marrin një shembull nga gjuha angleze për një të shkurtër 18 00:00:53,900 --> 00:00:56,910 shqyrtimin e llojeve, dhe për të parë se si hedh lloji mund të ndryshojë 19 00:00:56,910 --> 00:00:59,380 rruga ne interpretojnë një pjesë të të dhënave. 20 00:00:59,380 --> 00:01:05,269 Për të dhëna, le të marrin simbolet këtu. 21 00:01:05,269 --> 00:01:07,570 Unë vetëm i referohen këtyre linjave konfiguruar me kujdes si 22 00:01:07,570 --> 00:01:10,100 simbolet, por si dikush që e di gjuhën angleze, 23 00:01:10,100 --> 00:01:12,750 ju menjëherë pranojnë se ata janë, në fakt, letra. 24 00:01:12,750 --> 00:01:15,580 Ju implicite kuptuar llojin dhënave. 25 00:01:15,580 --> 00:01:17,620 Kërkoni në këtë vargun e shkronjave ne mund të shohim dy 26 00:01:17,620 --> 00:01:20,140 fjalë të ndryshme, secila me kuptimin e vet. 27 00:01:20,140 --> 00:01:25,530 Nuk është emër, era, si në goditjet era jashtë. 28 00:01:25,530 --> 00:01:28,280 Dhe nuk ka folje, era, si në kam nevojë për të 29 00:01:28,280 --> 00:01:31,410 era orë analoge time. 30 00:01:31,410 --> 00:01:33,420 Ky është një shembull interesant, sepse ne mund të shohim 31 00:01:33,420 --> 00:01:36,270 si lloji që ne të caktojë të dhënave tona, qoftë emër ose 32 00:01:36,270 --> 00:01:39,080 , folje ndryshime si ne e përdorin që të dhënat - 33 00:01:39,080 --> 00:01:41,730 si era fjalë ose era. 34 00:01:41,730 --> 00:01:44,100 Edhe pse një kompjuter nuk kujdeset për gramatikën dhe pjesëve 35 00:01:44,100 --> 00:01:47,750 e fjalës angleze, i njëjti parim themelor vlen. 36 00:01:47,750 --> 00:01:50,290 Kjo është, ne mund të ndryshojmë me interpretimin e saktë 37 00:01:50,290 --> 00:01:53,140 njëjtat të dhëna të ruajtura në kujtesën nga thjesht hedh atë në një 38 00:01:53,140 --> 00:01:54,576 lloj i ndryshëm. 39 00:01:54,576 --> 00:01:57,250 Këtu janë të madhësive të llojeve më të zakonshme në një 32-bit 40 00:01:57,250 --> 00:01:58,340 sistemit operativ. 41 00:01:58,340 --> 00:02:02,070 Ne kemi një char në 1, int bajt dhe noton në 4 bytes, një të gjatë 42 00:02:02,070 --> 00:02:04,390 gjatë dhe një të dyfishtë në 8 bytes. 43 00:02:04,390 --> 00:02:07,670 Sepse një int merr 4 byte, ajo do të marrë deri në 32 bit 44 00:02:07,670 --> 00:02:10,060 kur ajo është e ruajtur në kujtesë si një seri binar 45 00:02:10,060 --> 00:02:11,500 nga zero dhe ato. 46 00:02:11,500 --> 00:02:14,020 Për aq kohë sa variabël tonë mbetet si një int lloji, 47 00:02:14,020 --> 00:02:16,740 kompjuteri gjithmonë do të konvertohet ato ato dhe zero nga 48 00:02:16,740 --> 00:02:19,120 binar në numrin origjinal. 49 00:02:19,120 --> 00:02:21,270 Megjithatë, ne mund të teorikisht hedhur ato 32 50 00:02:21,270 --> 00:02:23,510 bit në një seri të llojeve Boolean. 51 00:02:23,510 --> 00:02:26,090 Dhe pastaj kompjuteri nuk do të shihni një numër, por 52 00:02:26,090 --> 00:02:28,810 vend një koleksion i zero dhe ato. 53 00:02:28,810 --> 00:02:31,570 Ne gjithashtu mund të përpiqen për të lexuar të dhënat se si numerike ndryshme 54 00:02:31,570 --> 00:02:34,660 shkruani, apo edhe si një varg prej katër karaktere. 55 00:02:34,660 --> 00:02:37,820 Kur kanë të bëjnë me numrat në hedhjes, ju duhet të konsideroni se si 56 00:02:37,820 --> 00:02:40,470 saktësi e vlerës tuaj do të ndikohen. 57 00:02:40,470 --> 00:02:43,240 Mbani në mend se saktësi mund të qëndrojnë të njëjta, 58 00:02:43,240 --> 00:02:47,150 ose ju mund të humbni saktësi, por ju nuk mund të fitojë saktësi. 59 00:02:47,150 --> 00:02:49,060 Le të shkojë përmes për tri mënyrat më të zakonshme që ju mund të 60 00:02:49,060 --> 00:02:50,400 humbin saktësi. 61 00:02:50,400 --> 00:02:53,060 Hedh një noton në një int do të shkaktojë truncation për çdo gjë 62 00:02:53,060 --> 00:02:54,900 pas presjes dhjetore, kështu që ju jeni mbetur 63 00:02:54,900 --> 00:02:55,950 me numër të tërë. 64 00:02:55,950 --> 00:03:02,000 Nëse marrim x noton e cila do barabartë me 3.7, ne mund të hidhet 65 00:03:02,000 --> 00:03:05,580 kjo x variabël në një int nga thjesht shkruar në int 66 00:03:05,580 --> 00:03:07,050 kllapat. 67 00:03:07,050 --> 00:03:10,010 Kurdo që ne i përdorim këtë term i drejtë këtu, ne do të në mënyrë efektive 68 00:03:10,010 --> 00:03:12,810 të jetë duke përdorur vlerën e tre sepse ne kemi prerë 69 00:03:12,810 --> 00:03:14,880 gjithçka pas presjes dhjetore. 70 00:03:14,880 --> 00:03:17,210 Ne gjithashtu mund të konvertohet në një kohë të gjatë në një int, e cila do të 71 00:03:17,210 --> 00:03:20,760 ngjashme të çojë në një humbje të lartë të rendit bit. 72 00:03:20,760 --> 00:03:23,910 Një kohë të gjatë merr 8 bytes, ose 64 bit në kujtesën. 73 00:03:23,910 --> 00:03:27,050 Kështu që kur kemi hedhur atë në një int i cili ka vetëm 4 byte, ose 32 74 00:03:27,050 --> 00:03:29,820 bit, ne jemi në thelb kishte prerë të gjitha bit që 75 00:03:29,820 --> 00:03:32,420 përfaqësojnë vlerat më të larta binar. 76 00:03:32,420 --> 00:03:34,690 Ju gjithashtu mund të hedhin një dopio në një float, e cila do t'i japë 77 00:03:34,690 --> 00:03:37,340 ju noton afërt të mundshme të dy pa 78 00:03:37,340 --> 00:03:39,100 domosdoshmërisht arrestimi ajo. 79 00:03:39,100 --> 00:03:41,840 Ngjashëm me afat të gjatë për të konvertimit tonë int, humbja në 80 00:03:41,840 --> 00:03:44,890 saktësi është për shkak se një të dyfishtë përmban më shumë të dhëna. 81 00:03:44,890 --> 00:03:47,910 Një dyfishtë do t'ju lejojë të ruajtur 53 bit rëndësishme, 82 00:03:47,910 --> 00:03:50,650 afërsisht 16 shifra të konsiderueshme. 83 00:03:50,650 --> 00:03:53,050 Ndërsa një noton vetëm do të ju lejojnë për të ruajtur 24 84 00:03:53,050 --> 00:03:56,235 bit të konsiderueshme, afërsisht shtatë shifra të konsiderueshme. 85 00:03:56,235 --> 00:03:58,700 Në këto dy rastet e fundit, ajo mund të jetë e dobishme për të menduar për 86 00:03:58,700 --> 00:04:01,200 shkruani hedh si Resizing një foto. 87 00:04:01,200 --> 00:04:03,860 Kur ju shkoni nga një madhësi të madhe për një madhësi të vogël, ju nuk mund të shihni 88 00:04:03,860 --> 00:04:05,600 gjërat sa më qartë sepse ju ka humbur të dhënat 89 00:04:05,600 --> 00:04:07,530 në formën e pixels. 90 00:04:07,530 --> 00:04:09,270 Lloji i hedh gjithashtu mund të shkaktojë probleme kur kemi 91 00:04:09,270 --> 00:04:11,050 hedhur në ints gjithandej. 92 00:04:11,050 --> 00:04:13,920 Që gjithandej në një makinë 32-bit të ketë vetëm 24 93 00:04:13,920 --> 00:04:16,959 bit e rëndësishme, ata nuk mund të përfaqësojë vlerat e saktë 94 00:04:16,959 --> 00:04:22,750 mbi 2 për fuqinë e 24, ose 16777217. 95 00:04:22,750 --> 00:04:25,540 Tani le të flasim për hedh eksplicite dhe implicite. 96 00:04:25,540 --> 00:04:28,000 Hedh qartë është kur ne shkruani llojin në kllapa 97 00:04:28,000 --> 00:04:29,430 para emrin e ndryshueshme. 98 00:04:29,430 --> 00:04:33,100 Si një shembull, para se të shkruante në kllapa para int tonë 99 00:04:33,100 --> 00:04:35,640 noton x ndryshueshme. 100 00:04:35,640 --> 00:04:37,200 Në këtë mënyrë, ne kemi marrë vlerën int, të 101 00:04:37,200 --> 00:04:38,593 vlera e cunguar e 3.7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Hedh nënkuptuar është kur përpiluesit automatikisht ndryshon 104 00:04:42,970 --> 00:04:46,340 lloje të ngjashme të një lloji super, ose kryen një lloj tjetër të 105 00:04:46,340 --> 00:04:48,310 hedh pa kërkuar përdoruesit për të shkruar 106 00:04:48,310 --> 00:04:49,720 çdo kodi shtesë. 107 00:04:49,720 --> 00:04:53,550 Për shembull, kur ne të shtoni 5 dhe 1.1, vlerat tona tashmë kanë 108 00:04:53,550 --> 00:04:55,680 Llojet e lidhur me ta. 109 00:04:55,680 --> 00:04:59,480 E 5 është një int, ndërsa 1.1 është një noton. 110 00:04:59,480 --> 00:05:02,390 Në mënyrë që të shtoni ato, kompjuteri hedh 5 në një noton, 111 00:05:02,390 --> 00:05:04,530 e cila do të kishte qenë e njëjta gjë si me shkrim në 5,0 112 00:05:04,530 --> 00:05:06,476 vendin e parë. 113 00:05:06,476 --> 00:05:13,210 Por në këtë mënyrë themi noton 5, ose 5,0, plus çfarë ishte tashmë 114 00:05:13,210 --> 00:05:16,960 a noton, 1.1, dhe nga atje ne mund të vërtetë të shtoni këto 115 00:05:16,960 --> 00:05:18,640 vlerat dhe të marrë vlerën 6.1. 116 00:05:21,170 --> 00:05:23,500 Hedh nënkuptuar gjithashtu na lejon të caktojë variablave të 117 00:05:23,500 --> 00:05:25,590 Llojet e ndryshme të njëri-tjetrit. 118 00:05:25,590 --> 00:05:28,110 Ne gjithmonë mund të caktojë një lloj pak më të saktë në një 119 00:05:28,110 --> 00:05:29,250 një saktë. 120 00:05:29,250 --> 00:05:37,060 Për shembull, në qoftë se ne kemi një të dyfishtë x, y dhe një int - 121 00:05:37,060 --> 00:05:40,120 dhe këto mund të ketë ndonjë vlerat që ne kemi vendosur ato në - 122 00:05:40,120 --> 00:05:43,560 ne mund të themi x y barabartë. 123 00:05:43,560 --> 00:05:46,340 Sepse dyfishtë ka saktësi më shumë se një int, kështu që ne 124 00:05:46,340 --> 00:05:48,380 nuk do të humbasë ndonjë informacion. 125 00:05:48,380 --> 00:05:50,420 Nga ana tjetër, kjo nuk do domosdoshmërisht të jetë e saktë të thuhet 126 00:05:50,420 --> 00:05:54,060 y x barabartë, sepse dyfishtë mund të ketë një vlerë më të madhe se 127 00:05:54,060 --> 00:05:55,220 integer. 128 00:05:55,220 --> 00:05:57,420 Dhe kështu numër i plotë nuk mund të jetë në gjendje të mbajë të gjitha 129 00:05:57,420 --> 00:05:59,560 Informacioni ruhet në dyfishin. 130 00:05:59,560 --> 00:06:02,610 Hedh nënkuptuar është përdorur edhe në krahasim operatorëve si 131 00:06:02,610 --> 00:06:06,410 më e madhe se, më pak se, ose operatori barazia. 132 00:06:06,410 --> 00:06:13,050 Në këtë mënyrë ne mund të themi nëse 5,1 është më e madhe se 5, dhe ne të merrni 133 00:06:13,050 --> 00:06:14,750 rezultojë e vërtetë. 134 00:06:14,750 --> 00:06:18,470 Sepse 5 është një int, por ajo do të hidhet në një noton në mënyrë që të 135 00:06:18,470 --> 00:06:22,090 të krahasohet me float 5.1, ne do të themi është 5.1 136 00:06:22,090 --> 00:06:24,550 më e madhe se 5.0. 137 00:06:24,550 --> 00:06:31,320 E njëjta gjë është e vërtetë me thënë, nëse është e barabartë me 2.0 barabartë me 2. 138 00:06:31,320 --> 00:06:34,190 Ne do të merrni edhe e vërtetë, sepse kompjuteri do të hedhin 139 00:06:34,190 --> 00:06:39,750 integer 2 për noton dhe pastaj thonë se 2.0 barabartë me 2,0 barabartë, 140 00:06:39,750 --> 00:06:41,660 kjo është e vërtetë. 141 00:06:41,660 --> 00:06:44,180 Mos harroni se ne mund të hedhin në mes të ints dhe karktereve, 142 00:06:44,180 --> 00:06:46,350 ose vlerat ASCII. 143 00:06:46,350 --> 00:06:49,690 Chars gjithashtu duhet të reduktohet në binar, e cila është arsyeja pse ju 144 00:06:49,690 --> 00:06:51,920 lehtë mund të konvertohet në mes të karaktere dhe të tyre përkatëse 145 00:06:51,920 --> 00:06:53,260 Vlerat ASCII. 146 00:06:53,260 --> 00:06:56,180 Për të mësuar më shumë për këtë, shikoni videon tonë në ASCII. 147 00:06:56,180 --> 00:06:58,080 Kur ju keni marrë një moment për të menduar rreth asaj se si të dhënave është ruajtur, 148 00:06:58,080 --> 00:06:59,990 ajo fillon të bëjë shumë kuptim. 149 00:06:59,990 --> 00:07:02,790 Është vetëm si dallimi në mes era dhe era. 150 00:07:02,790 --> 00:07:05,490 Të dhënave është i njëjtë, por lloji mund të ndryshojë mënyrën se si ne 151 00:07:05,490 --> 00:07:06,720 interpretojnë atë. 152 00:07:06,720 --> 00:07:10,430 Emri im është Jordan Jozwiak, kjo CS50.