1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] Jordanija JÓŹWIAK: Tipas liejimas, paprasčiausias prasme, yra 2 00:00:10,270 --> 00:00:13,300 būdas pakeisti kompiuterio aiškinimą kai kurių duomenų 3 00:00:13,300 --> 00:00:16,560 numanomai arba aiškiai keičia savo duomenų tipą. 4 00:00:16,560 --> 00:00:19,940 Tokie kaip keičiasi int float arba atvirkščiai. 5 00:00:19,940 --> 00:00:21,550 Norėdami suprasti tipo liejimo, mes turime 6 00:00:21,550 --> 00:00:22,680 pradėti nuo pagrindinių dalykų - 7 00:00:22,680 --> 00:00:24,140 duomenų tipai. 8 00:00:24,140 --> 00:00:26,960 Kompiuterinių kalbų, kaip C, visi kintamieji turi tam tikros rūšies 9 00:00:26,960 --> 00:00:29,690 duomenų tipą, kuris nustato, kaip kompiuteris, ir taip pat 10 00:00:29,690 --> 00:00:32,140 vartotojas, aiškina, kad kintamasis. 11 00:00:32,140 --> 00:00:35,160 Skaitiniai duomenų tipų, pavyzdžiui, int, long long, plūdės ir 12 00:00:35,160 --> 00:00:38,110 dviviečiai, visi turi savo unikalių savybių ir 13 00:00:38,110 --> 00:00:41,370 naudojamas apibrėžti vertybes įvairaus intervalus ir tikslumą. 14 00:00:41,370 --> 00:00:44,800 Tipas liejimo leidžia mums priimti zmiennoprzecinkową kaip 15 00:00:44,800 --> 00:00:49,170 3,14 ir gauti dalį prieš dešimtainės 3 šiuo atveju, 16 00:00:49,170 --> 00:00:51,590 liejimo jį į int. 17 00:00:51,590 --> 00:00:53,900 Paimkime pavyzdį iš anglų kalbos trumpas 18 00:00:53,900 --> 00:00:56,910 peržiūrėti rūšių ir pamatyti, kaip galite pakeisti tipas liejimas 19 00:00:56,910 --> 00:00:59,380 kaip mes interpretuoti duomenų lapą. 20 00:00:59,380 --> 00:01:05,269 Duomenų, tegul simbolius. 21 00:01:05,269 --> 00:01:07,570 Aš tiesiog kreiptis į šių kruopščiai sukonfigūruotus linijų 22 00:01:07,570 --> 00:01:10,100 simboliai, bet ką nors, kas žino anglų kalbą, 23 00:01:10,100 --> 00:01:12,750 jūs iš karto pripažinti, kad jie yra iš tikrųjų, laiškai. 24 00:01:12,750 --> 00:01:15,580 Jūs netiesiogiai suprato duomenų tipą. 25 00:01:15,580 --> 00:01:17,620 Žiūri šį raidžių, mes galime pamatyti dvi 26 00:01:17,620 --> 00:01:20,140 skirtingų žodžių, kurių kiekvienas turi savo prasmę. 27 00:01:20,140 --> 00:01:25,530 Yra daiktavardžio, vėjo, kaip pučia vėjas ne. 28 00:01:25,530 --> 00:01:28,280 Ir yra veiksmažodis, vėjo, kaip man reikia 29 00:01:28,280 --> 00:01:31,410 baigiantis mano analoginį laikrodį. 30 00:01:31,410 --> 00:01:33,420 Tai yra įdomus pavyzdys, nes mes galime pamatyti 31 00:01:33,420 --> 00:01:36,270 kaip tipo, kad mes priskirti mūsų duomenimis, ar daiktavardis ar 32 00:01:36,270 --> 00:01:39,080 veiksmažodis, kaip mes ją naudojame, kad duomenys - 33 00:01:39,080 --> 00:01:41,730 žodžio vėjo ar vėjo. 34 00:01:41,730 --> 00:01:44,100 Nors kompiuteris nerūpi gramatikos ir jų dalių 35 00:01:44,100 --> 00:01:47,750 anglų kalbos, tas pats pagrindinis principas. 36 00:01:47,750 --> 00:01:50,290 Tai reiškia, kad mes galime pakeisti tiksliai reikia aiškinti 37 00:01:50,290 --> 00:01:53,140 tie patys duomenys saugomi atmintyje, tiesiog liejimo jį į 38 00:01:53,140 --> 00:01:54,576 skirtingo tipo. 39 00:01:54,576 --> 00:01:57,250 Čia yra labiausiai paplitusių rūšių dydžiai nuo 32-bitų 40 00:01:57,250 --> 00:01:58,340 operacinę sistemą. 41 00:01:58,340 --> 00:02:02,070 Mes turime char 1 baitą, int ir float, esant 4 baitų, ilgą 42 00:02:02,070 --> 00:02:04,390 ilgio ir 8 baitų dvigubai. 43 00:02:04,390 --> 00:02:07,670 Kadangi int užima 4 baitų, tai užims 32 bitų 44 00:02:07,670 --> 00:02:10,060 , kai ji saugoma atmintyje kaip dvejetainis serijos 45 00:02:10,060 --> 00:02:11,500 nulių ir. 46 00:02:11,500 --> 00:02:14,020 Kaip ilgai, kaip mūsų kintamojo išlieka tipo int, 47 00:02:14,020 --> 00:02:16,740 kompiuteris visada konvertuoti tuos ir nulių iš 48 00:02:16,740 --> 00:02:19,120 dvejetainis į pradinio skaičiaus. 49 00:02:19,120 --> 00:02:21,270 Tačiau mes teoriškai galėtų atiduoti tiems 32 50 00:02:21,270 --> 00:02:23,510 bitai į Būlio tipų serijos. 51 00:02:23,510 --> 00:02:26,090 Tada kompiuteris nebebus pamatyti skaičių, bet 52 00:02:26,090 --> 00:02:28,810 vietoj nulių ir kolekcija. 53 00:02:28,810 --> 00:02:31,570 Mes taip pat galėtų pabandyti skaityti, kad skiriasi skaitmeninė duomenis 54 00:02:31,570 --> 00:02:34,660 tipo, ar net keturių simbolių eilutė. 55 00:02:34,660 --> 00:02:37,820 Kai sprendžiami su numeriais liejimo, turite apsvarstyti, kaip 56 00:02:37,820 --> 00:02:40,470 savo vertės tikslumas bus paveikta. 57 00:02:40,470 --> 00:02:43,240 Turėkite omenyje, kad tikslumas gali likti tas pats, 58 00:02:43,240 --> 00:02:47,150 ar jums gali prarasti tikslumą, bet jūs niekada negali gauti tikslumą. 59 00:02:47,150 --> 00:02:49,060 Eikime per trijų labiausiai paplitusių būdų, kad galite 60 00:02:49,060 --> 00:02:50,400 praras tikslumą. 61 00:02:50,400 --> 00:02:53,060 Liejimo plūdę int sukelti pažemintos viską 62 00:02:53,060 --> 00:02:54,900 po kablelio, todėl jūs kairėje 63 00:02:54,900 --> 00:02:55,950 sveiko skaičiaus. 64 00:02:55,950 --> 00:03:02,000 Jeigu mes priimsime float x, kuris bus lygus 3,7, mes galime mesti 65 00:03:02,000 --> 00:03:05,580 Šis kintamasis x iki int tiesiog raštu int 66 00:03:05,580 --> 00:03:07,050 skliausteliuose. 67 00:03:07,050 --> 00:03:10,010 Kai mes naudojame šis terminas čia, mes efektyviai 68 00:03:10,010 --> 00:03:12,810 vertę trys, nes mes sutrumpintas 69 00:03:12,810 --> 00:03:14,880 viskas po kablelio. 70 00:03:14,880 --> 00:03:17,210 Mes taip pat gali konvertuoti ilgai ilgai int, kuris bus 71 00:03:17,210 --> 00:03:20,760 panašiai sukelti aukšto tvarkos bitų nuostolių. 72 00:03:20,760 --> 00:03:23,910 Ilgai ilgai trunka iki 8 baitų, arba 64 bitai atmintyje. 73 00:03:23,910 --> 00:03:27,050 Taigi, kai mes mesti jį į int, kuri turi tik 4 baitai arba 32 74 00:03:27,050 --> 00:03:29,820 bitai, mes iš esmės nupjovė visus bitus, kad 75 00:03:29,820 --> 00:03:32,420 atstovauja aukštojo dvejetainius vertę. 76 00:03:32,420 --> 00:03:34,690 Jūs taip pat galėtų mesti dvigubai pinigų srautą, kuris suteiks 77 00:03:34,690 --> 00:03:37,340 jums artimiausiems plūdė Bėgte be 78 00:03:37,340 --> 00:03:39,100 nebūtinai tai apvalinimo. 79 00:03:39,100 --> 00:03:41,840 Panašus į mūsų ilgai ilgai int konvertavimo nuostolis 80 00:03:41,840 --> 00:03:44,890 tikslumas yra dėl to, kad yra dvigubai daugiau duomenų. 81 00:03:44,890 --> 00:03:47,910 Dvigubai leis jums laikyti 53 reikšmingas bitai, 82 00:03:47,910 --> 00:03:50,650 maždaug 16 reikšminių skaitmenų. 83 00:03:50,650 --> 00:03:53,050 , Kadangi plūdė tik leidžia jums išsaugoti 24 84 00:03:53,050 --> 00:03:56,235 reikšmingi bitai, maždaug septyni reikšminių skaitmenų. 85 00:03:56,235 --> 00:03:58,700 Šiais paskutiniais dviem atvejais, ji gali būti naudinga galvoti apie 86 00:03:58,700 --> 00:04:01,200 įveskite liejimo kaip dydžio keitimas, foto. 87 00:04:01,200 --> 00:04:03,860 Kai jūs einate iš didelio dydžio mažo dydžio, jūs negalite pamatyti 88 00:04:03,860 --> 00:04:05,600 dalykų, kaip aiškiai, nes jūs praradote duomenis 89 00:04:05,600 --> 00:04:07,530 pikselių. 90 00:04:07,530 --> 00:04:09,270 Tipas liejimo taip pat gali sukelti problemų, kai mes 91 00:04:09,270 --> 00:04:11,050 mesti Ints plūdės. 92 00:04:11,050 --> 00:04:13,920 Nuo plūdės ant 32-bit mašina tik 24 93 00:04:13,920 --> 00:04:16,959 reikšmingi bitai, jie negali tiksliai atspindi vertybes 94 00:04:16,959 --> 00:04:22,750 24, arba 16.777.217 galia 2 daugiau. 95 00:04:22,750 --> 00:04:25,540 Dabar pakalbėkime apie eksplicitiškai ir implicitiškai liejimo. 96 00:04:25,540 --> 00:04:28,000 Aiškiai liejimas yra, kai mes rašome tipo skliausteliuose 97 00:04:28,000 --> 00:04:29,430 prieš kintamojo vardą. 98 00:04:29,430 --> 00:04:33,100 Kaip, pavyzdžiui, prieš rašėme int skliausteliuose prieš mūsų 99 00:04:33,100 --> 00:04:35,640 plaukti kintamasis X. 100 00:04:35,640 --> 00:04:37,200 Tokiu būdu mes gauname int vertę, 101 00:04:37,200 --> 00:04:38,593 sutrumpintas vertė 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Implicit liejimas yra kai kompiliatorius automatiškai pakeičia 104 00:04:42,970 --> 00:04:46,340 panašių rūšių super tipo, arba atlieka tam tikrą kitos rūšies 105 00:04:46,340 --> 00:04:48,310 liejimo, nereikalaujant, kad vartotojas galėtų rašyti 106 00:04:48,310 --> 00:04:49,720 bet koks papildomas kodas. 107 00:04:49,720 --> 00:04:53,550 Pavyzdžiui, kai mes įtraukiame 5 ir 1,1 m. Mūsų vertybės jau turi 108 00:04:53,550 --> 00:04:55,680 rūšių su jais. 109 00:04:55,680 --> 00:04:59,480 5 yra int, o 1.1 plūdės. 110 00:04:59,480 --> 00:05:02,390 , Siekiant įtraukti juos, kompiuteris verčia į plūdės 5 111 00:05:02,390 --> 00:05:04,530 , kuris būtų buvę tas pats, kaip 5,0 raštu 112 00:05:04,530 --> 00:05:06,476 pirmąją vietą. 113 00:05:06,476 --> 00:05:13,210 Tačiau tai, kaip mes sakome, plūdę 5, arba 5,0, plius tai, ką jau buvo 114 00:05:13,210 --> 00:05:16,960 plūdės, 1,1, ir iš ten mes iš tikrųjų galite pridėti juos 115 00:05:16,960 --> 00:05:18,640 vertybės ir gauti vertę 6,1. 116 00:05:21,170 --> 00:05:23,500 Implicit liejimo taip pat leidžia mums priskirti kintamieji 117 00:05:23,500 --> 00:05:25,590 įvairių tipų viena kitai. 118 00:05:25,590 --> 00:05:28,110 Mes visada galime priskirti tipo į daugiau mažiau tiksliai 119 00:05:28,110 --> 00:05:29,250 tiksli vienas. 120 00:05:29,250 --> 00:05:37,060 Pavyzdžiui, jei mes turime Dvivietis x ir int y - 121 00:05:37,060 --> 00:05:40,120 kurie gali turėti visus parametrus, mes juos 122 00:05:40,120 --> 00:05:43,560 mes galime pasakyti, X reiškia y. 123 00:05:43,560 --> 00:05:46,340 Nes dvigubas tiksliau, nei int, todėl mes 124 00:05:46,340 --> 00:05:48,380 nebus prarasti bet kokią informaciją. 125 00:05:48,380 --> 00:05:50,420 Kita vertus, tai nebūtinai teisinga sakyti, 126 00:05:50,420 --> 00:05:54,060 y lygus x, nes dvigubas gali turėti didesnę vertę nei 127 00:05:54,060 --> 00:05:55,220 sveikasis skaičius. 128 00:05:55,220 --> 00:05:57,420 Ir todėl sveikasis skaičius gali būti neįmanoma laikyti visas 129 00:05:57,420 --> 00:05:59,560 Bėgte saugoma informacija. 130 00:05:59,560 --> 00:06:02,610 Implicit liejimo palyginimo operatoriai taip pat naudojamas kaip 131 00:06:02,610 --> 00:06:06,410 didesnis nei mažesnis arba lygybė operatorius. 132 00:06:06,410 --> 00:06:13,050 Tokiu būdu mes galime pasakyti, jei 5,1 yra didesnis nei 5, ir mes 133 00:06:13,050 --> 00:06:14,750 sukelti tiesa. 134 00:06:14,750 --> 00:06:18,470 , Nes 5 yra int, bet jis bus įmestas į pinigų srautą, kad būtų 135 00:06:18,470 --> 00:06:22,090 , palyginti su 5,1 plūdės, mes norime pasakyti 5,1 yra 136 00:06:22,090 --> 00:06:24,550 didesnis nei 5,0. 137 00:06:24,550 --> 00:06:31,320 Tas pats pasakytina ir pasakyti, jei 2,0 lygu lygu 2. 138 00:06:31,320 --> 00:06:34,190 Mes taip pat gauti tiesa, nes kompiuteris bus balsuoti 139 00:06:34,190 --> 00:06:39,750 sveikasis skaičius 2 plaukti ir tada pasakyti, 2,0 lygu lygu 2,0, 140 00:06:39,750 --> 00:06:41,660 tai yra tiesa. 141 00:06:41,660 --> 00:06:44,180 Nepamirškite, kad mes taip pat galime mesti tarp int ir simbolių, 142 00:06:44,180 --> 00:06:46,350 arba ASCII vertės. 143 00:06:46,350 --> 00:06:49,690 Simbolių taip pat reikia sumažinti į dvejetainį, kuris yra, kodėl jums 144 00:06:49,690 --> 00:06:51,920 gali lengvai konvertuoti tarp simbolių ir jų atitinkamų 145 00:06:51,920 --> 00:06:53,260 ASCII vertės. 146 00:06:53,260 --> 00:06:56,180 Norėdami daugiau sužinoti apie tai, patikrinkite mūsų vaizdo ASCII. 147 00:06:56,180 --> 00:06:58,080 Kai jūs šiek tiek laiko ir galvoti apie tai, kaip duomenys saugomas, 148 00:06:58,080 --> 00:06:59,990 ji pradeda daug prasmės. 149 00:06:59,990 --> 00:07:02,790 Tai kaip skirtumą tarp vėjo ir vėjo. 150 00:07:02,790 --> 00:07:05,490 Duomenys yra tas pats, bet tipo gali pakeisti, kaip mes 151 00:07:05,490 --> 00:07:06,720 jį išaiškinti. 152 00:07:06,720 --> 00:07:10,430 Mano vardas yra Jordanija Jóźwiak, tai CS50.