1 00:00:07,632 --> 00:00:10,270 [Powered by Google Translate] JORDAN JOZWIAK Loại đúc, theo nghĩa đơn giản nhất, là một 2 00:00:10,270 --> 00:00:13,300 cách để làm thay đổi giải thích của một số dữ liệu của máy tính bằng cách 3 00:00:13,300 --> 00:00:16,560 ngầm hay rõ ràng thay đổi kiểu dữ liệu của nó. 4 00:00:16,560 --> 00:00:19,940 Chẳng hạn như thay đổi một int float, hoặc ngược lại. 5 00:00:19,940 --> 00:00:21,550 Để hiểu đúc loại, chúng ta cần 6 00:00:21,550 --> 00:00:22,680 bắt đầu với những điều cơ bản - 7 00:00:22,680 --> 00:00:24,140 kiểu dữ liệu bản thân mình. 8 00:00:24,140 --> 00:00:26,960 Trong các ngôn ngữ máy tính như C, tất cả các biến có một số loại 9 00:00:26,960 --> 00:00:29,690 các kiểu dữ liệu để xác định cách mà máy tính, và tương tự 10 00:00:29,690 --> 00:00:32,140 người sử dụng, diễn giải biến đó. 11 00:00:32,140 --> 00:00:35,160 Kiểu dữ liệu số như float, int, lâu dài và 12 00:00:35,160 --> 00:00:38,110 đôi, tất cả đều có đặc điểm riêng biệt và 13 00:00:38,110 --> 00:00:41,370 được sử dụng để xác định giá trị của các phạm vi và độ chính xác khác nhau. 14 00:00:41,370 --> 00:00:44,800 Loại đúc cho phép chúng tôi để có một số điểm nổi như 15 00:00:44,800 --> 00:00:49,170 3,14 và nhận được một phần trước khi thập phân, 3 trong trường hợp này, 16 00:00:49,170 --> 00:00:51,590 bằng cách đúc nó đến một int. 17 00:00:51,590 --> 00:00:53,900 Hãy lấy một ví dụ từ ngôn ngữ tiếng Anh cho ngắn gọn 18 00:00:53,900 --> 00:00:56,910 xem xét các loại, và để xem loại đúc như thế nào có thể thay đổi 19 00:00:56,910 --> 00:00:59,380 cách chúng ta hiểu một phần dữ liệu. 20 00:00:59,380 --> 00:01:05,269 Đối với dữ liệu, chúng ta hãy xem các biểu tượng ở đây. 21 00:01:05,269 --> 00:01:07,570 Tôi chỉ đề cập đến những dòng này cấu hình như 22 00:01:07,570 --> 00:01:10,100 biểu tượng, nhưng là những người biết tiếng Anh, 23 00:01:10,100 --> 00:01:12,750 bạn ngay lập tức nhận ra rằng họ là, trên thực tế, thư từ. 24 00:01:12,750 --> 00:01:15,580 Bạn mặc nhiên hiểu rằng kiểu dữ liệu. 25 00:01:15,580 --> 00:01:17,620 Nhìn vào chuỗi kí tự này, chúng ta có thể thấy hai 26 00:01:17,620 --> 00:01:20,140 Nói cách khác nhau, đều có ý nghĩa riêng của nó. 27 00:01:20,140 --> 00:01:25,530 Có danh từ, gió, như gió thổi bên ngoài. 28 00:01:25,530 --> 00:01:28,280 Và có động từ, gió, như trong tôi cần phải 29 00:01:28,280 --> 00:01:31,410 gió đồng hồ tương tự của tôi. 30 00:01:31,410 --> 00:01:33,420 Đây là một ví dụ thú vị, bởi vì chúng ta có thể thấy 31 00:01:33,420 --> 00:01:36,270 làm thế nào các loại mà chúng ta gán cho dữ liệu của chúng tôi, cho dù danh từ hoặc 32 00:01:36,270 --> 00:01:39,080 động từ, thay đổi cách chúng tôi sử dụng dữ liệu 33 00:01:39,080 --> 00:01:41,730 như gió từ hoặc gió. 34 00:01:41,730 --> 00:01:44,100 Mặc dù một máy tính không quan tâm về ngữ pháp và các bộ phận 35 00:01:44,100 --> 00:01:47,750 ngôn luận tiếng Anh, cùng một nguyên tắc cơ bản được áp dụng. 36 00:01:47,750 --> 00:01:50,290 Đó là, chúng ta có thể thay đổi việc giải thích chính xác 37 00:01:50,290 --> 00:01:53,140 cùng một dữ liệu được lưu trữ trong bộ nhớ của chỉ đơn giản là đúc nó vào một 38 00:01:53,140 --> 00:01:54,576 kiểu khác nhau. 39 00:01:54,576 --> 00:01:57,250 Dưới đây là các kích thước của các loại phổ biến nhất trên 32-bit 40 00:01:57,250 --> 00:01:58,340 hệ điều hành. 41 00:01:58,340 --> 00:02:02,070 Chúng tôi có một char tại 1 int, byte và float 4 byte, một thời gian dài 42 00:02:02,070 --> 00:02:04,390 dài và đôi lúc 8 byte. 43 00:02:04,390 --> 00:02:07,670 Bởi vì một int chiếm 4 byte, nó sẽ mất 32 bit 44 00:02:07,670 --> 00:02:10,060 khi nó được lưu trữ trong bộ nhớ như là một chuỗi nhị phân 45 00:02:10,060 --> 00:02:11,500 số không và những người thân. 46 00:02:11,500 --> 00:02:14,020 Như là một biến của chúng tôi vẫn còn là một kiểu int, 47 00:02:14,020 --> 00:02:16,740 máy tính sẽ luôn luôn chuyển đổi những những người thân và số không 48 00:02:16,740 --> 00:02:19,120 nhị phân thành số lượng ban đầu. 49 00:02:19,120 --> 00:02:21,270 Tuy nhiên, chúng tôi về mặt lý thuyết có thể cast những 32 50 00:02:21,270 --> 00:02:23,510 bit vào một loạt các loại Boolean. 51 00:02:23,510 --> 00:02:26,090 Và sau đó máy tính sẽ không còn thấy một số, nhưng 52 00:02:26,090 --> 00:02:28,810 thay vào đó là một bộ sưu tập các số không và những người thân. 53 00:02:28,810 --> 00:02:31,570 Chúng tôi cũng có thể thử để đọc dữ liệu như một số khác nhau 54 00:02:31,570 --> 00:02:34,660 đánh máy, hoặc thậm chí như là một chuỗi của bốn nhân vật. 55 00:02:34,660 --> 00:02:37,820 Khi giao dịch với số đúc, bạn phải xem xét làm thế nào 56 00:02:37,820 --> 00:02:40,470 độ chính xác của giá trị của bạn sẽ bị ảnh hưởng. 57 00:02:40,470 --> 00:02:43,240 Hãy nhớ rằng độ chính xác có thể ở cùng, 58 00:02:43,240 --> 00:02:47,150 hoặc bạn có thể mất độ chính xác, nhưng bạn không bao giờ có thể đạt được độ chính xác. 59 00:02:47,150 --> 00:02:49,060 Hãy đi qua ba cách phổ biến nhất mà bạn có thể 60 00:02:49,060 --> 00:02:50,400 mất độ chính xác. 61 00:02:50,400 --> 00:02:53,060 Đúc một phao để int sẽ gây ra cắt đứt tất cả mọi thứ 62 00:02:53,060 --> 00:02:54,900 sau khi các điểm thập phân, do đó, bạn đang trái 63 00:02:54,900 --> 00:02:55,950 với các số nguyên. 64 00:02:55,950 --> 00:03:02,000 Nếu chúng ta lấy x float sẽ bằng 3,7, chúng ta có thể bỏ 65 00:03:02,000 --> 00:03:05,580 biến x này đến một int chỉ đơn giản bằng cách viết int trong 66 00:03:05,580 --> 00:03:07,050 dấu ngoặc đơn. 67 00:03:07,050 --> 00:03:10,010 Bất cứ khi nào chúng tôi sử dụng thuật ngữ này ngay tại đây, chúng tôi sẽ có hiệu quả 68 00:03:10,010 --> 00:03:12,810 được sử dụng giá trị bởi vì chúng tôi đã cắt ngắn 69 00:03:12,810 --> 00:03:14,880 tất cả mọi thứ sau dấu thập phân. 70 00:03:14,880 --> 00:03:17,210 Chúng tôi cũng có thể chuyển đổi một lâu dài đến một int, mà sẽ 71 00:03:17,210 --> 00:03:20,760 tương tự như vậy dẫn đến mất trật tự-bit. 72 00:03:20,760 --> 00:03:23,910 Dài chiếm 8 byte, hoặc 64 bit trong bộ nhớ. 73 00:03:23,910 --> 00:03:27,050 Vì vậy, khi chúng tôi bỏ nó vào một int mà chỉ có 4 byte, hoặc 32 74 00:03:27,050 --> 00:03:29,820 bit, chúng ta cơ bản là cắt bỏ tất cả các bit 75 00:03:29,820 --> 00:03:32,420 đại diện cho các giá trị nhị phân cao hơn. 76 00:03:32,420 --> 00:03:34,690 Bạn cũng có thể đúc một đôi float, mà sẽ cung cấp 77 00:03:34,690 --> 00:03:37,340 bạn nổi gần nhất có thể gấp đôi mà không cần 78 00:03:37,340 --> 00:03:39,100 nhất thiết phải làm tròn nó. 79 00:03:39,100 --> 00:03:41,840 Tương tự như lâu dài của chúng tôi để chuyển đổi int, sự mất mát 80 00:03:41,840 --> 00:03:44,890 chính xác là bởi vì một đôi chứa nhiều dữ liệu hơn. 81 00:03:44,890 --> 00:03:47,910 Một đôi sẽ cho phép bạn lưu trữ 53 bit có ý nghĩa, 82 00:03:47,910 --> 00:03:50,650 khoảng 16 chữ số đáng kể. 83 00:03:50,650 --> 00:03:53,050 Trong khi đó, một phao sẽ chỉ cho phép bạn lưu trữ 24 84 00:03:53,050 --> 00:03:56,235 bit đáng kể, khoảng bảy chữ số đáng kể. 85 00:03:56,235 --> 00:03:58,700 Trong hai trường hợp, nó có thể hữu ích để suy nghĩ của 86 00:03:58,700 --> 00:04:01,200 loại đúc như thay đổi kích thước ảnh. 87 00:04:01,200 --> 00:04:03,860 Khi bạn đi từ một kích thước lớn đến một kích thước nhỏ, bạn không thể nhìn thấy 88 00:04:03,860 --> 00:04:05,600 những thứ như là rõ ràng bởi vì bạn bị mất dữ liệu 89 00:04:05,600 --> 00:04:07,530 trong các hình thức của các điểm ảnh. 90 00:04:07,530 --> 00:04:09,270 Loại đúc cũng có thể gây rắc rối khi chúng tôi 91 00:04:09,270 --> 00:04:11,050 đúc ints để nổi. 92 00:04:11,050 --> 00:04:13,920 Kể từ khi nổi trên một máy tính 32-bit chỉ có 24 93 00:04:13,920 --> 00:04:16,959 bit có ý nghĩa, họ có thể không chính xác đại diện cho các giá trị 94 00:04:16,959 --> 00:04:22,750 hơn 2 sức mạnh của 24, hoặc 16.777.217. 95 00:04:22,750 --> 00:04:25,540 Bây giờ hãy nói về đúc ngầm và rõ ràng. 96 00:04:25,540 --> 00:04:28,000 Đúc rõ ràng là khi chúng tôi viết trong ngoặc đơn 97 00:04:28,000 --> 00:04:29,430 trước khi một tên biến. 98 00:04:29,430 --> 00:04:33,100 Ví dụ, trước khi chúng tôi đã viết int trong ngoặc đơn trước của chúng tôi 99 00:04:33,100 --> 00:04:35,640 nổi biến x. 100 00:04:35,640 --> 00:04:37,200 Bằng cách này, chúng tôi nhận được giá trị int, 101 00:04:37,200 --> 00:04:38,593 cắt ngắn giá trị của 3,7 - 102 00:04:38,593 --> 00:04:40,370 3. 103 00:04:40,370 --> 00:04:42,970 Đúc Implicit là khi trình biên dịch tự động thay đổi 104 00:04:42,970 --> 00:04:46,340 tương tự như các loại để một loại siêu, hoặc thực hiện một số loại khác của 105 00:04:46,340 --> 00:04:48,310 đúc mà không yêu cầu người sử dụng để viết 106 00:04:48,310 --> 00:04:49,720 bất kỳ mã bổ sung. 107 00:04:49,720 --> 00:04:53,550 Ví dụ, khi chúng tôi thêm 5 và 1.1, giá trị của chúng tôi đã có 108 00:04:53,550 --> 00:04:55,680 các loại liên kết với chúng. 109 00:04:55,680 --> 00:04:59,480 5 là một int, trong khi đó 1,1 là một phao. 110 00:04:59,480 --> 00:05:02,390 Để thêm chúng vào, máy tính phôi 5 vào một phao, 111 00:05:02,390 --> 00:05:04,530 trong đó đã có được những điều tương tự như văn bản 5,0 trong 112 00:05:04,530 --> 00:05:06,476 đầu tiên diễn ra. 113 00:05:06,476 --> 00:05:13,210 Nhưng cách này chúng ta nói float 5, 5,0, cộng với những gì đã 114 00:05:13,210 --> 00:05:16,960 một phao, 1,1, và từ đó chúng tôi thực sự có thể thêm các 115 00:05:16,960 --> 00:05:18,640 giá trị và có được giá trị 6,1. 116 00:05:21,170 --> 00:05:23,500 Implicit đúc cũng cho phép chúng ta gán biến số 117 00:05:23,500 --> 00:05:25,590 các loại khác nhau với nhau. 118 00:05:25,590 --> 00:05:28,110 Chúng tôi luôn luôn có thể chỉ định một loại ít chính xác vào một 119 00:05:28,110 --> 00:05:29,250 chính xác một trong. 120 00:05:29,250 --> 00:05:37,060 Ví dụ, nếu chúng ta có x gấp đôi, và y một int - 121 00:05:37,060 --> 00:05:40,120 và những điều này có thể có bất kỳ giá trị mà chúng ta đặt chúng vào - 122 00:05:40,120 --> 00:05:43,560 chúng ta có thể nói x = y. 123 00:05:43,560 --> 00:05:46,340 Bởi vì đôi có độ chính xác hơn một int, vì vậy chúng tôi 124 00:05:46,340 --> 00:05:48,380 sẽ không mất bất kỳ thông tin nào. 125 00:05:48,380 --> 00:05:50,420 Mặt khác, nó sẽ không nhất thiết phải chính xác để nói 126 00:05:50,420 --> 00:05:54,060 y bằng x, bởi vì các đôi có thể có một giá trị lớn hơn 127 00:05:54,060 --> 00:05:55,220 các số nguyên. 128 00:05:55,220 --> 00:05:57,420 Và do đó, các số nguyên có thể không được có thể giữ tất cả các 129 00:05:57,420 --> 00:05:59,560 thông tin được lưu trữ trong gấp đôi. 130 00:05:59,560 --> 00:06:02,610 Đúc ngầm cũng được sử dụng trong các toán tử so sánh như 131 00:06:02,610 --> 00:06:06,410 lớn hơn, nhỏ hơn, hoặc khai thác sự bình đẳng. 132 00:06:06,410 --> 00:06:13,050 Bằng cách này, chúng ta có thể nói nếu 5,1 là lớn hơn 5, và chúng tôi nhận được 133 00:06:13,050 --> 00:06:14,750 kết quả đúng. 134 00:06:14,750 --> 00:06:18,470 Bởi vì 5 là một int, nhưng nó sẽ được đúc vào một phao để 135 00:06:18,470 --> 00:06:22,090 được so sánh với các phao 5.1, chúng tôi muốn nói 5,1 là 136 00:06:22,090 --> 00:06:24,550 lớn hơn 5,0. 137 00:06:24,550 --> 00:06:31,320 Điều này cũng đúng với nói nếu 2,0 bằng bằng 2. 138 00:06:31,320 --> 00:06:34,190 Chúng tôi cũng muốn nhận được thật sự, bởi vì máy tính sẽ bỏ 139 00:06:34,190 --> 00:06:39,750 số nguyên 2 nổi và sau đó nói 2,0 bằng bằng 2,0, 140 00:06:39,750 --> 00:06:41,660 điều này là đúng. 141 00:06:41,660 --> 00:06:44,180 Đừng quên rằng chúng ta cũng có thể cast giữa ints và ký tự, 142 00:06:44,180 --> 00:06:46,350 ASCII giá trị. 143 00:06:46,350 --> 00:06:49,690 Ký tự cũng cần được giảm xuống để nhị phân, đó là lý do tại sao bạn 144 00:06:49,690 --> 00:06:51,920 có thể dễ dàng chuyển đổi giữa các ký tự tương ứng của họ 145 00:06:51,920 --> 00:06:53,260 ASCII giá trị. 146 00:06:53,260 --> 00:06:56,180 Để tìm hiểu thêm về điều này, hãy kiểm tra video của chúng tôi trên ASCII. 147 00:06:56,180 --> 00:06:58,080 Khi bạn phải mất một chút thời gian để suy nghĩ về cách dữ liệu được lưu trữ, 148 00:06:58,080 --> 00:06:59,990 nó bắt đầu làm cho rất nhiều ý nghĩa. 149 00:06:59,990 --> 00:07:02,790 Nó giống như sự khác biệt giữa gió và gió. 150 00:07:02,790 --> 00:07:05,490 Dữ liệu là như nhau, nhưng các loại có thể thay đổi cách chúng tôi 151 00:07:05,490 --> 00:07:06,720 giải thích nó. 152 00:07:06,720 --> 00:07:10,430 Tên tôi là Jordan Jozwiak này CS50.