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.