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 Такива като промяна на едно цяло число с плаваща запетая, или обратното. 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 като го хвърля на вътр. 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 байт, вътр и поплавъка при 4 байта, 42 00:02:02,070 --> 00:02:04,390 дълго и двойно 8 байта. 43 00:02:04,390 --> 00:02:07,670 Тъй като едно цяло число заема 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 Можем също така да конвертирате дълго на вътр, която ще 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 Така че, когато ние да се хвърли едно цяло число, което има само четири байта, или 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 Implicit леене е, когато компилаторът автоматично се променя 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 Implicit леене също така ни позволява да зададете променливи на 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, и вътр г. - 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 Тъй като има двойно по-голяма точност, отколкото едно цяло число, така че ние 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 Implicit леене се използва също и в сравнение оператори като 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 е ПНА, но тя ще се хвърли с плаваща запетая, за да се 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.