1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] Jordaania Jóźwiak: Tüüp valu, kõige lihtsamal mõttes on 2 00:00:10,270 --> 00:00:13,300 kuidas muuta arvuti tõlgendab mõningaid andmeid 3 00:00:13,300 --> 00:00:16,560 kaudselt või otseselt muutmata selle andmetüübi. 4 00:00:16,560 --> 00:00:19,940 Näiteks vahetada int et ujuk, või vastupidi. 5 00:00:19,940 --> 00:00:21,550 Et mõista tüüpi valu, peame 6 00:00:21,550 --> 00:00:22,680 alustada põhitõed - 7 00:00:22,680 --> 00:00:24,140 andmetüübid ise. 8 00:00:24,140 --> 00:00:26,960 Kui arvuti keeltes nagu C, kõik muutujad on mingisugune 9 00:00:26,960 --> 00:00:29,690 Andmete tüüp, mis määrab arvuti, ja samuti 10 00:00:29,690 --> 00:00:32,140 kasutaja, tõlgendab, et muutuja. 11 00:00:32,140 --> 00:00:35,160 Arvuline andmetüüpe nagu int, long pikk, Ujuki ja 12 00:00:35,160 --> 00:00:38,110 topelt, kõigil on oma ainulaadsed omadused ning on 13 00:00:38,110 --> 00:00:41,370 saab määrata väärtused erinevad vahemikud ja täpsust. 14 00:00:41,370 --> 00:00:44,800 Tüüp casting võimaldab meil võtta murdarv nagu 15 00:00:44,800 --> 00:00:49,170 3.14 ja saada osa enne koma, 3 sel juhul, 16 00:00:49,170 --> 00:00:51,590 valamise see int. 17 00:00:51,590 --> 00:00:53,900 Võtame näiteks inglise keel lühikeseks 18 00:00:53,900 --> 00:00:56,910 vaadata tüüpe, ja näha, kuidas tüüpi valu võib muutuda 19 00:00:56,910 --> 00:00:59,380 kuidas me tõlgendame tükk andmed. 20 00:00:59,380 --> 00:01:05,269 Andmete, võtame sümbolid siin. 21 00:01:05,269 --> 00:01:07,570 Ma lihtsalt nimetame neid hoolikalt seadistatud read 22 00:01:07,570 --> 00:01:10,100 sümboleid, kuid kui keegi, kes teab inglise keeles, 23 00:01:10,100 --> 00:01:12,750 sa kohe aru, et nad on tegelikult tähed. 24 00:01:12,750 --> 00:01:15,580 Sa kaudselt mõista andmetüüp. 25 00:01:15,580 --> 00:01:17,620 Vaadates seda tähtede saame näha kahte 26 00:01:17,620 --> 00:01:20,140 erinevad sõnad, millest igaühel on oma tähendus. 27 00:01:20,140 --> 00:01:25,530 Seal on nimisõna, tuul, kui tuul puhub väljas. 28 00:01:25,530 --> 00:01:28,280 Ja seal on tegusõna, tuul, kui mul on vaja 29 00:01:28,280 --> 00:01:31,410 tuul minu analoog kella. 30 00:01:31,410 --> 00:01:33,420 See on huvitav näide, sest me ei näe 31 00:01:33,420 --> 00:01:36,270 kuidas tüüp, et anname oma andmed, kas nimisõna või 32 00:01:36,270 --> 00:01:39,080 verb, muutused kuidas me kasutame, et andmed - 33 00:01:39,080 --> 00:01:41,730 kui sõna tuul või tuule eest. 34 00:01:41,730 --> 00:01:44,100 Kuigi arvuti ei hooli grammatika ja osad 35 00:01:44,100 --> 00:01:47,750 inglise kõnes, sama põhimõte kehtib. 36 00:01:47,750 --> 00:01:50,290 See tähendab, et saame muuta tõlgendamise täpset 37 00:01:50,290 --> 00:01:53,140 samu andmeid salvestatakse mällu lihtsalt casting seda 38 00:01:53,140 --> 00:01:54,576 erinevat tüüpi. 39 00:01:54,576 --> 00:01:57,250 Siin on suurused kõige levinumat 32-bit 40 00:01:57,250 --> 00:01:58,340 operatsioonisüsteemi. 41 00:01:58,340 --> 00:02:02,070 Meil on char on 1 bait, int ja Ujuki 4 baiti, pikk 42 00:02:02,070 --> 00:02:04,390 pikk ja topelt kell 8 baiti. 43 00:02:04,390 --> 00:02:07,670 Kuna int kulub 4 baiti, see võtab kuni 32 bitti 44 00:02:07,670 --> 00:02:10,060 kui see on salvestatud mällu binaarne seeria 45 00:02:10,060 --> 00:02:11,500 nulle ja ühtesid. 46 00:02:11,500 --> 00:02:14,020 Niikaua kui meie muutuja jääb tüübist int, 47 00:02:14,020 --> 00:02:16,740 arvuti on alati teisendada need ühtesid ja nulle alates 48 00:02:16,740 --> 00:02:19,120 kahekomponentsete võtta esialgset arvu. 49 00:02:19,120 --> 00:02:21,270 Kuid me võiks teoreetiliselt koo need 32 50 00:02:21,270 --> 00:02:23,510 bitti arvesse mitmeid Boole'i ​​tüüpi. 51 00:02:23,510 --> 00:02:26,090 Ja siis arvuti ei ole enam näha mitmeid, kuid 52 00:02:26,090 --> 00:02:28,810 asemel kogumise nulle ja ühtesid. 53 00:02:28,810 --> 00:02:31,570 Võiksime proovida ka lugenud, et andmeid erinevate numbrilist 54 00:02:31,570 --> 00:02:34,660 kirjuta, või isegi kui string nelja märgiga. 55 00:02:34,660 --> 00:02:37,820 Suheldes numbrid valu, siis peab kaaluma, kuidas 56 00:02:37,820 --> 00:02:40,470 täpsust oma väärtust mõjutab. 57 00:02:40,470 --> 00:02:43,240 Pea meeles, et täpsus võib jääda samaks, 58 00:02:43,240 --> 00:02:47,150 või võid kaotada täpsusega, kuid te ei saa kunagi võita täpsusega. 59 00:02:47,150 --> 00:02:49,060 Lähme läbi kolme kõige levinumaid viise, et saate 60 00:02:49,060 --> 00:02:50,400 kaotada täpsusega. 61 00:02:50,400 --> 00:02:53,060 Casting ujuk int paneb kärpimise kõik 62 00:02:53,060 --> 00:02:54,900 pärast koma, nii sa jätta 63 00:02:54,900 --> 00:02:55,950 koos täisarvuni. 64 00:02:55,950 --> 00:03:02,000 Kui me võtame float x, mis võrdub 3,7, saame heita 65 00:03:02,000 --> 00:03:05,580 See muutuja x int lihtsalt kirjalikult int sisse 66 00:03:05,580 --> 00:03:07,050 sulgudes. 67 00:03:07,050 --> 00:03:10,010 Iga kord, kui me kasutame seda mõistet siin, paneme tõhusalt 68 00:03:10,010 --> 00:03:12,810 kasuta väärtus kolme, sest me oleme kärbitud 69 00:03:12,810 --> 00:03:14,880 kõik pärast koma. 70 00:03:14,880 --> 00:03:17,210 Meil saab ka konverteerida pikk pikk int, kes edastab 71 00:03:17,210 --> 00:03:20,760 sarnaselt põhjustada kaotus kõrge et bitti. 72 00:03:20,760 --> 00:03:23,910 Pikka kulub 8 baiti ehk 64 bitti mälu. 73 00:03:23,910 --> 00:03:27,050 Nii et kui me valatud see int mis on ainult 4 baiti, või 32 74 00:03:27,050 --> 00:03:29,820 bitti, me sisuliselt peenestamist off kõik bitid, et 75 00:03:29,820 --> 00:03:32,420 esindab kõrgemat binaarsed väärtused. 76 00:03:32,420 --> 00:03:34,690 Sa võid ka koo kahekordse et ujuk, mis annab 77 00:03:34,690 --> 00:03:37,340 sa lähim võimalik käibevahendeid kahekordse ilma 78 00:03:37,340 --> 00:03:39,100 tingimata ümardamise ta. 79 00:03:39,100 --> 00:03:41,840 Sarnaselt meie pikka int tulemus, kahju 80 00:03:41,840 --> 00:03:44,890 täpsus, sest topelt sisaldab rohkem andmeid. 81 00:03:44,890 --> 00:03:47,910 Topelt võimaldab salvestada 53 olulise bitti, 82 00:03:47,910 --> 00:03:50,650 umbes 16 tüvenumbrini. 83 00:03:50,650 --> 00:03:53,050 Arvestades float ainult võimaldab salvestada 24 84 00:03:53,050 --> 00:03:56,235 märkimisväärne bitti, umbes 7 tüvenumbrini. 85 00:03:56,235 --> 00:03:58,700 Nende kahe viimase puhul võib see olla kasulik mõelda 86 00:03:58,700 --> 00:04:01,200 tüüpi valu nagu saneerimist foto. 87 00:04:01,200 --> 00:04:03,860 Kui te lähete alates suur suurus väiksusest, sa ei näe 88 00:04:03,860 --> 00:04:05,600 asju nii selgelt, sest sa kaotasid andmed 89 00:04:05,600 --> 00:04:07,530 kujul pikslit. 90 00:04:07,530 --> 00:04:09,270 Tüüp valu võib põhjustada ka probleeme, kui me 91 00:04:09,270 --> 00:04:11,050 valatud ints et ujukid. 92 00:04:11,050 --> 00:04:13,920 Kuna ujukid 32-bit masin on ainult 24 93 00:04:13,920 --> 00:04:16,959 märkimisväärne bitti, nad ei saa täpselt väärtused 94 00:04:16,959 --> 00:04:22,750 üle 2 astmes 24, või 16777217. 95 00:04:22,750 --> 00:04:25,540 Nüüd räägime otsesed ja kaudsed valu. 96 00:04:25,540 --> 00:04:28,000 Selgesõnaline valu on siis, kui me kirjutame tüüp sulgudes 97 00:04:28,000 --> 00:04:29,430 enne muutuja nimi. 98 00:04:29,430 --> 00:04:33,100 Näiteks enne kui me kirjutas int sulgudes enne meie 99 00:04:33,100 --> 00:04:35,640 float muutuja x. 100 00:04:35,640 --> 00:04:37,200 Sel moel saame int väärtus, 101 00:04:37,200 --> 00:04:38,593 kärbitud väärtus 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Kaudsed valu on siis, kui kompilaator automaatselt 104 00:04:42,970 --> 00:04:46,340 samaliigilisest et super tüüp, või täidab mõnda muud liiki 105 00:04:46,340 --> 00:04:48,310 casting nõudmata kasutajal kirjutada 106 00:04:48,310 --> 00:04:49,720 täiendavat koodi. 107 00:04:49,720 --> 00:04:53,550 Näiteks kui lisame 5 ja 1.1, meie väärtused juba 108 00:04:53,550 --> 00:04:55,680 tüübid nendega. 109 00:04:55,680 --> 00:04:59,480 5 on int, samas 1.1 on sularahaga. 110 00:04:59,480 --> 00:05:02,390 Selleks, et lisada need, arvuti heidab 5 arvesse float, 111 00:05:02,390 --> 00:05:04,530 mis oleks olnud sama asi, kui kirjalikult 5.0 112 00:05:04,530 --> 00:05:06,476 esiteks. 113 00:05:06,476 --> 00:05:13,210 Aga niimoodi me ütleme float 5 või 5.0, pluss mis oli juba 114 00:05:13,210 --> 00:05:16,960 float, 1.1, ja sealt saame tegelikult lisada need 115 00:05:16,960 --> 00:05:18,640 väärtused ja saada väärtus 6.1. 116 00:05:21,170 --> 00:05:23,500 Kaudsed valu ka võimaldab meil määrata muutujate 117 00:05:23,500 --> 00:05:25,590 erinevat tüüpi omavahel. 118 00:05:25,590 --> 00:05:28,110 Me ei saa alati anda vähem täpseid tipite rohkem 119 00:05:28,110 --> 00:05:29,250 täpne üks. 120 00:05:29,250 --> 00:05:37,060 Näiteks, kui meil on double x, ja int y - 121 00:05:37,060 --> 00:05:40,120 ja need võivad olla mistahes väärtused, mida me lasta neil - 122 00:05:40,120 --> 00:05:43,560 võib öelda, x võrdub y. 123 00:05:43,560 --> 00:05:46,340 Kuna topelt on rohkem täpsust kui keskmine, nii et me 124 00:05:46,340 --> 00:05:48,380 ei kaota teavet. 125 00:05:48,380 --> 00:05:50,420 Teiselt poolt, see ei pruugi olla õige öelda 126 00:05:50,420 --> 00:05:54,060 y võrdub x, sest kahekordse võib olla suurem väärtus kui 127 00:05:54,060 --> 00:05:55,220 täisarv. 128 00:05:55,220 --> 00:05:57,420 Ja nii täisarv ei pruugi olla võimalik, et hoida kõiki 129 00:05:57,420 --> 00:05:59,560 salvestatud informatsiooni topelt. 130 00:05:59,560 --> 00:06:02,610 Kaudsed casting kasutatakse ka võrdlus ettevõtjad, nagu 131 00:06:02,610 --> 00:06:06,410 suurem, väiksem või võrdõiguslikkuse operaator. 132 00:06:06,410 --> 00:06:13,050 Nii saame öelda, kas 5.1 on suurem kui 5, ja me saame 133 00:06:13,050 --> 00:06:14,750 põhjustada tõsi. 134 00:06:14,750 --> 00:06:18,470 Kuna 5 on keskmine, kuid see saab olema enamus float, et 135 00:06:18,470 --> 00:06:22,090 võrrelda ujuki 5.1, me ütleks, et 5.1 on 136 00:06:22,090 --> 00:06:24,550 suurem kui 5,0. 137 00:06:24,550 --> 00:06:31,320 Sama kehtib ütlus kui 2,0 võrdub võrdub 2. 138 00:06:31,320 --> 00:06:34,190 Soovime saada ka tõsi, sest arvuti on valatud 139 00:06:34,190 --> 00:06:39,750 täisarv 2 kuni hõljub ja siis öelda 2,0 võrdub võrdub 2.0, 140 00:06:39,750 --> 00:06:41,660 see on tõsi. 141 00:06:41,660 --> 00:06:44,180 Ära unusta, et me saame ka valatud vahel ints ja tähed, 142 00:06:44,180 --> 00:06:46,350 või ASCII väärtused. 143 00:06:46,350 --> 00:06:49,690 Sümbolite Samuti tuleb vähendada binaarne, mis on, miks sa 144 00:06:49,690 --> 00:06:51,920 saab kergesti konverteerida vahel sümboleid ja nende 145 00:06:51,920 --> 00:06:53,260 ASCII väärtused. 146 00:06:53,260 --> 00:06:56,180 Et rohkem teada saada selle, vaadake meie video ASCII. 147 00:06:56,180 --> 00:06:58,080 Kui te võtate praegu mõtlema, kuidas andmed on salvestatud, 148 00:06:58,080 --> 00:06:59,990 see hakkab tegema palju mõistust. 149 00:06:59,990 --> 00:07:02,790 See on nagu vahe tuul ja tuul. 150 00:07:02,790 --> 00:07:05,490 Andmed on samad, kuid liik on võimalik muuta, kuidas me 151 00:07:05,490 --> 00:07:06,720 tõlgendada. 152 00:07:06,720 --> 00:07:10,430 Minu nimi on Jordaania Jóźwiak, see cs50.