1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN JOZWIAK: Tip lijevanje, u najjednostavnijem smislu, je 2 00:00:10,270 --> 00:00:13,300 način mijenjati računalu tumačenje nekih podataka 3 00:00:13,300 --> 00:00:16,560 implicitno ili eksplicitno mijenja svoju vrstu podataka. 4 00:00:16,560 --> 00:00:19,940 Kao što su mijenjanje int na plovak, ili obrnuto. 5 00:00:19,940 --> 00:00:21,550 Da bi razumjeli tipa casting, trebamo 6 00:00:21,550 --> 00:00:22,680 početi s osnove - 7 00:00:22,680 --> 00:00:24,140 vrste podataka sami. 8 00:00:24,140 --> 00:00:26,960 U računalnih jezika poput C, sve varijable imaju nekakvu 9 00:00:26,960 --> 00:00:29,690 podataka tipa koji određuje kako će računalo, a isto tako 10 00:00:29,690 --> 00:00:32,140 korisnik, tumači tu varijablu. 11 00:00:32,140 --> 00:00:35,160 Numerički tipovi podataka kao što je int, long long, float i 12 00:00:35,160 --> 00:00:38,110 bračni, svi imaju svoje jedinstvene karakteristike i 13 00:00:38,110 --> 00:00:41,370 koristiti za određivanje vrijednosti različitih raspona i preciznost. 14 00:00:41,370 --> 00:00:44,800 Tip lijevanje omogućuje nam da se decimalni broj kao 15 00:00:44,800 --> 00:00:49,170 3,14 i dobiti dio prije decimale, 3 u ovom slučaju, 16 00:00:49,170 --> 00:00:51,590 ga bacaju na int. 17 00:00:51,590 --> 00:00:53,900 Uzmimo primjer iz engleskog jezika za kratki 18 00:00:53,900 --> 00:00:56,910 pregled tipova, i vidjeti kako tip lijevanje može promijeniti 19 00:00:56,910 --> 00:00:59,380 način interpretirati dio podataka. 20 00:00:59,380 --> 00:01:05,269 Za podacima, hajdemo uzeti simbole ovdje. 21 00:01:05,269 --> 00:01:07,570 Upravo sam se odnosi na ove pažljivo konfiguriranih linije kao 22 00:01:07,570 --> 00:01:10,100 simboli, ali kao netko tko zna engleski jezik, 23 00:01:10,100 --> 00:01:12,750 možete odmah prepoznati da su, u stvari, slova. 24 00:01:12,750 --> 00:01:15,580 Vi razumjela vrstu podataka. 25 00:01:15,580 --> 00:01:17,620 Gledajući ovaj niz slova možemo vidjeti dvije 26 00:01:17,620 --> 00:01:20,140 različite riječi, svaka sa svojom smislu. 27 00:01:20,140 --> 00:01:25,530 Tu je imenica, vjetar, kao u vjetar puše vani. 28 00:01:25,530 --> 00:01:28,280 I tu je glagol, vjetar, kao iu trebam 29 00:01:28,280 --> 00:01:31,410 vjetar moj analogni sat. 30 00:01:31,410 --> 00:01:33,420 Ovo je zanimljiv primjer, jer možemo vidjeti 31 00:01:33,420 --> 00:01:36,270 kako tip koji smo dodijelili našim podacima, je li imenica ili 32 00:01:36,270 --> 00:01:39,080 glagol mijenja kako se koriste te podatke - 33 00:01:39,080 --> 00:01:41,730 kao riječi vjetar ili vjetar. 34 00:01:41,730 --> 00:01:44,100 Iako računalo ne brine o gramatici i dijelovi 35 00:01:44,100 --> 00:01:47,750 engleskog govora, isti osnovni princip vrijedi. 36 00:01:47,750 --> 00:01:50,290 To je, možemo promijeniti tumačenje točno 37 00:01:50,290 --> 00:01:53,140 Isti podaci pohranjeni u memoriji, jednostavno ga bacaju na 38 00:01:53,140 --> 00:01:54,576 drugačiji tip. 39 00:01:54,576 --> 00:01:57,250 Ovdje su veličine od najčešćih tipova na 32-bitni 40 00:01:57,250 --> 00:01:58,340 operativni sustav. 41 00:01:58,340 --> 00:02:02,070 Imamo char na jedan byte, int i lebdjeti na 4 bajta, dugo 42 00:02:02,070 --> 00:02:04,390 dugo i dvaput na 8 bajtova. 43 00:02:04,390 --> 00:02:07,670 Zbog int zauzima 4 byte, to će potrajati 32 bita 44 00:02:07,670 --> 00:02:10,060 kada se pohranjuje u memoriju kao binarni niz 45 00:02:10,060 --> 00:02:11,500 nula i one. 46 00:02:11,500 --> 00:02:14,020 Dokle god naše varijable ostaje kao tipa int, The 47 00:02:14,020 --> 00:02:16,740 računalo će uvijek pretvoriti one one i nula iz 48 00:02:16,740 --> 00:02:19,120 binarni u izvornom broju. 49 00:02:19,120 --> 00:02:21,270 Međutim, mi teoretski mogao baciti onih 32 50 00:02:21,270 --> 00:02:23,510 bitova u niz Boolean tipova. 51 00:02:23,510 --> 00:02:26,090 A onda računalo ne bi više vidjeti broj, ali 52 00:02:26,090 --> 00:02:28,810 umjesto zbirka nula i one. 53 00:02:28,810 --> 00:02:31,570 Također smo mogli pokušati pročitati te podatke kao drugačiji numerička 54 00:02:31,570 --> 00:02:34,660 upisati, ili čak kao niz od četiri znakova. 55 00:02:34,660 --> 00:02:37,820 Kad se bave brojeva u lijevanje, morate uzeti u obzir kako 56 00:02:37,820 --> 00:02:40,470 preciznost svoju vrijednost će biti pogođeni. 57 00:02:40,470 --> 00:02:43,240 Imajte na umu da je precizna može ostati isti, 58 00:02:43,240 --> 00:02:47,150 ili možete izgubiti preciznost, ali nikada ne možete dobiti preciznost. 59 00:02:47,150 --> 00:02:49,060 Idemo kroz za tri najčešćih načina na koje možete 60 00:02:49,060 --> 00:02:50,400 izgubiti preciznost. 61 00:02:50,400 --> 00:02:53,060 Casting je plovak na int će uzrokovati skraćivanje svega 62 00:02:53,060 --> 00:02:54,900 nakon decimalne točke, tako da ste ostavili 63 00:02:54,900 --> 00:02:55,950 s cijeli broj. 64 00:02:55,950 --> 00:03:02,000 Ako uzmemo float x koji će izjednači 3,7, možemo baciti 65 00:03:02,000 --> 00:03:05,580 ova varijabla x int jednostavno pisati int u 66 00:03:05,580 --> 00:03:07,050 zagrade. 67 00:03:07,050 --> 00:03:10,010 Kad god smo koristiti taj termin ovdje, mi ćemo učinkovito 68 00:03:10,010 --> 00:03:12,810 se koriste vrijednost triju jer smo odrezan 69 00:03:12,810 --> 00:03:14,880 sve nakon decimalne točke. 70 00:03:14,880 --> 00:03:17,210 Mi također može pretvoriti dugo dugo int, koji će 71 00:03:17,210 --> 00:03:20,760 slično dovesti do gubitka velike reda bita. 72 00:03:20,760 --> 00:03:23,910 Dugo dugo traje do 8 bajtova, ili 64 bita u sjećanju. 73 00:03:23,910 --> 00:03:27,050 Dakle, kada smo ga baci na int koji ima samo četiri bajtova ili 32 74 00:03:27,050 --> 00:03:29,820 bita, što u suštini chopping off sve bitova koji 75 00:03:29,820 --> 00:03:32,420 predstavljaju više vrijednosti binarne. 76 00:03:32,420 --> 00:03:34,690 Također bi mogao baciti dvostruko na plovak, koji će dati 77 00:03:34,690 --> 00:03:37,340 ti najbliži mogući plutaju na kontre bez 78 00:03:37,340 --> 00:03:39,100 nužno zaokruživanje to. 79 00:03:39,100 --> 00:03:41,840 Slično naš dugo dugo int pretvorbe, gubitak u 80 00:03:41,840 --> 00:03:44,890 preciznost je dvostruka jer sadrži više podataka. 81 00:03:44,890 --> 00:03:47,910 Dvostruko će vam omogućiti da pohraniti 53 značajnih bitova, 82 00:03:47,910 --> 00:03:50,650 oko 16 značajnih znamenki. 83 00:03:50,650 --> 00:03:53,050 Dok plutaju samo da će vam omogućiti da pohraniti 24 84 00:03:53,050 --> 00:03:56,235 značajnih bitova, otprilike sedam značajne znamenke. 85 00:03:56,235 --> 00:03:58,700 U ovih posljednjih dva slučaja, to može biti korisno misliti 86 00:03:58,700 --> 00:04:01,200 upišite casting kao mijenjanje veličine fotografija. 87 00:04:01,200 --> 00:04:03,860 Kada idete iz velikog veličine do male veličine, ne možete vidjeti 88 00:04:03,860 --> 00:04:05,600 stvari kao što je jasno, jer ste izgubili podatke 89 00:04:05,600 --> 00:04:07,530 u obliku piksela. 90 00:04:07,530 --> 00:04:09,270 Tip lijevanje također može uzrokovati probleme kada smo 91 00:04:09,270 --> 00:04:11,050 baci Ints da pliva. 92 00:04:11,050 --> 00:04:13,920 Budući da pliva na 32-bitnom stroju imaju samo 24 93 00:04:13,920 --> 00:04:16,959 značajnih bitova, oni ne mogu točno predstavljaju vrijednosti 94 00:04:16,959 --> 00:04:22,750 više od 2 na potenciju 24, ili 16.777.217. 95 00:04:22,750 --> 00:04:25,540 Sada ćemo govoriti o eksplicitnim i implicitnim lijevanje. 96 00:04:25,540 --> 00:04:28,000 Eksplicitno casting je kad smo napisati tip u zagradama 97 00:04:28,000 --> 00:04:29,430 prije imena varijabli. 98 00:04:29,430 --> 00:04:33,100 Kao primjer, prije nego što smo pisali int u zagradi prije naše 99 00:04:33,100 --> 00:04:35,640 plutaju varijabla x. 100 00:04:35,640 --> 00:04:37,200 Na ovaj način, dobili smo int vrijednosti, 101 00:04:37,200 --> 00:04:38,593 skraćen vrijednost 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Implicitno casting je kada prevodilac automatski mijenja 104 00:04:42,970 --> 00:04:46,340 slične vrste u super tipu, ili obavlja neku drugu vrstu 105 00:04:46,340 --> 00:04:48,310 lijevanje bez potrebe korisnika za pisanje 106 00:04:48,310 --> 00:04:49,720 svaki dodatni broj. 107 00:04:49,720 --> 00:04:53,550 Na primjer, kada smo dodali 5 i 1,1, naše vrijednosti već imate 108 00:04:53,550 --> 00:04:55,680 vrste povezane s njima. 109 00:04:55,680 --> 00:04:59,480 5 je int, dok 1.1 plovak. 110 00:04:59,480 --> 00:05:02,390 Da bi ih dodali, računalo baca 5 u float, 111 00:05:02,390 --> 00:05:04,530 koja bi bila ista stvar kao i pisanje 5,0 u 112 00:05:04,530 --> 00:05:06,476 prvo mjesto. 113 00:05:06,476 --> 00:05:13,210 No, na taj način možemo reći plovak 5 ili 5,0, plus ono što je već 114 00:05:13,210 --> 00:05:16,960 float, 1.1, i od tamo zapravo možemo dodati ove 115 00:05:16,960 --> 00:05:18,640 Vrijednosti i dobiti vrijednost 6,1. 116 00:05:21,170 --> 00:05:23,500 Implicitno lijevanje također nam omogućuje da dodijeliti varijabli 117 00:05:23,500 --> 00:05:25,590 različite vrste međusobno. 118 00:05:25,590 --> 00:05:28,110 Mi uvijek može dodijeliti manje precizan tip u više 119 00:05:28,110 --> 00:05:29,250 precizan jedan. 120 00:05:29,250 --> 00:05:37,060 Na primjer, ako imamo dvostruki X, i jedan int y - 121 00:05:37,060 --> 00:05:40,120 a to bi moglo imati nikakve vrijednosti koje smo ih postavili na - 122 00:05:40,120 --> 00:05:43,560 možemo reći x jednaka y. 123 00:05:43,560 --> 00:05:46,340 Budući bračni ima više preciznosti nego int, pa smo 124 00:05:46,340 --> 00:05:48,380 neće izgubiti sve podatke. 125 00:05:48,380 --> 00:05:50,420 S druge strane, to ne mora nužno biti točno reći 126 00:05:50,420 --> 00:05:54,060 y jednak x, jer bračni može imati veću vrijednost nego 127 00:05:54,060 --> 00:05:55,220 cijeli broj. 128 00:05:55,220 --> 00:05:57,420 I tako cijeli možda neće biti u mogućnosti to držati sve 129 00:05:57,420 --> 00:05:59,560 podaci pohranjeni u dvostruko. 130 00:05:59,560 --> 00:06:02,610 Implicitno lijevanje Također se koristi u usporedbi operatera poput 131 00:06:02,610 --> 00:06:06,410 veći od, manje od, ili jednakost operatora. 132 00:06:06,410 --> 00:06:13,050 Na taj način možemo reći, ako je veći od 5,1 pet, a mi smo dobili 133 00:06:13,050 --> 00:06:14,750 rezultirati istina. 134 00:06:14,750 --> 00:06:18,470 Zbog pet je int, ali to će biti bačen na plovak kako bi se 135 00:06:18,470 --> 00:06:22,090 se u odnosu na plovak 5.1, mi bismo rekli 5.1 je 136 00:06:22,090 --> 00:06:24,550 veći od 5.0. 137 00:06:24,550 --> 00:06:31,320 Isto vrijedi i za reći, ako 2,0 jednak jednak dva. 138 00:06:31,320 --> 00:06:34,190 Mi također bih se istina, jer računalo će baciti 139 00:06:34,190 --> 00:06:39,750 cijeli dvije plutaju i onda kažu 2,0 jednak jednak 2,0, 140 00:06:39,750 --> 00:06:41,660 to je istina. 141 00:06:41,660 --> 00:06:44,180 Nemojte zaboraviti da smo se također može baciti između Ints i znakovi, 142 00:06:44,180 --> 00:06:46,350 ili ASCII vrijednosti. 143 00:06:46,350 --> 00:06:49,690 Znakova također treba svesti na binarnom, što je razlog zašto 144 00:06:49,690 --> 00:06:51,920 može se lako pretvoriti između znakova i njihovih 145 00:06:51,920 --> 00:06:53,260 ASCII vrijednosti. 146 00:06:53,260 --> 00:06:56,180 Da biste saznali više o tome, check out naš video na ASCII. 147 00:06:56,180 --> 00:06:58,080 Kada uzeti trenutak razmišljati o tome kako podaci se pohranjuju, 148 00:06:58,080 --> 00:06:59,990 počinje napraviti puno smisla. 149 00:06:59,990 --> 00:07:02,790 To je baš kao razlika između vjetra i vjetra. 150 00:07:02,790 --> 00:07:05,490 Podaci isti, ali možete promijeniti tip kako bismo 151 00:07:05,490 --> 00:07:06,720 ga tumače. 152 00:07:06,720 --> 00:07:10,430 Moje ime je Jordan Jozwiak, to cs50.