1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN JOZWIAK: Tip turnare, în cel mai simplu sens, este un 2 00:00:10,270 --> 00:00:13,300 modalitate de a modifica interpretarea unui computer a unor date de către 3 00:00:13,300 --> 00:00:16,560 implicit sau explicit modificarea tipului său de date. 4 00:00:16,560 --> 00:00:19,940 Cum ar fi schimbarea de la o int float, sau invers. 5 00:00:19,940 --> 00:00:21,550 Pentru a înțelege tipul de turnare, trebuie să ne 6 00:00:21,550 --> 00:00:22,680 începe cu elementele de bază - 7 00:00:22,680 --> 00:00:24,140 tipurile de date în sine. 8 00:00:24,140 --> 00:00:26,960 În limbile de calculator, cum ar fi C, toate variabilele au un fel 9 00:00:26,960 --> 00:00:29,690 de tipul de date care determină modul în calculator, și, de asemenea, 10 00:00:29,690 --> 00:00:32,140 utilizator, interpretează acea variabilă. 11 00:00:32,140 --> 00:00:35,160 Tipuri de date numerice, cum ar fi un int, long long, float și 12 00:00:35,160 --> 00:00:38,110 dublă, toate au propriile lor caracteristici unice și sunt 13 00:00:38,110 --> 00:00:41,370 folosit pentru a specifica valori diferite intervale de precizie și de. 14 00:00:41,370 --> 00:00:44,800 Turnare de tip ne permite să ia o serie virgulă mobilă cum ar fi 15 00:00:44,800 --> 00:00:49,170 3.14 și de a lua parte înainte de zecimală, 3 în acest caz, 16 00:00:49,170 --> 00:00:51,590 prin turnare-l la un int. 17 00:00:51,590 --> 00:00:53,900 Să luăm un exemplu din limba engleză pentru o scurtă 18 00:00:53,900 --> 00:00:56,910 revizuirea tipuri, precum și pentru a vedea cum se poate schimba tipul de turnare 19 00:00:56,910 --> 00:00:59,380 modul în care ne interpreta o bucată de date. 20 00:00:59,380 --> 00:01:05,269 Pentru datele, să ia simbolurile aici. 21 00:01:05,269 --> 00:01:07,570 Mă refer doar la aceste linii atent configurate ca 22 00:01:07,570 --> 00:01:10,100 simboluri, ci ca cineva care cunoaște limba engleză, 23 00:01:10,100 --> 00:01:12,750 vă imediat recunosc că acestea sunt, de fapt, scrisori. 24 00:01:12,750 --> 00:01:15,580 Ai înțeles implicit tipul de date. 25 00:01:15,580 --> 00:01:17,620 Privind la acest șir de litere, putem vedea două 26 00:01:17,620 --> 00:01:20,140 cuvinte diferite, fiecare cu propria semnificație. 27 00:01:20,140 --> 00:01:25,530 Nu e substantiv, vântul, ca și în afara bate vantul. 28 00:01:25,530 --> 00:01:28,280 Și acolo e verbul, vântul, așa cum am nevoie să în 29 00:01:28,280 --> 00:01:31,410 vânt ceasul meu analogic. 30 00:01:31,410 --> 00:01:33,420 Acesta este un exemplu interesant, pentru că putem vedea 31 00:01:33,420 --> 00:01:36,270 cum tipul care am atribui datelor noastre, indiferent dacă substantiv sau 32 00:01:36,270 --> 00:01:39,080 verbale, schimbă modul în care le folosim aceste date - 33 00:01:39,080 --> 00:01:41,730 ca vântul cuvântul sau vânt. 34 00:01:41,730 --> 00:01:44,100 Deși un calculator nu-i pasă de gramatică și piese 35 00:01:44,100 --> 00:01:47,750 de exprimare în engleză, același principiu de bază se aplică. 36 00:01:47,750 --> 00:01:50,290 Asta este, ne putem schimba interpretarea exactă 37 00:01:50,290 --> 00:01:53,140 aceleași date stocate în memorie prin simpla turnare a unui 38 00:01:53,140 --> 00:01:54,576 diferit tip. 39 00:01:54,576 --> 00:01:57,250 Aici sunt dimensiunile cele mai comune tipuri de la un 32-bit 40 00:01:57,250 --> 00:01:58,340 sistemul de operare. 41 00:01:58,340 --> 00:02:02,070 Avem un char la 1 octet, int si float la 4 octeți, o lungă 42 00:02:02,070 --> 00:02:04,390 lungă și o dublă la 8 octeți. 43 00:02:04,390 --> 00:02:07,670 Pentru ca un int ocupa 4 octeti, aceasta va dura până pe 32 de biți 44 00:02:07,670 --> 00:02:10,060 atunci când este stocat în memorie ca o serie binar 45 00:02:10,060 --> 00:02:11,500 de zero-uri și unu. 46 00:02:11,500 --> 00:02:14,020 Atâta timp cât variabila noastră rămâne ca un tip int, 47 00:02:14,020 --> 00:02:16,740 calculatorul va converti întotdeauna acele unu și zero din 48 00:02:16,740 --> 00:02:19,120 binar în numărul inițial. 49 00:02:19,120 --> 00:02:21,270 Cu toate acestea, am putea arunca teoretic cele 32 50 00:02:21,270 --> 00:02:23,510 biți într-o serie de tipuri de booleene. 51 00:02:23,510 --> 00:02:26,090 Și apoi calculatorul nu va mai vedea un număr, dar 52 00:02:26,090 --> 00:02:28,810 în schimb, o colecție de zero și unu. 53 00:02:28,810 --> 00:02:31,570 Am putea încerca, de asemenea pentru a citi aceste date ca un cod numeric diferit 54 00:02:31,570 --> 00:02:34,660 tastați, sau chiar ca un șir de patru caractere. 55 00:02:34,660 --> 00:02:37,820 Atunci când se ocupă cu numere din turnare, trebuie să ia în considerare modul în care 56 00:02:37,820 --> 00:02:40,470 precizia de valoarea ta va fi afectat. 57 00:02:40,470 --> 00:02:43,240 Rețineți că precizia poate rămâne aceeași, 58 00:02:43,240 --> 00:02:47,150 sau poti pierde precizia, dar niciodata nu poti castiga precizie. 59 00:02:47,150 --> 00:02:49,060 Să mergem prin intermediul pentru cele trei cele mai comune modalități pe care le puteți 60 00:02:49,060 --> 00:02:50,400 pierde precizie. 61 00:02:50,400 --> 00:02:53,060 Turnarea unui float la un int va cauza trunchierea de tot 62 00:02:53,060 --> 00:02:54,900 după virgulă, deci esti plecat 63 00:02:54,900 --> 00:02:55,950 cu numărul întreg. 64 00:02:55,950 --> 00:03:02,000 Dacă luăm x float, care va fi egal cu 3.7, putem arunca 65 00:03:02,000 --> 00:03:05,580 acest variabila x la o int de scris pur și simplu int în 66 00:03:05,580 --> 00:03:07,050 paranteze. 67 00:03:07,050 --> 00:03:10,010 Ori de câte ori vom folosi acest termen chiar aici, vă vom eficient 68 00:03:10,010 --> 00:03:12,810 fi folosind valoarea trei pentru ca ne-am redus 69 00:03:12,810 --> 00:03:14,880 totul după punctul zecimal. 70 00:03:14,880 --> 00:03:17,210 Ne poate converti, de asemenea, o lungă lung pentru un int, care va 71 00:03:17,210 --> 00:03:20,760 în mod similar duce la o pierdere de mare de ordinul biți. 72 00:03:20,760 --> 00:03:23,910 Un timp lung preia 8 bytes, sau 64 biți în memorie. 73 00:03:23,910 --> 00:03:27,050 Asa ca atunci cand l-am aruncat la un int care are doar 4 octeți, sau 32 74 00:03:27,050 --> 00:03:29,820 biți, suntem în esență, tocare pe toți biții care 75 00:03:29,820 --> 00:03:32,420 reprezintă valorile cele mai mari binare. 76 00:03:32,420 --> 00:03:34,690 Ai putea, de asemenea, un dublu aruncat la un flotor, care va oferi 77 00:03:34,690 --> 00:03:37,340 vă float cel mai apropiat posibil de a dubla fara 78 00:03:37,340 --> 00:03:39,100 neapărat rotunjire-l. 79 00:03:39,100 --> 00:03:41,840 Similar cu mult timp lunga noastră la convertire int, pierderea 80 00:03:41,840 --> 00:03:44,890 precizia se datorează faptului că o dublă conține mai multe date. 81 00:03:44,890 --> 00:03:47,910 Un dublu vă va permite să stocați 53 biți semnificativi, 82 00:03:47,910 --> 00:03:50,650 aproximativ 16 cifre semnificative. 83 00:03:50,650 --> 00:03:53,050 Întrucât un flotor va permite doar să stocați 24 84 00:03:53,050 --> 00:03:56,235 biți semnificative, de aproximativ șapte cifre semnificative. 85 00:03:56,235 --> 00:03:58,700 În aceste ultimele două cazuri, ar putea fi util să se gândească la 86 00:03:58,700 --> 00:04:01,200 tastați turnare ca redimensionarea o fotografie. 87 00:04:01,200 --> 00:04:03,860 Când te duci la o dimensiune mare, la o dimensiune mică, nu puteți vedea 88 00:04:03,860 --> 00:04:05,600 lucrurile pe cât de clar că ți-ai pierdut date 89 00:04:05,600 --> 00:04:07,530 sub formă de pixeli. 90 00:04:07,530 --> 00:04:09,270 Turnare de tip poate provoca, de asemenea, probleme atunci când ne 91 00:04:09,270 --> 00:04:11,050 Ints aruncat la flotoare. 92 00:04:11,050 --> 00:04:13,920 Deoarece plutește pe o mașină pe 32 de biți au doar 24 93 00:04:13,920 --> 00:04:16,959 biți semnificative, ele nu pot reprezenta cu exactitate valorile 94 00:04:16,959 --> 00:04:22,750 peste 2 la puterea de 24, sau 16777217. 95 00:04:22,750 --> 00:04:25,540 Acum, hai sa vorbim despre turnarea explicite și implicite. 96 00:04:25,540 --> 00:04:28,000 Turnare explicită este atunci când scriem în paranteze de tip 97 00:04:28,000 --> 00:04:29,430 înainte de un nume de variabilă. 98 00:04:29,430 --> 00:04:33,100 Ca un exemplu, am scris înainte de a int în paranteze înainte de a noastră 99 00:04:33,100 --> 00:04:35,640 float x variabile. 100 00:04:35,640 --> 00:04:37,200 În acest fel, vom obține valoarea int, 101 00:04:37,200 --> 00:04:38,593 Valoarea trunchiată de 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Turnare implicit este atunci când compilatorul se schimbă automat 104 00:04:42,970 --> 00:04:46,340 tipuri similare la un tip super, sau prestează un fel de alte 105 00:04:46,340 --> 00:04:48,310 turnare fără a necesita utilizatorului de a scrie 106 00:04:48,310 --> 00:04:49,720 orice suplimentare de cod. 107 00:04:49,720 --> 00:04:53,550 De exemplu, atunci când vom adăuga 5 și 1.1, valorile noastre deja au 108 00:04:53,550 --> 00:04:55,680 Tipuri de asociate cu acestea. 109 00:04:55,680 --> 00:04:59,480 5 este un int, întrucât 1.1 este un flotor. 110 00:04:59,480 --> 00:05:02,390 În scopul de a le adăuga, calculatorul aruncă 5 într-un flotor, 111 00:05:02,390 --> 00:05:04,530 care ar fi fost același lucru ca și scris, 5,0 în 112 00:05:04,530 --> 00:05:06,476 primul loc. 113 00:05:06,476 --> 00:05:13,210 Dar această cale spunem float 5 sau 5.0, plus ceea ce a fost deja 114 00:05:13,210 --> 00:05:16,960 un float, 1,1, și de acolo putem adăuga de fapt, aceste 115 00:05:16,960 --> 00:05:18,640 valorile și obține valoarea 6.1. 116 00:05:21,170 --> 00:05:23,500 Turnare implicit, de asemenea, ne permite să atribuiți variabilele de 117 00:05:23,500 --> 00:05:25,590 tipuri diferite de la fiecare alte. 118 00:05:25,590 --> 00:05:28,110 Putem atribui întotdeauna un tip mai puțin precisă într-o mai 119 00:05:28,110 --> 00:05:29,250 precis unul. 120 00:05:29,250 --> 00:05:37,060 De exemplu, dacă avem un dublu x, y si un int - 121 00:05:37,060 --> 00:05:40,120 iar acestea ar putea avea orice valori care le-am stabilit la - 122 00:05:40,120 --> 00:05:43,560 putem spune este egal cu x, y. 123 00:05:43,560 --> 00:05:46,340 Deoarece dublă are o precizie mai mult decât un int, asa ca am 124 00:05:46,340 --> 00:05:48,380 nu va pierde nici o informație. 125 00:05:48,380 --> 00:05:50,420 Pe de altă parte, nu ar fi neapărat corect să spunem 126 00:05:50,420 --> 00:05:54,060 y este egal cu x, deoarece s-ar putea dubla au o valoare mai mare decât 127 00:05:54,060 --> 00:05:55,220 întreg. 128 00:05:55,220 --> 00:05:57,420 Și astfel întreg ar putea să nu fie în măsură să dețină toate 129 00:05:57,420 --> 00:05:59,560 informațiile stocate în dubla. 130 00:05:59,560 --> 00:06:02,610 Turnare implicit este, de asemenea, utilizat în operatori de comparație ca 131 00:06:02,610 --> 00:06:06,410 mai mare, mai mică, sau operatorul de egalitate. 132 00:06:06,410 --> 00:06:13,050 În acest fel putem spune dacă 5.1 este mai mare de 5, si ajungem 133 00:06:13,050 --> 00:06:14,750 rezulta adevărat. 134 00:06:14,750 --> 00:06:18,470 Deoarece 5 este un int, dar va fi aruncat la un flotor, în scopul de a 135 00:06:18,470 --> 00:06:22,090 fi comparată cu flotor 5.1, am spune 5.1 este 136 00:06:22,090 --> 00:06:24,550 mai mare de 5.0. 137 00:06:24,550 --> 00:06:31,320 Același lucru este valabil în cazul în care spune cu 2.0 egal este egal cu 2. 138 00:06:31,320 --> 00:06:34,190 Ne-ar obține, de asemenea adevărat, deoarece calculatorul va arunca 139 00:06:34,190 --> 00:06:39,750 2 întreg să plutească și apoi spun 2.0 este egal cu egal cu 2.0, 140 00:06:39,750 --> 00:06:41,660 acest lucru este adevărat. 141 00:06:41,660 --> 00:06:44,180 Nu uita că putem arunca, de asemenea, între Ints și caractere, 142 00:06:44,180 --> 00:06:46,350 sau valorile ASCII. 143 00:06:46,350 --> 00:06:49,690 Caractere, de asemenea, trebuie să fie redusă la binar, care este motivul pentru care 144 00:06:49,690 --> 00:06:51,920 poate converti cu ușurință între caractere și respective a acestora 145 00:06:51,920 --> 00:06:53,260 Valorile ASCII. 146 00:06:53,260 --> 00:06:56,180 Pentru a afla mai multe despre acest lucru, a verifica afară videoclipul nostru pe ASCII. 147 00:06:56,180 --> 00:06:58,080 Când luați un moment să se gândească la modul în care datele stocate e, 148 00:06:58,080 --> 00:06:59,990 ea începe să facă o mulțime de sens. 149 00:06:59,990 --> 00:07:02,790 E la fel ca diferența dintre vânt și vântul. 150 00:07:02,790 --> 00:07:05,490 De date este aceeași, dar tipul poate schimba modul în care ne 151 00:07:05,490 --> 00:07:06,720 interpreteze aceasta. 152 00:07:06,720 --> 00:07:10,430 Numele meu este Iordania Jozwiak, acest CS50.