1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN JOZWIAK: тып ліцця, у найпростым сэнсе, 2 00:00:10,270 --> 00:00:13,300 спосаб змяніць інтэрпрэтацыю кампутары некаторыя дадзеныя 3 00:00:13,300 --> 00:00:16,560 відавочна або няяўна змена яго тыпу дадзеных. 4 00:00:16,560 --> 00:00:19,940 Такія, як змяненне унутр з паплаўком, ці наадварот. 5 00:00:19,940 --> 00:00:21,550 Каб зразумець, прывядзенне тыпаў, мы павінны 6 00:00:21,550 --> 00:00:22,680 Пачнем з асновы - 7 00:00:22,680 --> 00:00:24,140 Дадзеныя тыпы саміх сябе. 8 00:00:24,140 --> 00:00:26,960 У кампутарных моў, такіх як C, усе зменныя маюць нейкі 9 00:00:26,960 --> 00:00:29,690 ад тыпу дадзеных, які вызначае, як кампутар, а таксама 10 00:00:29,690 --> 00:00:32,140 Карыстальнік, інтэрпрэтуе гэтую зменную. 11 00:00:32,140 --> 00:00:35,160 Лікавыя тыпы дадзеных, такія як INT, доўга-доўга, плаваць і 12 00:00:35,160 --> 00:00:38,110 падвойныя, усе яны маюць свае ўласныя унікальныя характарыстыкі і 13 00:00:38,110 --> 00:00:41,370 выкарыстоўваюцца для вызначэння значэнняў розных дыяпазонаў і дакладнасці. 14 00:00:41,370 --> 00:00:44,800 Прывядзенне тыпаў дазваляе нам прымаць ліку з якая плавае кропкай, як 15 00:00:44,800 --> 00:00:49,170 3.14 і атрымаць частку перад дзесятковай, 3 у дадзеным выпадку, 16 00:00:49,170 --> 00:00:51,590 шляхам прывядзення яго да Int. 17 00:00:51,590 --> 00:00:53,900 Давайце возьмем прыклад з ангельскай мовы для кароткага 18 00:00:53,900 --> 00:00:56,910 агляд тыпаў і паглядзець, як прывядзенне тыпу можа змяніцца 19 00:00:56,910 --> 00:00:59,380 Як мы інтэрпрэтаваць элемент дадзеных. 20 00:00:59,380 --> 00:01:05,269 Па дадзеных, давайце сімвалы тут. 21 00:01:05,269 --> 00:01:07,570 Я проста спасылацца на гэтыя старанна настроены ліній 22 00:01:07,570 --> 00:01:10,100 сімвалы, але, як хтосьці, хто ведае ангельскую мову, 23 00:01:10,100 --> 00:01:12,750 Вы адразу прызнаць, што яны з'яўляюцца, па сутнасці, літар. 24 00:01:12,750 --> 00:01:15,580 Вы няяўна разумеецца тып дадзеных. 25 00:01:15,580 --> 00:01:17,620 Гледзячы на ​​гэты радок літар, мы можам ўбачыць два 26 00:01:17,620 --> 00:01:20,140 іншымі словамі, кожны са сваім уласным сэнсам. 27 00:01:20,140 --> 00:01:25,530 Там у назоўнік, вецер, як і ў вецер дзьме звонку. 28 00:01:25,530 --> 00:01:28,280 І ёсць дзеяслоў, вецер, як і ў Мне трэба, каб 29 00:01:28,280 --> 00:01:31,410 вецер мой аналагавыя гадзіны. 30 00:01:31,410 --> 00:01:33,420 Гэта цікавы прыклад, таму што мы бачым 31 00:01:33,420 --> 00:01:36,270 як тып, які мы прыпісваем нашых дадзеных, ці з'яўляецца назоўнік або 32 00:01:36,270 --> 00:01:39,080 Дзеяслоў, змены, як мы выкарыстоўваем гэтыя дадзеныя - 33 00:01:39,080 --> 00:01:41,730 як вецер слова або ветру. 34 00:01:41,730 --> 00:01:44,100 Хоць кампутар не клапоціцца аб граматыцы і частак 35 00:01:44,100 --> 00:01:47,750 ангельскай мовы, той жа асноўны прынцып прымяняецца. 36 00:01:47,750 --> 00:01:50,290 Гэта значыць, мы можам змяніць інтэрпрэтацыю дакладную 37 00:01:50,290 --> 00:01:53,140 ж дадзеныя, якія захоўваюцца ў памяці, проста прывядзення яго да 38 00:01:53,140 --> 00:01:54,576 розных тыпаў. 39 00:01:54,576 --> 00:01:57,250 Вось памеры найбольш распаўсюджаных тыпаў на 32-разрадных 40 00:01:57,250 --> 00:01:58,340 аперацыйнай сістэмы. 41 00:01:58,340 --> 00:02:02,070 У нас ёсць знак у 1 байт, Int і плаваць на 4 байта, доўга 42 00:02:02,070 --> 00:02:04,390 доўга і двайнога на 8 байт. 43 00:02:04,390 --> 00:02:07,670 Таму што Int займае 4 байта, гэта зойме 32 біт 44 00:02:07,670 --> 00:02:10,060 , Калі яна захоўваецца ў памяці ў выглядзе двайковага серыі 45 00:02:10,060 --> 00:02:11,500 з нулёў і адзінак. 46 00:02:11,500 --> 00:02:14,020 Пакуль наша пераменная застаецца як тыпу INT, 47 00:02:14,020 --> 00:02:16,740 кампутар заўсёды будзе канвертаваць гэтыя нулі і адзінкі з 48 00:02:16,740 --> 00:02:19,120 двайковай ў зыходнае лік. 49 00:02:19,120 --> 00:02:21,270 Тым не менш, мы тэарэтычна маглі б кінуць гэтыя 32 50 00:02:21,270 --> 00:02:23,510 Біты у серыі лагічных тыпаў. 51 00:02:23,510 --> 00:02:26,090 І тады кампутар будзе ўжо не ўбачыць нумар, але 52 00:02:26,090 --> 00:02:28,810 Замест набору нулёў і адзінак. 53 00:02:28,810 --> 00:02:31,570 Мы маглі б таксама паспрабаваць прачытаць, што дадзеныя ў выглядзе розных лікавых 54 00:02:31,570 --> 00:02:34,660 тыпу, або нават у выглядзе радкі з чатырох знакаў. 55 00:02:34,660 --> 00:02:37,820 Калі маеш справу з лікамі ў кастынгу, неабходна разгледзець, як 56 00:02:37,820 --> 00:02:40,470 Дакладнасць вашыя каштоўнасці будуць закрануты. 57 00:02:40,470 --> 00:02:43,240 Майце на ўвазе, што дакладнасць можа застацца тое ж самае, 58 00:02:43,240 --> 00:02:47,150 ці вы можаце страціць дакладнасць, але вы ніколі не можаце атрымаць дакладнасць. 59 00:02:47,150 --> 00:02:49,060 Давайце пройдземся па трох найбольш распаўсюджаных спосабаў, якія вы можаце 60 00:02:49,060 --> 00:02:50,400 страта дакладнасці. 61 00:02:50,400 --> 00:02:53,060 Ліццё з якая плавае кропкай у цэлы лік выкліча ўсячэнне ўсё 62 00:02:53,060 --> 00:02:54,900 пасля коскі, так што вы пакінулі 63 00:02:54,900 --> 00:02:55,950 з цэлага ліку. 64 00:02:55,950 --> 00:03:02,000 Калі ўзяць паплавок х, якая будзе роўная 3,7, мы можам кінуць 65 00:03:02,000 --> 00:03:05,580 гэтая пераменная х у цэлы лік шляхам простага напісання Int ў 66 00:03:05,580 --> 00:03:07,050 дужкі. 67 00:03:07,050 --> 00:03:10,010 Кожны раз, калі мы выкарыстоўваем гэты тэрмін тут, мы будзем эфектыўна 68 00:03:10,010 --> 00:03:12,810 выкарыстоўваць тры значэння, таму што мы ўсечаным 69 00:03:12,810 --> 00:03:14,880 ўсё пасля коскі. 70 00:03:14,880 --> 00:03:17,210 Мы таксама можа канвертаваць доўга-доўга INT, які будзе 71 00:03:17,210 --> 00:03:20,760 Сапраўды гэтак жа прывесці да страты высокага парадку бітаў. 72 00:03:20,760 --> 00:03:23,910 Доўга-доўга займае 8 байт, або 64 біта ў памяці. 73 00:03:23,910 --> 00:03:27,050 Таму, калі мы кінулі яго ў цэлы лік якіх толькі 4 байта або 32 74 00:03:27,050 --> 00:03:29,820 бітаў, мы, па сутнасці адсекшы ўсе біты, 75 00:03:29,820 --> 00:03:32,420 ўяўляюць сабой больш высокія значэнні двайковага файла. 76 00:03:32,420 --> 00:03:34,690 Вы маглі б таксама прывесці да падвойным паплаўком, які дасць 77 00:03:34,690 --> 00:03:37,340 Вы бліжэйшы магчымы якая плавае кропкай у падвойным без 78 00:03:37,340 --> 00:03:39,100 абавязкова акруглення яго. 79 00:03:39,100 --> 00:03:41,840 Як і ў нашай доўгай доўга Int пераўтварэнні, страты ў 80 00:03:41,840 --> 00:03:44,890 Дакладнасць у тым, што падвойныя утрымлівае дадатковую інфармацыю. 81 00:03:44,890 --> 00:03:47,910 Падвойная дазволіць вам захоўваць 53 ўважаецца біт, 82 00:03:47,910 --> 00:03:50,650 прыкладна 16 ўважаецца лічбаў. 83 00:03:50,650 --> 00:03:53,050 У той час як паплавок будзе толькі дазваляюць захоўваць 24 84 00:03:53,050 --> 00:03:56,235 ўважаецца біт, прыкладна ў сем ўважаецца лічбаў. 85 00:03:56,235 --> 00:03:58,700 У гэтых апошніх двух выпадках, гэта можа быць карысна думаць пра 86 00:03:58,700 --> 00:04:01,200 прывядзенне тыпу, як змяненне памеру фота. 87 00:04:01,200 --> 00:04:03,860 Калі вы ідзяце ад вялікага памеру невялікага памеру, вы не можаце бачыць 88 00:04:03,860 --> 00:04:05,600 рэчы, як выразна, таму што вы страцілі дадзеныя 89 00:04:05,600 --> 00:04:07,530 ў выглядзе пікселяў. 90 00:04:07,530 --> 00:04:09,270 Прывядзенне тыпаў таксама могуць выклікаць праблемы, калі мы 91 00:04:09,270 --> 00:04:11,050 кінулі цэлыя паплаўкоў. 92 00:04:11,050 --> 00:04:13,920 Так як паплаўкі на 32-бітнай машыне толькі ёсць 24 93 00:04:13,920 --> 00:04:16,959 ўважаецца біт, яны не могуць дакладна ўяўляць значэння 94 00:04:16,959 --> 00:04:22,750 больш чым 2 у ступені 24, або 16777217. 95 00:04:22,750 --> 00:04:25,540 Зараз давайце пагаворым аб відавочных і няяўных ліцця. 96 00:04:25,540 --> 00:04:28,000 Відавочнае прывядзенне, калі мы пішам тыпу ў дужках 97 00:04:28,000 --> 00:04:29,430 перад імем зменнай. 98 00:04:29,430 --> 00:04:33,100 Напрыклад, перш чым мы пісалі Int ў круглых дужках перад нашымі 99 00:04:33,100 --> 00:04:35,640 плаваць зменнай х. 100 00:04:35,640 --> 00:04:37,200 Такім чынам, мы атрымліваем цэлалікавых значэнне, 101 00:04:37,200 --> 00:04:38,593 ўсечаным значэнні 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Невідавочнае прывядзенне, калі кампілятар аўтаматычна змяняе 104 00:04:42,970 --> 00:04:46,340 падобнага тыпу ў супер тыпу, або выконвае некаторыя іншыя роды 105 00:04:46,340 --> 00:04:48,310 ліццё не патрабуючы ад карыстальніка, каб напісаць 106 00:04:48,310 --> 00:04:49,720 дадатковага кода. 107 00:04:49,720 --> 00:04:53,550 Напрыклад, калі мы дадаем 5 і 1,1, нашы каштоўнасці ўжо ёсць 108 00:04:53,550 --> 00:04:55,680 Тыпы звязаных з імі. 109 00:04:55,680 --> 00:04:59,480 5 ўяўляе сабой цэлы лік, у той час як 1/1 з'яўляецца паплавок. 110 00:04:59,480 --> 00:05:02,390 Для таго, каб дадаць іх, кампутар ставіць пад 5 у паплаўком, 111 00:05:02,390 --> 00:05:04,530 якія былі б тое ж самае, як напісанне 5,0 ў 112 00:05:04,530 --> 00:05:06,476 першае месца. 113 00:05:06,476 --> 00:05:13,210 Але гэты шлях мы гаворым паплаўком 5, або 5,0, плюс тое, што ўжо было 114 00:05:13,210 --> 00:05:16,960 паплаўка, 1,1, і адтуль мы сапраўды можам дадаць гэтыя 115 00:05:16,960 --> 00:05:18,640 каштоўнасці і атрымаць значэнне 6.1. 116 00:05:21,170 --> 00:05:23,500 Невідавочнае прывядзенне таксама дазваляе прызначыць зменныя 117 00:05:23,500 --> 00:05:25,590 розных тыпаў адзін з адным. 118 00:05:25,590 --> 00:05:28,110 Мы заўсёды можам прызначыць менш дакладны тып у больш 119 00:05:28,110 --> 00:05:29,250 дакладнае адзін. 120 00:05:29,250 --> 00:05:37,060 Напрыклад, калі мы маем падвойную х, Int у - 121 00:05:37,060 --> 00:05:40,120 і гэта можа мець любыя значэння, якія мы ставім іх - 122 00:05:40,120 --> 00:05:43,560 мы можам сказаць, х = у. 123 00:05:43,560 --> 00:05:46,340 Паколькі падвойнае мае вялікую дакладнасць, чым INT, таму мы 124 00:05:46,340 --> 00:05:48,380 не страціць любую інфармацыю. 125 00:05:48,380 --> 00:05:50,420 З іншага боку, гэта не абавязкова будзе правільным сказаць, 126 00:05:50,420 --> 00:05:54,060 У роўная х, таму што падвойныя можа мець большае значэнне, чым 127 00:05:54,060 --> 00:05:55,220 лік. 128 00:05:55,220 --> 00:05:57,420 І так цэлае, не магла б змясціць усіх 129 00:05:57,420 --> 00:05:59,560 Інфармацыя, якая захоўваецца ў два разы. 130 00:05:59,560 --> 00:06:02,610 Невідавочнае прывядзенне таксама выкарыстоўваецца ў аператарах параўнання, як 131 00:06:02,610 --> 00:06:06,410 больш, менш або аператара роўнасці. 132 00:06:06,410 --> 00:06:13,050 Такім чынам, мы можам казаць, калі 5,1 больш, чым 5, і мы атрымліваем 133 00:06:13,050 --> 00:06:14,750 прывесці праўда. 134 00:06:14,750 --> 00:06:18,470 Таму што 5 з'яўляецца INT, але гэта будзе прыведзены да паплаўка для таго, каб 135 00:06:18,470 --> 00:06:22,090 можна параўнаць з паплаўком 5,1, мы б сказалі, 5.1, 136 00:06:22,090 --> 00:06:24,550 больш 5,0. 137 00:06:24,550 --> 00:06:31,320 Тое ж самае ставіцца і кажу, калі роўная 2,0 роўная 2. 138 00:06:31,320 --> 00:06:34,190 Мы б таксама атрымаць сапраўднае, таму што кампутар будзе адкідаць 139 00:06:34,190 --> 00:06:39,750 цэлае лік 2, каб плаваць, а затым сказаць роўная 2,0 роўная 2,0, 140 00:06:39,750 --> 00:06:41,660 гэта праўда. 141 00:06:41,660 --> 00:06:44,180 Не забывайце, што мы таксама можам кінуць паміж цэлымі і сімвалаў, 142 00:06:44,180 --> 00:06:46,350 або ASCII значэння. 143 00:06:46,350 --> 00:06:49,690 Сімвалы таксама павінны быць зведзены да двайковым, таму вы 144 00:06:49,690 --> 00:06:51,920 можаце лёгка канвертаваць паміж сімвалы і адпаведныя ім 145 00:06:51,920 --> 00:06:53,260 ASCII значэння. 146 00:06:53,260 --> 00:06:56,180 Каб даведацца больш аб гэтым, азнаёмцеся з нашымі відэа на ASCII. 147 00:06:56,180 --> 00:06:58,080 Калі вы бераце час, каб думаць пра тое, як дадзеныя захоўваецца, 148 00:06:58,080 --> 00:06:59,990 ён пачынае рабіць шмат сэнсу. 149 00:06:59,990 --> 00:07:02,790 Гэта як розніца паміж ветрам і ветру. 150 00:07:02,790 --> 00:07:05,490 Дадзеныя ж, але выгляд можа змяніцца, як мы 151 00:07:05,490 --> 00:07:06,720 інтэрпрэтаваць. 152 00:07:06,720 --> 00:07:10,430 Мяне клічуць Джордан Jozwiak, гэта CS50.