1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN JOZWIAK: Ketik pengecoran, dalam arti yang paling sederhana, adalah 2 00:00:10,270 --> 00:00:13,300 cara untuk mengubah interpretasi komputer dari beberapa data dengan 3 00:00:13,300 --> 00:00:16,560 implisit maupun eksplisit mengubah tipe datanya. 4 00:00:16,560 --> 00:00:19,940 Seperti mengubah int ke float, atau sebaliknya. 5 00:00:19,940 --> 00:00:21,550 Untuk memahami tipe casting, kita perlu 6 00:00:21,550 --> 00:00:22,680 mulai dengan dasar-dasar - 7 00:00:22,680 --> 00:00:24,140 tipe data sendiri. 8 00:00:24,140 --> 00:00:26,960 Dalam bahasa komputer seperti C, semua variabel memiliki beberapa macam 9 00:00:26,960 --> 00:00:29,690 dari tipe data yang menentukan bagaimana komputer, dan juga 10 00:00:29,690 --> 00:00:32,140 pengguna, menafsirkan variabel itu. 11 00:00:32,140 --> 00:00:35,160 Numerik tipe data seperti float, int lama, dan 12 00:00:35,160 --> 00:00:38,110 ganda, semua memiliki karakteristik unik mereka sendiri dan 13 00:00:38,110 --> 00:00:41,370 digunakan untuk menentukan nilai dari berbagai rentang dan presisi. 14 00:00:41,370 --> 00:00:44,800 Tipe casting memungkinkan kita untuk mengambil nomor floating point seperti 15 00:00:44,800 --> 00:00:49,170 3,14 dan mendapatkan bagian sebelum desimal, 3 dalam kasus ini, 16 00:00:49,170 --> 00:00:51,590 dengan casting ke int. 17 00:00:51,590 --> 00:00:53,900 Mari kita mengambil contoh dari bahasa Inggris untuk singkat 18 00:00:53,900 --> 00:00:56,910 meninjau jenis, dan untuk melihat bagaimana tipe casting dapat mengubah 19 00:00:56,910 --> 00:00:59,380 cara kita menafsirkan sepotong data. 20 00:00:59,380 --> 00:01:05,269 Untuk data, mari kita mengambil simbol sini. 21 00:01:05,269 --> 00:01:07,570 Saya hanya mengacu pada garis-garis hati-hati dikonfigurasi sebagai 22 00:01:07,570 --> 00:01:10,100 simbol, tetapi sebagai seseorang yang tahu bahasa Inggris, 23 00:01:10,100 --> 00:01:12,750 Anda segera menyadari bahwa mereka, pada kenyataannya, surat. 24 00:01:12,750 --> 00:01:15,580 Anda implisit memahami tipe data. 25 00:01:15,580 --> 00:01:17,620 Melihat ini string huruf kita bisa melihat dua 26 00:01:17,620 --> 00:01:20,140 kata yang berbeda, masing-masing dengan makna tersendiri. 27 00:01:20,140 --> 00:01:25,530 Ada kata benda, angin, seperti angin bertiup luar. 28 00:01:25,530 --> 00:01:28,280 Dan ada kata kerja, angin, seperti dalam saya perlu 29 00:01:28,280 --> 00:01:31,410 memutar jam analog saya. 30 00:01:31,410 --> 00:01:33,420 Ini adalah contoh yang menarik, karena kita bisa melihat 31 00:01:33,420 --> 00:01:36,270 bagaimana jenis yang kita tetapkan untuk data kami, baik kata benda atau 32 00:01:36,270 --> 00:01:39,080 kata kerja, perubahan bagaimana kita menggunakan data - 33 00:01:39,080 --> 00:01:41,730 sebagai angin kata atau angin. 34 00:01:41,730 --> 00:01:44,100 Meskipun komputer tidak peduli dengan tata bahasa dan bagian 35 00:01:44,100 --> 00:01:47,750 pidato bahasa Inggris, prinsip dasar yang sama berlaku. 36 00:01:47,750 --> 00:01:50,290 Artinya, kita dapat mengubah penafsiran yang tepat 37 00:01:50,290 --> 00:01:53,140 data yang sama disimpan dalam memori hanya dengan casting ke 38 00:01:53,140 --> 00:01:54,576 yang berbeda jenis. 39 00:01:54,576 --> 00:01:57,250 Berikut adalah ukuran dari jenis yang paling umum pada 32-bit 40 00:01:57,250 --> 00:01:58,340 sistem operasi. 41 00:01:58,340 --> 00:02:02,070 Kami memiliki char pada 1, int byte dan mengapung di 4 byte, panjang 42 00:02:02,070 --> 00:02:04,390 panjang dan ganda pada 8 byte. 43 00:02:04,390 --> 00:02:07,670 Karena int membutuhkan 4 byte, itu akan mengambil 32 bit 44 00:02:07,670 --> 00:02:10,060 bila disimpan dalam memori sebagai rangkaian biner 45 00:02:10,060 --> 00:02:11,500 dari nol dan satu. 46 00:02:11,500 --> 00:02:14,020 Selama variabel kita tetap sebagai int jenis, 47 00:02:14,020 --> 00:02:16,740 komputer selalu akan mengkonversi satu dan nol dari 48 00:02:16,740 --> 00:02:19,120 biner ke nomor asli. 49 00:02:19,120 --> 00:02:21,270 Namun, kami secara teoritis bisa melemparkan mereka 32 50 00:02:21,270 --> 00:02:23,510 bit menjadi serangkaian jenis Boolean. 51 00:02:23,510 --> 00:02:26,090 Dan kemudian komputer akan tidak lagi melihat nomor, tapi 52 00:02:26,090 --> 00:02:28,810 bukan koleksi angka satu dan nol. 53 00:02:28,810 --> 00:02:31,570 Kita juga bisa mencoba untuk membaca data sebagai numerik yang berbeda 54 00:02:31,570 --> 00:02:34,660 ketik, atau bahkan sebagai string dari empat karakter. 55 00:02:34,660 --> 00:02:37,820 Ketika berhadapan dengan angka-angka dalam casting, Anda harus mempertimbangkan bagaimana 56 00:02:37,820 --> 00:02:40,470 ketepatan nilai Anda akan terpengaruh. 57 00:02:40,470 --> 00:02:43,240 Perlu diingat bahwa presisi dapat tetap sama, 58 00:02:43,240 --> 00:02:47,150 atau Anda dapat kehilangan presisi, tapi Anda tidak pernah bisa mendapatkan presisi. 59 00:02:47,150 --> 00:02:49,060 Mari kita pergi melalui untuk tiga cara yang paling umum yang Anda dapat 60 00:02:49,060 --> 00:02:50,400 kehilangan presisi. 61 00:02:50,400 --> 00:02:53,060 Casting pelampung ke int akan menyebabkan pemotongan dari segala sesuatu 62 00:02:53,060 --> 00:02:54,900 setelah titik desimal, sehingga kau pergi 63 00:02:54,900 --> 00:02:55,950 dengan seluruh nomor. 64 00:02:55,950 --> 00:03:02,000 Jika kita mengambil x mengambang yang akan sama 3.7, kita dapat melemparkan 65 00:03:02,000 --> 00:03:05,580 ini variabel x ke int hanya dengan menulis int di 66 00:03:05,580 --> 00:03:07,050 kurung. 67 00:03:07,050 --> 00:03:10,010 Setiap kali kita menggunakan istilah ini di sini, kami akan secara efektif 68 00:03:10,010 --> 00:03:12,810 akan menggunakan nilai tiga karena kami telah terpotong 69 00:03:12,810 --> 00:03:14,880 semuanya setelah titik desimal. 70 00:03:14,880 --> 00:03:17,210 Kita juga bisa mengkonversi lama ke int, yang akan 71 00:03:17,210 --> 00:03:20,760 sama menyebabkan hilangnya high-order bit. 72 00:03:20,760 --> 00:03:23,910 Sebuah lama membutuhkan 8 byte, atau 64 bit dalam memori. 73 00:03:23,910 --> 00:03:27,050 Jadi ketika kita melemparkannya ke int yang hanya memiliki 4 byte, atau 32 74 00:03:27,050 --> 00:03:29,820 bit, kita pada dasarnya memenggal semua bit yang 75 00:03:29,820 --> 00:03:32,420 mewakili nilai biner yang lebih tinggi. 76 00:03:32,420 --> 00:03:34,690 Anda juga bisa melemparkan ganda untuk float, yang akan memberikan 77 00:03:34,690 --> 00:03:37,340 Anda float terdekat mungkin untuk ganda tanpa 78 00:03:37,340 --> 00:03:39,100 tentu pembulatan. 79 00:03:39,100 --> 00:03:41,840 Serupa dengan lama kami untuk konversi int, kerugian di 80 00:03:41,840 --> 00:03:44,890 presisi karena ganda mengandung lebih banyak data. 81 00:03:44,890 --> 00:03:47,910 Sebuah ganda akan memungkinkan Anda untuk menyimpan 53 bit signifikan, 82 00:03:47,910 --> 00:03:50,650 sekitar 16 digit signifikan. 83 00:03:50,650 --> 00:03:53,050 Sedangkan pelampung hanya akan memungkinkan Anda untuk menyimpan 24 84 00:03:53,050 --> 00:03:56,235 signifikan bit, sekitar tujuh digit signifikan. 85 00:03:56,235 --> 00:03:58,700 Dalam dua kasus terakhir ini, mungkin akan membantu untuk berpikir 86 00:03:58,700 --> 00:04:01,200 ketik pengecoran sebagai mengubah ukuran foto. 87 00:04:01,200 --> 00:04:03,860 Ketika Anda pergi dari ukuran besar ke ukuran kecil, Anda tidak dapat melihat 88 00:04:03,860 --> 00:04:05,600 hal yang jelas karena Anda kehilangan data 89 00:04:05,600 --> 00:04:07,530 dalam bentuk piksel. 90 00:04:07,530 --> 00:04:09,270 Tipe casting juga dapat menyebabkan masalah ketika kita 91 00:04:09,270 --> 00:04:11,050 dilemparkan ints untuk mengapung. 92 00:04:11,050 --> 00:04:13,920 Karena mengapung pada mesin 32-bit hanya memiliki 24 93 00:04:13,920 --> 00:04:16,959 bit signifikan, mereka tidak dapat secara akurat mewakili nilai-nilai 94 00:04:16,959 --> 00:04:22,750 lebih dari 2 dengan kekuatan 24, atau 16.777.217. 95 00:04:22,750 --> 00:04:25,540 Sekarang mari kita bicara tentang pengecoran eksplisit dan implisit. 96 00:04:25,540 --> 00:04:28,000 Pengecoran eksplisit adalah ketika kita menulis jenis dalam tanda kurung 97 00:04:28,000 --> 00:04:29,430 sebelum nama variabel. 98 00:04:29,430 --> 00:04:33,100 Sebagai contoh, sebelum kita menulis int dalam tanda kurung sebelum kami 99 00:04:33,100 --> 00:04:35,640 mengapung variabel x. 100 00:04:35,640 --> 00:04:37,200 Dengan cara ini, kita mendapatkan nilai int, yang 101 00:04:37,200 --> 00:04:38,593 terpotong nilai 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Casting implisit adalah ketika compiler secara otomatis berubah 104 00:04:42,970 --> 00:04:46,340 jenis mirip dengan jenis super, atau melakukan semacam lain 105 00:04:46,340 --> 00:04:48,310 pengecoran tanpa mengharuskan pengguna untuk menulis 106 00:04:48,310 --> 00:04:49,720 kode tambahan. 107 00:04:49,720 --> 00:04:53,550 Sebagai contoh, ketika kita menambahkan 5 dan 1,1, nilai-nilai kita sudah memiliki 108 00:04:53,550 --> 00:04:55,680 tipe yang terkait dengan mereka. 109 00:04:55,680 --> 00:04:59,480 The 5 adalah int, sedangkan 1,1 adalah pelampung. 110 00:04:59,480 --> 00:05:02,390 Untuk menambahkannya, komputer gips 5 ke pelampung, 111 00:05:02,390 --> 00:05:04,530 yang akan menjadi hal yang sama seperti menulis 5.0 dalam 112 00:05:04,530 --> 00:05:06,476 tempat pertama. 113 00:05:06,476 --> 00:05:13,210 Tapi ini cara kita katakan mengambang 5, atau 5.0, ditambah apa yang sudah 114 00:05:13,210 --> 00:05:16,960 float, 1.1, dan dari sana kita benar-benar dapat menambahkan 115 00:05:16,960 --> 00:05:18,640 nilai-nilai dan mendapatkan nilai 6,1. 116 00:05:21,170 --> 00:05:23,500 Casting implisit juga memungkinkan kita untuk menetapkan variabel 117 00:05:23,500 --> 00:05:25,590 yang berbeda jenis satu sama lain. 118 00:05:25,590 --> 00:05:28,110 Kami selalu dapat menetapkan jenis kurang tepat menjadi lebih 119 00:05:28,110 --> 00:05:29,250 tepat satu. 120 00:05:29,250 --> 00:05:37,060 Sebagai contoh, jika kita memiliki x ganda, dan y int - 121 00:05:37,060 --> 00:05:40,120 dan ini bisa memiliki nilai-nilai yang kita atur ke - 122 00:05:40,120 --> 00:05:43,560 kita dapat mengatakan x sama dengan y. 123 00:05:43,560 --> 00:05:46,340 Karena ganda memiliki presisi lebih dari int, jadi kami 124 00:05:46,340 --> 00:05:48,380 tidak akan kehilangan informasi apapun. 125 00:05:48,380 --> 00:05:50,420 Di sisi lain, hal itu belum tentu benar untuk mengatakan 126 00:05:50,420 --> 00:05:54,060 y sama dengan x, karena dua kali lipat mungkin memiliki nilai lebih besar dari 127 00:05:54,060 --> 00:05:55,220 integer. 128 00:05:55,220 --> 00:05:57,420 Dan sehingga integer mungkin tidak mampu menahan semua 129 00:05:57,420 --> 00:05:59,560 informasi yang tersimpan di ganda. 130 00:05:59,560 --> 00:06:02,610 Casting implisit juga digunakan dalam operator perbandingan seperti 131 00:06:02,610 --> 00:06:06,410 lebih besar dari, kurang dari, atau operator kesetaraan. 132 00:06:06,410 --> 00:06:13,050 Dengan cara ini kita dapat mengatakan jika 5,1 lebih besar dari 5, dan kami mendapatkan 133 00:06:13,050 --> 00:06:14,750 hasil yang benar. 134 00:06:14,750 --> 00:06:18,470 Karena 5 adalah int, tapi itu akan dilemparkan ke pelampung untuk 135 00:06:18,470 --> 00:06:22,090 dibandingkan dengan float 5.1, kita akan mengatakan 5.1 adalah 136 00:06:22,090 --> 00:06:24,550 lebih besar dari 5,0. 137 00:06:24,550 --> 00:06:31,320 Hal yang sama berlaku dengan mengatakan jika 2,0 sama sama 2. 138 00:06:31,320 --> 00:06:34,190 Kita juga akan mendapatkan yang benar, karena komputer akan melemparkan 139 00:06:34,190 --> 00:06:39,750 integer 2 mengapung dan kemudian mengatakan 2,0 sama sama 2.0, 140 00:06:39,750 --> 00:06:41,660 ini benar. 141 00:06:41,660 --> 00:06:44,180 Jangan lupa bahwa kita juga bisa melemparkan antara ints dan karakter, 142 00:06:44,180 --> 00:06:46,350 atau nilai-nilai ASCII. 143 00:06:46,350 --> 00:06:49,690 Karakter juga perlu dikurangi menjadi biner, yang mengapa Anda 144 00:06:49,690 --> 00:06:51,920 dapat dengan mudah mengkonversi antara karakter dan masing-masing 145 00:06:51,920 --> 00:06:53,260 ASCII nilai. 146 00:06:53,260 --> 00:06:56,180 Untuk mempelajari lebih lanjut tentang hal ini, check out video kami pada ASCII. 147 00:06:56,180 --> 00:06:58,080 Bila Anda luangkan waktu untuk berpikir tentang bagaimana data yang disimpan, 148 00:06:58,080 --> 00:06:59,990 ia mulai membuat banyak akal. 149 00:06:59,990 --> 00:07:02,790 Ini seperti perbedaan antara angin dan angin. 150 00:07:02,790 --> 00:07:05,490 Data adalah sama, namun jenisnya dapat mengubah bagaimana kita 151 00:07:05,490 --> 00:07:06,720 menafsirkannya. 152 00:07:06,720 --> 00:07:10,430 Nama saya Jordan Jozwiak, cs50 ini.