1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN Jozwiak: Type gieten, in de meest eenvoudige zin een 2 00:00:10,270 --> 00:00:13,300 manier om een ​​computer de interpretatie van sommige gegevens te veranderen door 3 00:00:13,300 --> 00:00:16,560 impliciet of expliciet het veranderen van de data type. 4 00:00:16,560 --> 00:00:19,940 Zoals het veranderen van een int een float of vice versa. 5 00:00:19,940 --> 00:00:21,550 Om type casting te begrijpen, moeten we 6 00:00:21,550 --> 00:00:22,680 beginnen met de basis - 7 00:00:22,680 --> 00:00:24,140 gegevenstypen zelf. 8 00:00:24,140 --> 00:00:26,960 In computer talen zoals C, alle variabelen hebben een soort 9 00:00:26,960 --> 00:00:29,690 van het gegevenstype dat bepaalt hoe de computer, en ook 10 00:00:29,690 --> 00:00:32,140 de gebruiker, interpreteert die variabele. 11 00:00:32,140 --> 00:00:35,160 Numerieke data types, zoals een int, long long, float en 12 00:00:35,160 --> 00:00:38,110 dubbele, hebben allemaal hun eigen unieke kenmerken en zijn 13 00:00:38,110 --> 00:00:41,370 gebruikt om waarden van verschillende reeksen en precisie geven. 14 00:00:41,370 --> 00:00:44,800 Type casting laat ons toe om een ​​floating point getal te nemen, zoals 15 00:00:44,800 --> 00:00:49,170 3.14 en krijg het deel voor de komma, 3 in dit geval, 16 00:00:49,170 --> 00:00:51,590 door gieten aan een int. 17 00:00:51,590 --> 00:00:53,900 Laten we eens een voorbeeld nemen aan het Engels voor een korte 18 00:00:53,900 --> 00:00:56,910 beoordelen van de typen, en om te zien hoe typecasting kan veranderen 19 00:00:56,910 --> 00:00:59,380 de manier waarop we interpreteren van een stuk van de gegevens. 20 00:00:59,380 --> 00:01:05,269 Voor data, laten we hier neemt u de symbolen. 21 00:01:05,269 --> 00:01:07,570 Ik zie deze zorgvuldig geconfigureerd lijnen als 22 00:01:07,570 --> 00:01:10,100 symbolen, maar als iemand die weet de Engels taal, 23 00:01:10,100 --> 00:01:12,750 je onmiddellijk erkennen dat ze, in feite, brieven. 24 00:01:12,750 --> 00:01:15,580 U impliciet begrepen het gegevenstype. 25 00:01:15,580 --> 00:01:17,620 Kijkend naar deze reeks letters zien we twee 26 00:01:17,620 --> 00:01:20,140 andere woorden, elk met een eigen betekenis. 27 00:01:20,140 --> 00:01:25,530 Er het zelfstandig naamwoord, wind, zoals in de wind buiten. 28 00:01:25,530 --> 00:01:28,280 En er is het werkwoord, wind, net als in ik moet 29 00:01:28,280 --> 00:01:31,410 wind mijn analoge horloge. 30 00:01:31,410 --> 00:01:33,420 Dit is een interessant voorbeeld, omdat we kunnen zien 31 00:01:33,420 --> 00:01:36,270 hoe het type dat we aan onze gegevens, of zelfstandig naamwoord of 32 00:01:36,270 --> 00:01:39,080 werkwoord, verandert de manier waarop we deze gegevens gebruiken - 33 00:01:39,080 --> 00:01:41,730 als het woord wind of wind. 34 00:01:41,730 --> 00:01:44,100 Hoewel een computer niet de zorg over grammatica en delen 35 00:01:44,100 --> 00:01:47,750 van het Engels spreken, hetzelfde principe geldt. 36 00:01:47,750 --> 00:01:50,290 Dat is, kunnen we de interpretatie van de exacte 37 00:01:50,290 --> 00:01:53,140 Dezelfde gegevens opgeslagen in het geheugen door eenvoudig het gieten een 38 00:01:53,140 --> 00:01:54,576 ander type. 39 00:01:54,576 --> 00:01:57,250 Hier zijn de afmetingen van de meest voorkomende types op een 32-bit 40 00:01:57,250 --> 00:01:58,340 besturingssysteem. 41 00:01:58,340 --> 00:02:02,070 We hebben een char op 1 byte, int en float op 4 bytes, een lange 42 00:02:02,070 --> 00:02:04,390 lang en een dubbel op 8 bytes. 43 00:02:04,390 --> 00:02:07,670 Omdat een int neemt 4 bytes, zal het nemen 32 bits 44 00:02:07,670 --> 00:02:10,060 wanneer het wordt opgeslagen in geheugen als een binaire reeks 45 00:02:10,060 --> 00:02:11,500 van nullen en enen. 46 00:02:11,500 --> 00:02:14,020 Zolang onze variabele blijft als een type int, de 47 00:02:14,020 --> 00:02:16,740 computer zal altijd converteren die enen en nullen van 48 00:02:16,740 --> 00:02:19,120 binair naar het oorspronkelijke aantal. 49 00:02:19,120 --> 00:02:21,270 We konden echter theoretisch werpen die 32 50 00:02:21,270 --> 00:02:23,510 bits in een reeks Boolean types. 51 00:02:23,510 --> 00:02:26,090 En dan is de computer niet langer een nummer zien, maar 52 00:02:26,090 --> 00:02:28,810 in plaats daarvan een verzameling van nullen en enen. 53 00:02:28,810 --> 00:02:31,570 We kunnen ook proberen om die gegevens te lezen als een andere numerieke 54 00:02:31,570 --> 00:02:34,660 typen, of zelfs als een reeks van vier tekens. 55 00:02:34,660 --> 00:02:37,820 Bij het omgaan met getallen in gieten, moet je nadenken over hoe 56 00:02:37,820 --> 00:02:40,470 de precisie van uw waarde wordt beïnvloed. 57 00:02:40,470 --> 00:02:43,240 Houd in gedachten dat de precisie kan hetzelfde blijven, 58 00:02:43,240 --> 00:02:47,150 of je kunt verliezen precisie, maar je kunt nooit winnen precisie. 59 00:02:47,150 --> 00:02:49,060 Laten we gaan door voor de drie meest voorkomende manieren waarop u kunt 60 00:02:49,060 --> 00:02:50,400 verliezen precisie. 61 00:02:50,400 --> 00:02:53,060 Het gieten van een float naar een int zal leiden tot inkorting van alles 62 00:02:53,060 --> 00:02:54,900 na de komma, dus je bent vertrokken 63 00:02:54,900 --> 00:02:55,950 het gehele getal. 64 00:02:55,950 --> 00:03:02,000 Als we de vlotter x die gelijk zal zijn aan 3,7, kunnen we werpen 65 00:03:02,000 --> 00:03:05,580 deze variabele x naar een int door simpelweg te schrijven int in 66 00:03:05,580 --> 00:03:07,050 haakjes. 67 00:03:07,050 --> 00:03:10,010 Wanneer we deze term gebruiken hier, zullen we effectief 68 00:03:10,010 --> 00:03:12,810 worden met behulp van de waarde drie, want we hebben afgekapt 69 00:03:12,810 --> 00:03:14,880 alles na de komma. 70 00:03:14,880 --> 00:03:17,210 We kunnen ook converteren van een lange lange naar een int, die zal 71 00:03:17,210 --> 00:03:20,760 eveneens leiden tot een verlies van hoge orde bits. 72 00:03:20,760 --> 00:03:23,910 Een lange lange neemt 8 bytes, of 64 bits in het geheugen. 73 00:03:23,910 --> 00:03:27,050 Dus als we wierp het naar een int die slechts 4 bytes, of 32 74 00:03:27,050 --> 00:03:29,820 bits, zijn we in wezen afhakken alle bits die 75 00:03:29,820 --> 00:03:32,420 geven de binaire waarden hoger. 76 00:03:32,420 --> 00:03:34,690 Je zou ook kunnen werpen een tweepersoonsbed een vlotter, die geeft 77 00:03:34,690 --> 00:03:37,340 u zo dicht mogelijk vlotter naar de dubbele zonder 78 00:03:37,340 --> 00:03:39,100 noodzakelijkerwijs het afronden. 79 00:03:39,100 --> 00:03:41,840 Soortgelijke onze lange lang int conversie, het verlies in 80 00:03:41,840 --> 00:03:44,890 precisie omdat een dubbele meer gegevens bevat. 81 00:03:44,890 --> 00:03:47,910 Een dubbele zal u toelaten om 53 significante bits op te slaan, 82 00:03:47,910 --> 00:03:50,650 ongeveer 16 significante cijfers. 83 00:03:50,650 --> 00:03:53,050 Overwegende dat een vlotter kunt u alleen tot 24 op te slaan 84 00:03:53,050 --> 00:03:56,235 significante bits, ongeveer zeven significante cijfers. 85 00:03:56,235 --> 00:03:58,700 In de laatste twee gevallen kan het nuttig zijn om na te denken over 86 00:03:58,700 --> 00:04:01,200 typ gieten als de grootte van een foto. 87 00:04:01,200 --> 00:04:03,860 Als je van een groot formaat voor een klein formaat, kun je niet zien 88 00:04:03,860 --> 00:04:05,600 dingen zo duidelijk, omdat je verloren gegevens 89 00:04:05,600 --> 00:04:07,530 in de vorm van pixels. 90 00:04:07,530 --> 00:04:09,270 Type casting kan ook leiden tot problemen wanneer we 91 00:04:09,270 --> 00:04:11,050 gegoten ints naar praalwagens. 92 00:04:11,050 --> 00:04:13,920 Sinds drijft op een 32-bit machine alleen hebben 24 93 00:04:13,920 --> 00:04:16,959 significante bits, kunnen ze niet nauwkeurig waarden 94 00:04:16,959 --> 00:04:22,750 over 2 tot de macht 24 of 16777217. 95 00:04:22,750 --> 00:04:25,540 Laten we nu praten over expliciete en impliciete casting. 96 00:04:25,540 --> 00:04:28,000 Expliciete casting is wanneer we schrijven het type tussen haakjes 97 00:04:28,000 --> 00:04:29,430 voor een variabele naam. 98 00:04:29,430 --> 00:04:33,100 Als voorbeeld voor we schreven int haakjes voor onze 99 00:04:33,100 --> 00:04:35,640 drijven variabele x. 100 00:04:35,640 --> 00:04:37,200 Zo krijgen we int waarde, 101 00:04:37,200 --> 00:04:38,593 afgeknotte waarde van 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Impliciete casting is wanneer de compiler automatisch gewijzigd 104 00:04:42,970 --> 00:04:46,340 soortgelijke een super type, of voert een ander soort 105 00:04:46,340 --> 00:04:48,310 gieten zonder dat de gebruiker te schrijven 106 00:04:48,310 --> 00:04:49,720 extra code. 107 00:04:49,720 --> 00:04:53,550 Bijvoorbeeld, wanneer we 5 en 1,1 toe te voegen, onze waarden al 108 00:04:53,550 --> 00:04:55,680 types banden met hen hebben. 109 00:04:55,680 --> 00:04:59,480 De 5 is een int, terwijl 1,1 is een vlotter. 110 00:04:59,480 --> 00:05:02,390 Om toegevoegd, de computer werpt 5 een float, 111 00:05:02,390 --> 00:05:04,530 die zou zijn hetzelfde als het schrijven van 5.0 in de 112 00:05:04,530 --> 00:05:06,476 eerste plaats. 113 00:05:06,476 --> 00:05:13,210 Maar op deze manier zeggen we float 5, of 5,0, plus wat er al 114 00:05:13,210 --> 00:05:16,960 een float, 1,1, en van daaruit kunnen we daadwerkelijk toe te voegen deze 115 00:05:16,960 --> 00:05:18,640 waarden en de waarde 6.1. 116 00:05:21,170 --> 00:05:23,500 Impliciete casting laat ons ook toe te wijzen variabelen van 117 00:05:23,500 --> 00:05:25,590 verschillende types elkaar. 118 00:05:25,590 --> 00:05:28,110 We kunnen een minder precieze aard altijd toe te wijzen tot een meer 119 00:05:28,110 --> 00:05:29,250 precies een. 120 00:05:29,250 --> 00:05:37,060 Bijvoorbeeld, als we een dubbele x en y een int - 121 00:05:37,060 --> 00:05:40,120 en deze kunnen geen waarden die we hen - 122 00:05:40,120 --> 00:05:43,560 kunnen we zeggen x gelijk is aan y. 123 00:05:43,560 --> 00:05:46,340 Omdat de dubbele meer precisie dan een int, dus we 124 00:05:46,340 --> 00:05:48,380 verliest geen informatie. 125 00:05:48,380 --> 00:05:50,420 Anderzijds zou het niet noodzakelijk juist te zeggen 126 00:05:50,420 --> 00:05:54,060 y gelijk x, omdat de dubbele zou een grotere waarde dan 127 00:05:54,060 --> 00:05:55,220 de integer. 128 00:05:55,220 --> 00:05:57,420 En zo integer mogelijk niet alle houden 129 00:05:57,420 --> 00:05:59,560 opgeslagen in de dubbele. 130 00:05:59,560 --> 00:06:02,610 Impliciete casting wordt ook gebruikt in vergelijking operators zoals 131 00:06:02,610 --> 00:06:06,410 groter dan, kleiner dan of gelijkheid operator. 132 00:06:06,410 --> 00:06:13,050 Zo kunnen we zeggen of 5,1 groter is dan 5, en krijgen we de 133 00:06:13,050 --> 00:06:14,750 leiden waar. 134 00:06:14,750 --> 00:06:18,470 Omdat 5 is een int, maar het zal worden uitgebracht op een vlotter om 135 00:06:18,470 --> 00:06:22,090 worden vergeleken met de vlotter 5,1, zouden we zeggen 5.1 is 136 00:06:22,090 --> 00:06:24,550 groter dan 5,0. 137 00:06:24,550 --> 00:06:31,320 Hetzelfde geldt voor te zeggen als 2,0 is gelijk aan gelijk is aan 2. 138 00:06:31,320 --> 00:06:34,190 We hadden ook waar, want de computer zal werpen de 139 00:06:34,190 --> 00:06:39,750 gehele getal 2 om vervolgens drijven en zeggen 2,0 is gelijk aan gelijk is aan 2,0, 140 00:06:39,750 --> 00:06:41,660 dit geldt. 141 00:06:41,660 --> 00:06:44,180 Vergeet niet dat wij ook kunnen uitbrengen tussen ints en tekens, 142 00:06:44,180 --> 00:06:46,350 of ASCII-waarden. 143 00:06:46,350 --> 00:06:49,690 Chars moeten ook worden teruggebracht tot binair, dat is waarom je 144 00:06:49,690 --> 00:06:51,920 kan eenvoudig converteren tussen tekens en hun respectieve 145 00:06:51,920 --> 00:06:53,260 ASCII-waarden. 146 00:06:53,260 --> 00:06:56,180 Voor meer informatie over deze, kijk op onze video-on-ASCII. 147 00:06:56,180 --> 00:06:58,080 Wanneer u even de tijd om na te denken over de manier waarop gegevens zijn opgeslagen, 148 00:06:58,080 --> 00:06:59,990 het begint te maken veel zin. 149 00:06:59,990 --> 00:07:02,790 Het is net als het verschil tussen de wind en wind. 150 00:07:02,790 --> 00:07:05,490 De gegevens zijn hetzelfde, maar het type kan veranderen hoe we 151 00:07:05,490 --> 00:07:06,720 interpreteren. 152 00:07:06,720 --> 00:07:10,430 Mijn naam is Jordan Jozwiak, deze CS50.