1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN Jóźwiak: odlewanie Type, w najprostszym tego słowa znaczeniu, jest 2 00:00:10,270 --> 00:00:13,300 sposób zmienić komputer interpretacji niektórych danych przez 3 00:00:13,300 --> 00:00:16,560 pośrednio lub bezpośrednio, zmieniając jego typ danych. 4 00:00:16,560 --> 00:00:19,940 Takie jak zmiana int do pływaka, lub odwrotnie. 5 00:00:19,940 --> 00:00:21,550 Aby zrozumieć, rzutowanie typów, musimy 6 00:00:21,550 --> 00:00:22,680 zacząć od podstaw - 7 00:00:22,680 --> 00:00:24,140 rodzaje samych danych. 8 00:00:24,140 --> 00:00:26,960 W językach komputerowych takich jak C, wszystkie zmienne mają jakąś 9 00:00:26,960 --> 00:00:29,690 typu danych, który określa, jak komputer, i podobnie 10 00:00:29,690 --> 00:00:32,140 użytkownika, interpretuje tę zmienną. 11 00:00:32,140 --> 00:00:35,160 Numeryczne typy danych takie jak int, długo, długo, float i 12 00:00:35,160 --> 00:00:38,110 double, wszystkie mają swoje unikalne cechy i są 13 00:00:38,110 --> 00:00:41,370 używane do określania wartości różnych zakresów i precyzji. 14 00:00:41,370 --> 00:00:44,800 Odlewanie Type pozwala nam podejmować liczbę zmiennoprzecinkową jak 15 00:00:44,800 --> 00:00:49,170 3,14 i dostać część przed przecinku, 3 w tym przypadku, 16 00:00:49,170 --> 00:00:51,590 oddając go do int. 17 00:00:51,590 --> 00:00:53,900 Weźmy przykład z języka angielskiego na krótki 18 00:00:53,900 --> 00:00:56,910 przegląd rodzajów, i zobaczyć, jak można zmienić rodzaju odlewu 19 00:00:56,910 --> 00:00:59,380 sposób, w jaki interpretuje fragment danych. 20 00:00:59,380 --> 00:01:05,269 Dla danych, weźmy symbole tutaj. 21 00:01:05,269 --> 00:01:07,570 Ja tylko odnieść się do tych linii, jak starannie skonfigurowanych 22 00:01:07,570 --> 00:01:10,100 symbole, ale jako ktoś, kto zna język angielski, 23 00:01:10,100 --> 00:01:12,750 natychmiast rozpoznać, że są one w rzeczywistości, liter. 24 00:01:12,750 --> 00:01:15,580 Jesteś niejawnie rozumieć typ danych. 25 00:01:15,580 --> 00:01:17,620 Patrząc na ten ciąg liter widzimy dwa 26 00:01:17,620 --> 00:01:20,140 różne słowa, każdy z własnym rozumieniu. 27 00:01:20,140 --> 00:01:25,530 Jest rzecz, wiatr, jak wieje wiatr na zewnątrz. 28 00:01:25,530 --> 00:01:28,280 I jest czasownik, wiatr, jak trzeba 29 00:01:28,280 --> 00:01:31,410 wiatr mój analogowy zegarek. 30 00:01:31,410 --> 00:01:33,420 Jest to ciekawy przykład, bo widzimy 31 00:01:33,420 --> 00:01:36,270 jak typ, który możemy przypisać do naszych danych, czy rzecz lub 32 00:01:36,270 --> 00:01:39,080 czasownik, zmienia sposób wykorzystujemy te dane - 33 00:01:39,080 --> 00:01:41,730 jak wiatr słowo lub wiatr. 34 00:01:41,730 --> 00:01:44,100 Chociaż komputer nie dba o gramatyce i części 35 00:01:44,100 --> 00:01:47,750 angielskiego słowa, sama podstawowa zasada ma zastosowanie. 36 00:01:47,750 --> 00:01:50,290 Oznacza to, że możemy zmienić interpretację dokładny 37 00:01:50,290 --> 00:01:53,140 same dane przechowywane w pamięci, po prostu do odlewania 38 00:01:53,140 --> 00:01:54,576 inny typ. 39 00:01:54,576 --> 00:01:57,250 Oto rozmiary typów najczęściej na 32-bit 40 00:01:57,250 --> 00:01:58,340 system operacyjny. 41 00:01:58,340 --> 00:02:02,070 Mamy char na 1 bajt, int i float na 4 bajtach, długi 42 00:02:02,070 --> 00:02:04,390 długo i dwukrotnie na 8 bajtach. 43 00:02:04,390 --> 00:02:07,670 Bo int zajmuje 4 bajty, to zajmie się 32 bitów 44 00:02:07,670 --> 00:02:10,060 gdy jest przechowywany w pamięci jako binarnego serii 45 00:02:10,060 --> 00:02:11,500 z zer i jedynek. 46 00:02:11,500 --> 00:02:14,020 Tak długo, jak naszej zmiennej pozostaje jako typu int, w 47 00:02:14,020 --> 00:02:16,740 komputer zawsze konwersji tych zer i jedynek z 48 00:02:16,740 --> 00:02:19,120 binary do oryginalnego numeru. 49 00:02:19,120 --> 00:02:21,270 Jednakże, możemy teoretycznie oddać te 32 50 00:02:21,270 --> 00:02:23,510 bitów w serii logicznych typów. 51 00:02:23,510 --> 00:02:26,090 A następnie komputer nie będzie już zobaczyć wiele, ale 52 00:02:26,090 --> 00:02:28,810 zamiast zbiór zer i jedynek. 53 00:02:28,810 --> 00:02:31,570 Możemy również spróbować odczytać, że dane liczbowe różnią 54 00:02:31,570 --> 00:02:34,660 wpisz, lub nawet jako ciąg czterech znaków. 55 00:02:34,660 --> 00:02:37,820 Gdy mamy do czynienia z liczbami w castingu, należy zastanowić się, jak 56 00:02:37,820 --> 00:02:40,470 Precyzyjne wartości zostaną naruszone. 57 00:02:40,470 --> 00:02:43,240 Należy pamiętać, że precyzja może pozostać taka sama, 58 00:02:43,240 --> 00:02:47,150 lub możesz stracić precyzji, ale nigdy nie można uzyskać precyzję. 59 00:02:47,150 --> 00:02:49,060 Przejdźmy przez na trzy sposoby, które można najczęściej 60 00:02:49,060 --> 00:02:50,400 utratę precyzji. 61 00:02:50,400 --> 00:02:53,060 Casting pływaka do int spowoduje obcięcie wszystkiego 62 00:02:53,060 --> 00:02:54,900 po przecinku, więc jesteś w lewo 63 00:02:54,900 --> 00:02:55,950 z liczby całkowitej. 64 00:02:55,950 --> 00:03:02,000 Jeśli weźmiemy x pływak, który będzie równy 3,7, możemy rzucić 65 00:03:02,000 --> 00:03:05,580 ta zmienna x typu int, po prostu pisząc w int 66 00:03:05,580 --> 00:03:07,050 nawiasów. 67 00:03:07,050 --> 00:03:10,010 Zawsze używamy tego terminu tutaj, dowiemy się skutecznie 68 00:03:10,010 --> 00:03:12,810 się przy użyciu wartości trzy bo mamy obcięty 69 00:03:12,810 --> 00:03:14,880 wszystko po przecinku. 70 00:03:14,880 --> 00:03:17,210 Możemy także konwertować długo długo do int, która będzie 71 00:03:17,210 --> 00:03:20,760 Podobnie prowadzi do utraty bitów wyższego rzędu. 72 00:03:20,760 --> 00:03:23,910 Long long zajmuje 8 bajtów lub 64 bitów w pamięci. 73 00:03:23,910 --> 00:03:27,050 Kiedy więc oddać go do int, który ma tylko 4 bajty lub 32 74 00:03:27,050 --> 00:03:29,820 bity, mamy zasadniczo odcięcie wszystkich bitów 75 00:03:29,820 --> 00:03:32,420 stanowią wyższe wartości binarne. 76 00:03:32,420 --> 00:03:34,690 Można też rzucić double do pływaka, który da 77 00:03:34,690 --> 00:03:37,340 Państwu najbliższy możliwy pływak do podwójnego bez 78 00:03:37,340 --> 00:03:39,100 koniecznie zaokrąglenie to. 79 00:03:39,100 --> 00:03:41,840 Podobny do naszego long long int do konwersji, utrata 80 00:03:41,840 --> 00:03:44,890 precyzja, ponieważ zawiera dwukrotnie więcej danych. 81 00:03:44,890 --> 00:03:47,910 Double pozwala na przechowywanie 53 znaczące bity, 82 00:03:47,910 --> 00:03:50,650 około 16 cyfr znaczących. 83 00:03:50,650 --> 00:03:53,050 Mając na uwadze, pływak tylko pozwala na przechowywanie 24 84 00:03:53,050 --> 00:03:56,235 znaczące bity, około siedem cyfr znaczących. 85 00:03:56,235 --> 00:03:58,700 W tych dwóch ostatnich przypadkach, może okazać się pomocne, że z 86 00:03:58,700 --> 00:04:01,200 wpisz odlewania jak zmiana rozmiaru zdjęć. 87 00:04:01,200 --> 00:04:03,860 Kiedy idziesz z dużej wielkości do małych rozmiarów, nie można zobaczyć 88 00:04:03,860 --> 00:04:05,600 rzeczy tak jasno, ponieważ utracone dane 89 00:04:05,600 --> 00:04:07,530 w postaci pikseli. 90 00:04:07,530 --> 00:04:09,270 Odlewania typu może również powodować problemy, gdy 91 00:04:09,270 --> 00:04:11,050 rzucać Ints do pływaków. 92 00:04:11,050 --> 00:04:13,920 Ponieważ unosi się na komputerze 32-bitowym tylko 24 93 00:04:13,920 --> 00:04:16,959 znaczących bitów, nie można dokładnie reprezentują wartości 94 00:04:16,959 --> 00:04:22,750 w ciągu 2 do potęgi 24, czyli 16777217. 95 00:04:22,750 --> 00:04:25,540 Teraz porozmawiajmy o castingu jawnych i ukrytych. 96 00:04:25,540 --> 00:04:28,000 Jawne odlewania jest kiedy piszemy typ w nawiasach 97 00:04:28,000 --> 00:04:29,430 przed nazwą zmiennej. 98 00:04:29,430 --> 00:04:33,100 Jako przykład, zanim napisał int w nawiasie przed naszym 99 00:04:33,100 --> 00:04:35,640 unosić zmiennej x. 100 00:04:35,640 --> 00:04:37,200 W ten sposób otrzymujemy wartość typu int, 101 00:04:37,200 --> 00:04:38,593 obcięty wartość 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Niejawny odlewania jest, gdy kompilator automatycznie zmienia 104 00:04:42,970 --> 00:04:46,340 podobne typy do super rodzaju, lub wykonuje inny rodzaj 105 00:04:46,340 --> 00:04:48,310 odlewania bez potrzeby użytkownika pisać 106 00:04:48,310 --> 00:04:49,720 dodatkowego kodu. 107 00:04:49,720 --> 00:04:53,550 Na przykład, gdy dodamy 5 i 1,1, nasze wartości już 108 00:04:53,550 --> 00:04:55,680 typy związane z nimi. 109 00:04:55,680 --> 00:04:59,480 5 jest int, natomiast 1,1 jest float. 110 00:04:59,480 --> 00:05:02,390 Aby je dodać, komputer rzuca 5 do pływaka, 111 00:05:02,390 --> 00:05:04,530 co byłoby samo jak pisanie 5,0 w 112 00:05:04,530 --> 00:05:06,476 pierwsze miejsce. 113 00:05:06,476 --> 00:05:13,210 Ale w ten sposób powiedzieć, pływak 5 lub 5,0, plus to, co było już 114 00:05:13,210 --> 00:05:16,960 float, 1,1, a stamtąd możemy właściwie dodać te 115 00:05:16,960 --> 00:05:18,640 wartości i uzyskać wartość 6,1. 116 00:05:21,170 --> 00:05:23,500 Niejawny odlewania pozwala nam przypisać zmienne 117 00:05:23,500 --> 00:05:25,590 rodzaje siebie. 118 00:05:25,590 --> 00:05:28,110 Zawsze możemy przypisać mniej dokładny typ na więcej 119 00:05:28,110 --> 00:05:29,250 precyzyjny. 120 00:05:29,250 --> 00:05:37,060 Na przykład, jeśli mamy double x, int y oraz - 121 00:05:37,060 --> 00:05:40,120 i mogą mieć żadnych wartości, że stawiamy je do - 122 00:05:40,120 --> 00:05:43,560 możemy powiedzieć, x równa y. 123 00:05:43,560 --> 00:05:46,340 Ponieważ ma dwukrotnie większą dokładność niż int, więc 124 00:05:46,340 --> 00:05:48,380 nie stracić żadnych informacji. 125 00:05:48,380 --> 00:05:50,420 Z drugiej strony, nie zawsze jest poprawne powiedzieć 126 00:05:50,420 --> 00:05:54,060 r wynosi X, ponieważ może się dwukrotnie większą wartość niż 127 00:05:54,060 --> 00:05:55,220 całkowitą. 128 00:05:55,220 --> 00:05:57,420 I tak liczba całkowita nie może być w stanie pomieścić wszystkie 129 00:05:57,420 --> 00:05:59,560 informacje przechowywane w podwójne. 130 00:05:59,560 --> 00:06:02,610 Niejawny odlewania jest również stosowana w operatorów porównania jak 131 00:06:02,610 --> 00:06:06,410 powyżej, poniżej lub operator równości. 132 00:06:06,410 --> 00:06:13,050 W ten sposób możemy powiedzieć, czy 5,1 jest większy niż 5, a otrzymamy 133 00:06:13,050 --> 00:06:14,750 wynikać prawda. 134 00:06:14,750 --> 00:06:18,470 Ponieważ 5 jest int, ale to być oddane do pływaka w celu 135 00:06:18,470 --> 00:06:22,090 można porównać do pływaka 5,1, to mówimy, 5,1 jest 136 00:06:22,090 --> 00:06:24,550 większy niż 5.0. 137 00:06:24,550 --> 00:06:31,320 To samo mówią jeśli 2,0 równa jest równa 2. 138 00:06:31,320 --> 00:06:34,190 Chcemy też dostać prawdziwe, ponieważ komputer będzie rzucać 139 00:06:34,190 --> 00:06:39,750 całkowitą 2 do pływaka, a potem mówią 2,0 równa jest równa 2,0, 140 00:06:39,750 --> 00:06:41,660 to prawda. 141 00:06:41,660 --> 00:06:44,180 Nie zapominajmy, że możemy oddać między wskazówki i znaki, 142 00:06:44,180 --> 00:06:46,350 lub wartości ASCII. 143 00:06:46,350 --> 00:06:49,690 Znaki muszą być również obniżona na binarny, który jest dlaczego 144 00:06:49,690 --> 00:06:51,920 można łatwo przekonwertować między znaków i ich odpowiednie 145 00:06:51,920 --> 00:06:53,260 Wartości ASCII. 146 00:06:53,260 --> 00:06:56,180 Aby dowiedzieć się więcej na ten temat, zapoznaj się z wideo na ASCII. 147 00:06:56,180 --> 00:06:58,080 Kiedy przez chwilę pomyśleć o tym, jak dane jest przechowywany, 148 00:06:58,080 --> 00:06:59,990 zaczyna zarabiać dużo rozsądku. 149 00:06:59,990 --> 00:07:02,790 To tak jak różnica pomiędzy wiatrem i wiatrem. 150 00:07:02,790 --> 00:07:05,490 Dane są takie same, ale mogą zmieniać typ jak 151 00:07:05,490 --> 00:07:06,720 interpretować. 152 00:07:06,720 --> 00:07:10,430 Nazywam się Jordan Jóźwiak, to CS50.