1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN Jozwiak: Type Casting, im einfachsten Sinne ist ein 2 00:00:10,270 --> 00:00:13,300 Weg zu einem Computer-Interpretation einiger Daten verändern 3 00:00:13,300 --> 00:00:16,560 implizit oder explizit Änderung seiner Datentyp. 4 00:00:16,560 --> 00:00:19,940 Wie das Ändern einer int zu einem float, oder umgekehrt. 5 00:00:19,940 --> 00:00:21,550 Um Typumwandlung zu verstehen, müssen wir 6 00:00:21,550 --> 00:00:22,680 Beginnen wir mit den Grundlagen - 7 00:00:22,680 --> 00:00:24,140 Datentypen sich. 8 00:00:24,140 --> 00:00:26,960 In Programmiersprachen wie C, müssen alle Variablen eine Art 9 00:00:26,960 --> 00:00:29,690 der Daten-Typ, wie der Computer, und ebenfalls ermittelt 10 00:00:29,690 --> 00:00:32,140 der Benutzer, interpretiert diese Variable. 11 00:00:32,140 --> 00:00:35,160 Numerische Datentypen wie int, long long, float und 12 00:00:35,160 --> 00:00:38,110 Doppel, haben alle ihre eigenen einzigartigen Eigenschaften und sind 13 00:00:38,110 --> 00:00:41,370 verwendet, um Werte unterschiedlicher Bereiche und Genauigkeit festzulegen. 14 00:00:41,370 --> 00:00:44,800 Typ-Umwandlung ermöglicht es uns, eine Gleitkommazahl nehmen wie 15 00:00:44,800 --> 00:00:49,170 3,14 und erhalten den Teil vor dem Komma, 3 in diesem Fall 16 00:00:49,170 --> 00:00:51,590 durch Gießen es zu einem int. 17 00:00:51,590 --> 00:00:53,900 Nehmen wir ein Beispiel aus der englischen Sprache für einen kurzen 18 00:00:53,900 --> 00:00:56,910 Bewertung von Typen, und um zu sehen, wie Typumwandlung können 19 00:00:56,910 --> 00:00:59,380 die Art und Weise interpretieren wir ein Stück von Daten. 20 00:00:59,380 --> 00:01:05,269 Für Daten, lassen Sie die Symbole hier. 21 00:01:05,269 --> 00:01:07,570 Ich habe gerade diesen sorgfältig konfiguriert Linien wie beziehen 22 00:01:07,570 --> 00:01:10,100 Symbole, sondern als jemand, der die englische Sprache kennt, 23 00:01:10,100 --> 00:01:12,750 erkennt man sofort, dass sie in der Tat, Briefe. 24 00:01:12,750 --> 00:01:15,580 Sie implizit verstanden den Datentyp. 25 00:01:15,580 --> 00:01:17,620 Mit Blick auf diese Zeichenfolge aus Buchstaben können wir sehen, zwei 26 00:01:17,620 --> 00:01:20,140 anderen Worten, jede mit ihrer eigenen Bedeutung. 27 00:01:20,140 --> 00:01:25,530 Es ist das Substantiv, Wind, wie in den Wind draußen. 28 00:01:25,530 --> 00:01:28,280 Und es gibt das Verb, Wind, wie in I zu müssen 29 00:01:28,280 --> 00:01:31,410 wickeln meiner analogen Uhr. 30 00:01:31,410 --> 00:01:33,420 Dies ist ein interessantes Beispiel, weil wir sehen können 31 00:01:33,420 --> 00:01:36,270 wie die Art, dass wir unsere Daten zuordnen, ob Substantiv oder 32 00:01:36,270 --> 00:01:39,080 Verb, Veränderungen, wie wir diese Daten verwenden - 33 00:01:39,080 --> 00:01:41,730 wie das Wort Wind oder Wind. 34 00:01:41,730 --> 00:01:44,100 Obwohl ein Computer nicht über Grammatik und Teile kümmern 35 00:01:44,100 --> 00:01:47,750 der englischen Sprache, gilt das gleiche Prinzip. 36 00:01:47,750 --> 00:01:50,290 Das heißt, können wir die Interpretation der genaue 37 00:01:50,290 --> 00:01:53,140 gleichen Daten im Speicher abgelegt einfach Gießen, dass es ein 38 00:01:53,140 --> 00:01:54,576 anderen Typs. 39 00:01:54,576 --> 00:01:57,250 Hier sind die Größen der häufigsten Arten auf einem 32-Bit- 40 00:01:57,250 --> 00:01:58,340 Betriebssystem. 41 00:01:58,340 --> 00:02:02,070 Wir haben eine char bei 1 byte, int und float bei 4 Bytes, eine lange 42 00:02:02,070 --> 00:02:04,390 lang und ein Doppel mit 8 Byte. 43 00:02:04,390 --> 00:02:07,670 Da ein int belegt 4 Byte, wird es dauern, bis 32 Bit 44 00:02:07,670 --> 00:02:10,060 wenn im Speicher als eine binäre Reihe gespeicherten 45 00:02:10,060 --> 00:02:11,500 von Nullen und Einsen. 46 00:02:11,500 --> 00:02:14,020 Solange unsere variable bleibt als Typ int, der 47 00:02:14,020 --> 00:02:16,740 Computer werden immer wandeln diese Einsen und Nullen aus 48 00:02:16,740 --> 00:02:19,120 binär in der ursprünglichen Anzahl. 49 00:02:19,120 --> 00:02:21,270 Allerdings könnten wir theoretisch gegossen jene 32 50 00:02:21,270 --> 00:02:23,510 Bits in eine Reihe von Booleschen Typen. 51 00:02:23,510 --> 00:02:26,090 Und dann würde der Computer nicht mehr sehen eine Reihe, aber 52 00:02:26,090 --> 00:02:28,810 stattdessen eine Reihe von Nullen und Einsen. 53 00:02:28,810 --> 00:02:31,570 Wir könnten auch versuchen, diese Daten als eine andere numerische lesen 54 00:02:31,570 --> 00:02:34,660 geben, oder sogar als eine Folge von vier Zeichen. 55 00:02:34,660 --> 00:02:37,820 Beim Umgang mit Zahlen in Gießen, müssen Sie überlegen, wie 56 00:02:37,820 --> 00:02:40,470 die Genauigkeit Ihrer Wert wird betroffen sein. 57 00:02:40,470 --> 00:02:43,240 Beachten Sie, dass die Präzision kann die gleiche bleiben, 58 00:02:43,240 --> 00:02:47,150 oder Sie können zu verlieren Präzision, aber man kann nie gewinnen Präzision. 59 00:02:47,150 --> 00:02:49,060 Lassen Sie durchlaufen für die drei häufigsten Arten, dass man 60 00:02:49,060 --> 00:02:50,400 Verlust der Genauigkeit. 61 00:02:50,400 --> 00:02:53,060 Casting a float in int verursachen Abschneiden alles 62 00:02:53,060 --> 00:02:54,900 nach dem Komma, so dass Sie nach links 63 00:02:54,900 --> 00:02:55,950 mit der Ganzzahl. 64 00:02:55,950 --> 00:03:02,000 Wenn wir die float x, 3,7 gleich stattfinden wird, können wir gegossen 65 00:03:02,000 --> 00:03:05,580 Diese Variable x zu einem int durch einfaches Schreiben int in 66 00:03:05,580 --> 00:03:07,050 Klammern. 67 00:03:07,050 --> 00:03:10,010 Immer, wenn wir diesen Begriff mit der rechten hier, wir effektiv 68 00:03:10,010 --> 00:03:12,810 werden mit dem Wert drei, weil wir abgeschnitten haben 69 00:03:12,810 --> 00:03:14,880 alles nach dem Komma. 70 00:03:14,880 --> 00:03:17,210 Wir können auch eine lange, lange auf einen int, was wird 71 00:03:17,210 --> 00:03:20,760 ähnlich zu einem Verlust von Bits hoher Ordnung führen. 72 00:03:20,760 --> 00:03:23,910 Eine lange lange dauert bis 8 Byte bzw. 64 Bit im Speicher. 73 00:03:23,910 --> 00:03:27,050 Wenn wir also warf sie in einen int, der nur 4 Bytes oder 32 74 00:03:27,050 --> 00:03:29,820 Bits, sind wir im Wesentlichen Abhacken alle Bits, 75 00:03:29,820 --> 00:03:32,420 stellen die höheren binären Werten. 76 00:03:32,420 --> 00:03:34,690 Sie könnten auch warf einen Doppel mit einem Schwimmer, die geben 77 00:03:34,690 --> 00:03:37,340 Ihnen die größtmögliche float der doppelten ohne 78 00:03:37,340 --> 00:03:39,100 zwangsläufig Rundung. 79 00:03:39,100 --> 00:03:41,840 Ähnlich wie unsere long long nach int Umwandlung der Verlust in 80 00:03:41,840 --> 00:03:44,890 Präzision ist da eine doppelte enthält mehr Daten. 81 00:03:44,890 --> 00:03:47,910 Ein Doppelklick können Sie 53 Bits zu speichern, 82 00:03:47,910 --> 00:03:50,650 rund 16 signifikanten Ziffern. 83 00:03:50,650 --> 00:03:53,050 Während ein Schwimmer können Sie nur bis 24 zu speichern 84 00:03:53,050 --> 00:03:56,235 Bits, etwa sieben signifikanten Stellen. 85 00:03:56,235 --> 00:03:58,700 In den letzten beiden Fällen kann es hilfreich sein, zu denken 86 00:03:58,700 --> 00:04:01,200 Typumwandlung wie Größenänderung ein Foto. 87 00:04:01,200 --> 00:04:03,860 Wenn Sie von einer großen Größe gehen auf eine kleine Größe, können Sie nicht sehen 88 00:04:03,860 --> 00:04:05,600 Dinge so klar, weil man verlorene Daten 89 00:04:05,600 --> 00:04:07,530 in Form von Pixeln. 90 00:04:07,530 --> 00:04:09,270 Typ-Umwandlung kann auch Probleme verursachen, wenn wir 91 00:04:09,270 --> 00:04:11,050 gegossen ints zu Schwimmern. 92 00:04:11,050 --> 00:04:13,920 Da schwimmt auf einer 32-Bit-Rechner haben nur 24 93 00:04:13,920 --> 00:04:16,959 Bits, können sie nicht genau darzustellen Werte 94 00:04:16,959 --> 00:04:22,750 über 2 zur Leistung von 24 oder 16777217. 95 00:04:22,750 --> 00:04:25,540 Lassen Sie uns nun über explizite und implizite Casting sprechen. 96 00:04:25,540 --> 00:04:28,000 Explizite Umwandlung ist, wenn wir die Art in Klammern schreiben 97 00:04:28,000 --> 00:04:29,430 vor einem Variablennamen. 98 00:04:29,430 --> 00:04:33,100 Als ein Beispiel, bevor wir schrieben int in Klammern vor unseren 99 00:04:33,100 --> 00:04:35,640 float Variable x. 100 00:04:35,640 --> 00:04:37,200 Auf diese Weise erhalten wir die int-Wert, desto 101 00:04:37,200 --> 00:04:38,593 abgeschnittenen Wert von 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Implizites Casting ist, wenn der Compiler automatisch 104 00:04:42,970 --> 00:04:46,340 ähnliche Arten zu einem super Typ, oder führt eine andere Art von 105 00:04:46,340 --> 00:04:48,310 Gießen ohne dass der Benutzer zu schreiben 106 00:04:48,310 --> 00:04:49,720 keine zusätzlichen Code. 107 00:04:49,720 --> 00:04:53,550 Zum Beispiel, wenn wir 5 und 1,1 hinzuzufügen, unsere Werte haben bereits 108 00:04:53,550 --> 00:04:55,680 Typen mit ihnen verbunden sind. 109 00:04:55,680 --> 00:04:59,480 Die 5 ist ein int, während 1,1 ist ein Schwimmer. 110 00:04:59,480 --> 00:05:02,390 Um sie hinzuzufügen, wirft der Computer 5 in einen Schwimmer, 111 00:05:02,390 --> 00:05:04,530 welche wäre das gleiche wie das Schreiben 5,0 in der haben 112 00:05:04,530 --> 00:05:06,476 ersten Platz. 113 00:05:06,476 --> 00:05:13,210 Aber diese Art, wie wir sagen, Schwimmer 5 oder 5,0, plus, was bereits 114 00:05:13,210 --> 00:05:16,960 ein Schwimmer, 1,1, und von dort können wir tatsächlich fügen Sie diese 115 00:05:16,960 --> 00:05:18,640 Werte und erhalten den Wert 6,1. 116 00:05:21,170 --> 00:05:23,500 Implizites Casting erlaubt uns auch, Variablen zuweisen 117 00:05:23,500 --> 00:05:25,590 verschiedene Arten zueinander. 118 00:05:25,590 --> 00:05:28,110 Wir können immer weisen eine weniger genaue Art in eine 119 00:05:28,110 --> 00:05:29,250 präzise ein. 120 00:05:29,250 --> 00:05:37,060 Zum Beispiel, wenn wir einen double x, und ein int y - 121 00:05:37,060 --> 00:05:40,120 und diese könnten keine Werte, die wir setzen sie um - 122 00:05:40,120 --> 00:05:43,560 können wir sagen, x gleich y. 123 00:05:43,560 --> 00:05:46,340 Da das Doppel mehr Präzision als ein int hat, so dass wir 124 00:05:46,340 --> 00:05:48,380 verlieren keine Informationen. 125 00:05:48,380 --> 00:05:50,420 Andererseits wäre es nicht unbedingt korrekt zu sagen 126 00:05:50,420 --> 00:05:54,060 y gleich x, weil die doppelte einen größeren Wert als haben könnte 127 00:05:54,060 --> 00:05:55,220 die Ganzzahl. 128 00:05:55,220 --> 00:05:57,420 Und so ist die Zahl möglicherweise nicht in der Lage, alle halten 129 00:05:57,420 --> 00:05:59,560 Informationen in dem doppelten gespeichert. 130 00:05:59,560 --> 00:06:02,610 Implizites Casting ist auch im Vergleich Operatoren wie verwendet 131 00:06:02,610 --> 00:06:06,410 größer als, kleiner als oder des Gleichheits-Operators. 132 00:06:06,410 --> 00:06:13,050 So können wir, wenn 5,1 sagen kann, ist größer als 5, und wir bekommen die 133 00:06:13,050 --> 00:06:14,750 Ergebnis true. 134 00:06:14,750 --> 00:06:18,470 Da 5 ist ein int, aber es wird mit einem Schwimmer gegossen werden, um 135 00:06:18,470 --> 00:06:22,090 mit dem Schwimmer 5,1 verglichen werden, würden wir sagen, 5,1 ist 136 00:06:22,090 --> 00:06:24,550 größer als 5,0. 137 00:06:24,550 --> 00:06:31,320 Das gleiche gilt zu sagen, wenn 2,0 entspricht gleich 2 wahr. 138 00:06:31,320 --> 00:06:34,190 Wir würden auch zu wahr, weil der Computer warf der 139 00:06:34,190 --> 00:06:39,750 Zahl 2 zu schweben und dann sagen 2,0 entspricht gleich 2,0, 140 00:06:39,750 --> 00:06:41,660 dies wahr ist. 141 00:06:41,660 --> 00:06:44,180 Vergessen Sie nicht, dass wir auch zwischen ints und chars gegossen, 142 00:06:44,180 --> 00:06:46,350 oder ASCII-Werte. 143 00:06:46,350 --> 00:06:49,690 Chars müssen auch auf binäre reduziert werden, weshalb Sie 144 00:06:49,690 --> 00:06:51,920 können leicht zwischen Zeichen und ihrer jeweiligen konvertieren 145 00:06:51,920 --> 00:06:53,260 ASCII-Werte. 146 00:06:53,260 --> 00:06:56,180 Um mehr zu erfahren über diese Besuche unsere Video-on-ASCII. 147 00:06:56,180 --> 00:06:58,080 Wenn Sie einen Moment Zeit nehmen, um darüber, wie Daten gespeichert ist denken, 148 00:06:58,080 --> 00:06:59,990 es fängt an, sehr viel Sinn machen. 149 00:06:59,990 --> 00:07:02,790 Es ist wie der Unterschied zwischen Wind und Wind. 150 00:07:02,790 --> 00:07:05,490 Die Daten sind die gleichen, aber die Art ändern kann, wie wir 151 00:07:05,490 --> 00:07:06,720 interpretieren. 152 00:07:06,720 --> 00:07:10,430 Mein Name ist Jordan Jozwiak diese CS50.