1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] Јордан 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 Како што се промена на int да плови, или обратно. 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 Кастинг плови кон int ќе предизвика truncation на сè 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 оваа променлива X до int со едноставно пишување 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 Значи кога ќе го фрли на int која има само 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 фрли ints да плови. 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, или 16.777.217. 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 плови променливата x. 100 00:04:35,640 --> 00:04:37,200 На овој начин, ќе го добиеме int вредност, 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 е int, додека 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 На пример, ако имаме двојно x, и int y - 121 00:05:37,060 --> 00:05:40,120 и овие може да има некои вредности кои ги постави - 122 00:05:40,120 --> 00:05:43,560 можеме да кажеме x е еднаква на y. 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 y е еднаква на X, бидејќи двојно би можеле да имаат поголема вредност од 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 Не заборавајте дека ние, исто така, може да фрли меѓу ints и карактери, 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.