1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Tuần 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Đại học Harvard 3 00:00:04,730 --> 00:00:07,490 [Đây là CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Được rồi. Chào mừng trở lại. Đây là CS50, và đây là sự bắt đầu của tuần 7. 5 00:00:12,280 --> 00:00:14,690 Một vài thông báo nhỏ: 6 00:00:14,690 --> 00:00:18,150 Pset5 bây giờ là trong tiến trình, hoặc sẽ sớm được, 7 00:00:18,150 --> 00:00:21,590 và cho tôi nói, khá trung thực, điều này không có xu hướng là một trong nhiều thách thức 8 00:00:21,590 --> 00:00:24,460 của bộ vấn đề của khóa học, vì vậy hãy để tôi đề cập đến điều này ngay bây giờ 9 00:00:24,460 --> 00:00:28,190 để tuần này hơn bao giờ hết bạn không đợi cho đến khi, nói, thứ tư đêm 10 00:00:28,190 --> 00:00:29,920 hoặc đêm thứ năm để bổ nhào. 11 00:00:29,920 --> 00:00:32,369 Đây chắc chắn là một pset thú vị. Chúng tôi nghĩ rằng nó là thú vị. 12 00:00:32,369 --> 00:00:36,110 Nếu bạn thực sự có được nó hoàn toàn chính xác và sau đó có thể thách thức Hội đồng quản trị được gọi là Big, 13 00:00:36,110 --> 00:00:39,830 bạn sẽ có một cơ hội để phù hợp với trí thông minh với một số nhân viên của khóa học 14 00:00:39,830 --> 00:00:41,620 và một số bạn cùng lớp của bạn. 15 00:00:41,620 --> 00:00:44,670 Ban Big là một khi bạn có làm việc kiểm tra chính tả của bạn, 16 00:00:44,670 --> 00:00:48,860 bạn sẽ có thể đi đến cs50.net sau khi chạy một lệnh, 17 00:00:48,860 --> 00:00:52,430 hoàn toàn chọn tham gia, và sau đó là số lượng thời gian và số lượng bộ nhớ RAM và nhiều hơn nữa 18 00:00:52,430 --> 00:00:56,130 mà bạn đã sử dụng trong việc thực hiện của bạn sẽ được trưng bày ở đây trên trang chủ của khóa học. 19 00:00:56,130 --> 00:00:59,740 Bạn sẽ nhận thấy rằng một bó toàn bộ những người ở đây được liệt kê như là nhân viên 20 00:00:59,740 --> 00:01:04,220 kể từ cuối tuần qua, các nhân viên nghĩ rằng nó sẽ được vui vẻ để cố gắng vượt qua mỗi khác. 21 00:01:04,220 --> 00:01:07,390 Vì vậy, nhận ra rằng mục tiêu ở đây không phải là để vượt qua các nhân viên. 22 00:01:07,390 --> 00:01:09,790 Ngay cả khi tôi chỉ ở đây ở vị trí thứ 13. 23 00:01:09,790 --> 00:01:13,790 Hoàn toàn chọn tham gia, nhưng nó là một cơ hội để xem làm thế nào ít RAM 24 00:01:13,790 --> 00:01:16,790 và làm thế nào vài giây CPU bạn có thể sử dụng vis-a-vis một số bạn cùng lớp của bạn. 25 00:01:16,790 --> 00:01:20,540 >> Và tôi sẽ thừa nhận rằng Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 hiện đang ở vị trí số 1 là một trong TFS, 27 00:01:23,750 --> 00:01:28,120 đây là một thực hiện mà chúng ta gọi là không thể 28 00:01:28,120 --> 00:01:32,700 cho rằng ông sử dụng gần như 0 RAM và gần như 0 giây để tải. 29 00:01:32,700 --> 00:01:35,670 Vì vậy, chúng tôi sẽ chăm sóc của Kevin ẩn. [Cười] 30 00:01:35,670 --> 00:01:40,950 Có kỹ năng nhất định mà Kevin được đưa vào thử nghiệm ở đây. 31 00:01:40,950 --> 00:01:45,280 Một trong những điều chúng tôi nghĩ rằng chúng tôi muốn làm là quá CS50x là một tuần trong tiến trình, 32 00:01:45,280 --> 00:01:49,520 và các bạn sẽ là một phần của thí nghiệm này là những học sinh. 33 00:01:49,520 --> 00:01:53,720 Chúng tôi đã yêu cầu họ như một phần của pset0 của họ, tương tự như trình một dự án Scratch 34 00:01:53,720 --> 00:01:58,280 quan tâm đến họ - một trò chơi, một mảnh tương tác của nghệ thuật, một hình ảnh động, hoặc các loại tương tự - 35 00:01:58,280 --> 00:02:03,700 video 1 - 2-phút, nếu họ muốn nói với thế giới và những người mà họ thực sự đang có. 36 00:02:03,700 --> 00:02:06,780 Tôi nghĩ rằng tôi muốn chia sẻ với bạn chỉ là một vài đoạn video đã được đệ trình cho đến nay 37 00:02:06,780 --> 00:02:10,759 bởi vì đối với chúng tôi trên các nhân viên ít nhất nó thực sự là thú vị 38 00:02:10,759 --> 00:02:14,220 và cảm hứng cho người xem những người này từ tất cả các nơi trên thế giới - các quốc gia trên toàn thế giới - 39 00:02:14,220 --> 00:02:18,160 điều chỉnh, của tất cả mọi thứ, một khóa học khoa học máy tính trên Internet, 40 00:02:18,160 --> 00:02:20,410 cho dù đó là bởi vì họ muốn tiếp tục nghiên cứu của riêng mình, 41 00:02:20,410 --> 00:02:22,300 họ muốn đưa sự nghiệp của mình theo một hướng mới, 42 00:02:22,300 --> 00:02:24,390 họ muốn để điền vào những khoảng trống trong kiến ​​thức của mình, 43 00:02:24,390 --> 00:02:27,190 vì vậy một số trong những lý do mà các bạn có lẽ đã ở đây. 44 00:02:27,190 --> 00:02:31,090 >> Vì vậy, tôi cung cấp cho bạn 1 học sinh như vậy ở đây. Bạn có thể tăng âm lượng chỉ là một chút. 45 00:02:31,090 --> 00:02:35,520 Đây là một trong những sinh viên của chúng tôi đệ trình 1-phút. 46 00:02:35,520 --> 00:02:40,380 Xin chào, thế giới. Tôi là một sinh viên kỹ thuật công nghiệp ở Malaga, Tây Ban Nha. 47 00:02:40,380 --> 00:02:45,840 Tôi rất phấn khởi về khóa học trực tuyến này bởi vì tôi yêu khoa học máy tính, tôi thực sự, 48 00:02:45,840 --> 00:02:48,880 và tôi thực sự đánh giá cao mà tôi nhận được để khám phá nó. 49 00:02:48,880 --> 00:02:51,940 Và thực tế là tôi có thể tìm hiểu tất cả các bạn làm 50 00:02:51,940 --> 00:02:57,040 nhưng thay vì ở Harvard tôi ở Malaga, làm thế nào tuyệt vời như vậy? 51 00:02:57,040 --> 00:03:02,040 Vâng, tôi Fernando, và điều này là CS50. Xem các bạn. 52 00:03:02,040 --> 00:03:07,100 [Cười] Một clip chúng tôi đặc biệt thích, bạn sẽ thấy rằng tiếng Anh của quý ông này không phải là quá mạnh. 53 00:03:07,100 --> 00:03:11,520 Có vẻ như ông đã có máy tính dịch, do đó, bản thân các bản dịch là một chút không hoàn hảo, 54 00:03:11,520 --> 00:03:15,790 nhưng đây là một trong những mục yêu thích của chúng tôi vậy, đến nay cũng. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Xin chào, thế giới. [Nói bằng tiếng Nhật] 57 00:03:32,370 --> 00:03:39,830 [Tôi có để chào đón bằng tiếng Nhật vì tiếng Anh của tôi rất không đáng tin cậy.] 58 00:03:39,830 --> 00:03:45,380 [Tôi đã đưa ra thông điệp cho bạn từ thành phố Gifu, Nhật Bản.] 59 00:03:45,380 --> 00:03:49,820 [Tôi có thể là một học sinh lần đầu tiên trong 20 năm, như có thể thấy.] 60 00:03:49,820 --> 00:03:54,640 [Tôi rất biết ơn Đại học Harvard, người đã cho tôi cơ hội này và EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf là một cây đàn guitar và điều yêu thích của tôi chạy.] [Cười] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 Tại sao bạn nghĩ rằng tôi đã cố gắng tham dự một cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Đại học Harvard, là khao khát của tôi.] 65 00:04:14,990 --> 00:04:19,740 [Đặc biệt là nếu tôi xa sự hiện diện sống ở Nhật Bản.] 66 00:04:19,740 --> 00:04:26,680 [Tôi muốn thử ngay lập tức biết được sự tồn tại của EDX khi nào.] 67 00:04:26,680 --> 00:04:32,500 Anh có nghĩ vậy không bạn không liên quan đến tuổi học I.] 68 00:04:32,500 --> 00:04:38,350 [CS50 là khao khát của tôi. Tên tôi là Kazu, và đây là CS50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [tiếng vỗ tay và cổ vũ] 70 00:04:43,090 --> 00:04:49,220 Một yêu thích của chúng ta là này trình ở đây từ một ai đó. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan Google nó nếu bạn không quen với meme này. 72 00:04:55,380 --> 00:05:01,480 >> Và rồi cuối cùng, một vài người khác đã đăng rằng có thể giành chiến thắng trong giải thưởng đáng yêu. 73 00:05:01,480 --> 00:05:06,820 [Sinh viên] Aww! >> [Malan] Chúng tôi sẽ phải để lắng nghe. Điều này là ngắn, do đó, lắng nghe. 74 00:05:08,580 --> 00:05:11,150 [Nữ loa] Tên của bạn là gì? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Nữ loa] Đây là gì? >> [Cười khúc khích] CS50. [Cười] 76 00:05:16,120 --> 00:05:19,510 Malan Ông đã làm 2 mất, mặc dù. 77 00:05:19,510 --> 00:05:22,240 Ở đây chúng tôi đi, người cuối cùng. 78 00:05:23,030 --> 00:05:26,980 Tên tôi là Louie, và điều này là CS50. 79 00:05:26,980 --> 00:05:30,250 [Cười] Điều này sau đó là CS50x. 80 00:05:30,250 --> 00:05:33,230 Xin cảm ơn đến tất cả những người bạn của trong khi đi theo ở nhà 81 00:05:33,230 --> 00:05:35,620 đã được dự phần cho đến nay. 82 00:05:35,620 --> 00:05:39,510 Hôm nay chúng ta kết thúc cuộc thảo luận của chúng ta về cấu trúc dữ liệu, 83 00:05:39,510 --> 00:05:41,160 ít nhất là một số cơ bản nhất, 84 00:05:41,160 --> 00:05:44,760 và sau đó chúng tôi tiếp tục cuộc trò chuyện của chúng tôi về HTML và lập trình web. 85 00:05:44,760 --> 00:05:48,520 Thật vậy, chúng tôi đã dành quá khứ một số 7 tuần xem xét các nguyên tắc cơ bản của chương trình - 86 00:05:48,520 --> 00:05:50,450 thuật toán, cấu trúc dữ liệu, và như thế - 87 00:05:50,450 --> 00:05:53,050 và C, như bạn có thể đã có kinh nghiệm vậy, đến nay, 88 00:05:53,050 --> 00:05:57,060 không nhất thiết phải truy cập nhiều nhất của các ngôn ngữ 89 00:05:57,060 --> 00:05:59,090 để thực hiện một số ý tưởng. 90 00:05:59,090 --> 00:06:01,880 Và như vậy bắt đầu từ tuần này và tuần sau và sau đó sau đây, 91 00:06:01,880 --> 00:06:07,110 cuối cùng chúng ta sẽ có thể chuyển đổi từ C, thường được gọi là một ngôn ngữ khá ở mức độ thấp, 92 00:06:07,110 --> 00:06:11,190 thứ cấp cao hơn, trong đó PHP, JavaScript, và như thế, 93 00:06:11,190 --> 00:06:14,850 mà chúng ta thấy sẽ rút ra những bài học mà chúng tôi đã học được trong vài tuần qua, 94 00:06:14,850 --> 00:06:19,430 nhưng bạn sẽ thấy rằng tuyên bố những thứ như mảng và bảng băm và tìm kiếm và phân loại 95 00:06:19,430 --> 00:06:23,370 trở nên dễ dàng hơn nhiều bởi vì bản thân các ngôn ngữ chúng tôi sẽ bắt đầu sử dụng 96 00:06:23,370 --> 00:06:25,290 sẽ trở nên mạnh mẽ hơn. 97 00:06:25,290 --> 00:06:27,410 Nhưng trước tiên, một ứng dụng của cây. 98 00:06:27,410 --> 00:06:30,240 Nó rất phổ biến những ngày này cần để nén thông tin. 99 00:06:30,240 --> 00:06:34,770 Trong bối cảnh những gì bạn sẽ muốn để nén một số loại thông tin kỹ thuật số? 100 00:06:37,190 --> 00:06:39,670 >> Yeah. >> [Sinh viên] Khi bạn cần phải gửi nó qua Web. 101 00:06:39,670 --> 00:06:41,450 Yeah, khi bạn muốn gửi một cái gì đó trên Web. 102 00:06:41,450 --> 00:06:44,950 Nếu bạn muốn tải về một tập tin lớn, đó là lý tưởng nếu ai đó ở đầu bên kia 103 00:06:44,950 --> 00:06:48,760 nén tập tin bằng cách sử dụng một định dạng zip hoặc một cái gì đó như thế 104 00:06:48,760 --> 00:06:53,760 vì vậy mà bạn đang gửi bit ít hơn nếu không có thể được truyền. 105 00:06:53,760 --> 00:06:55,500 Vì vậy, làm thế nào để bạn nén thông tin? 106 00:06:55,500 --> 00:07:00,540 Tất cả nắm để sử dụng bit ít hơn được yêu cầu mặc định. 107 00:07:00,540 --> 00:07:03,220 Nhưng đây là một điều tò mò vì nghĩ lại tuần 0 và 1 108 00:07:03,220 --> 00:07:07,370 khi chúng tôi nói chuyện về ASCII và nhị phân và chúng tôi nói chuyện về ASCII đặc biệt 109 00:07:07,370 --> 00:07:10,690 như sử dụng 8 bit để đại diện cho các chữ cái trong bảng chữ cái 110 00:07:10,690 --> 00:07:16,120 để lá thư đó được đại diện bởi 65, chữ thường là số 97, 111 00:07:16,120 --> 00:07:21,210 tuy nhiên bạn đại diện cho 65 hoặc 97, bạn đang sử dụng 7 hoặc 8 bit. 112 00:07:21,210 --> 00:07:24,120 Tuy nhiên, nắm bắt được rằng có một số chữ cái trong bảng chữ cái tiếng Anh 113 00:07:24,120 --> 00:07:26,230 không được phổ biến như những người khác. 114 00:07:26,230 --> 00:07:31,600 Z không phải là phổ biến, Q không phải là tất cả phải là phổ biến, nhưng A và E là siêu phổ biến. 115 00:07:31,600 --> 00:07:37,280 Và cho tất cả các chữ cái, theo mặc định trên thế giới sử dụng cùng một số bit, chỉ có 8. 116 00:07:37,280 --> 00:07:42,690 Vì vậy, nó sẽ không được thông minh hơn nếu thay vì sử dụng 8 bit cho mỗi thư, 117 00:07:42,690 --> 00:07:47,440 ngay cả những thường xuyên sử dụng như Q và Z, 118 00:07:47,440 --> 00:07:51,910 điều gì sẽ xảy ra nếu chúng tôi sử dụng các bit ít hơn cho A và E và S và các chữ cái phổ biến nhất 119 00:07:51,910 --> 00:07:55,000 và được sử dụng nhiều bit hơn cho các chữ cái ít phổ biến, 120 00:07:55,000 --> 00:07:57,770 ý tưởng là chúng ta hãy tối ưu hóa cho trường hợp thông thường, 121 00:07:57,770 --> 00:08:01,160 mà là một chủ đề trong khoa học máy tính cố gắng tối ưu những gì sẽ xảy ra nhiều nhất 122 00:08:01,160 --> 00:08:05,310 và chi tiêu một thời gian ít hơn, một ít không gian hơn những điều mà, yeah, có thể xảy ra 123 00:08:05,310 --> 00:08:07,680 nhưng không nhất thiết phải là thường xuyên. 124 00:08:07,680 --> 00:08:09,330 Vì vậy, chúng ta hãy lấy một ví dụ. 125 00:08:09,330 --> 00:08:12,610 >> Giả sử chúng ta muốn để mã hóa thông tin khá hiệu quả. 126 00:08:12,610 --> 00:08:15,090 Bạn có thể đã lớn lên biết một chút gì đó về mã Morse, 127 00:08:15,090 --> 00:08:17,450 và tỷ lệ cược là bạn không biết mã thực tế, 128 00:08:17,450 --> 00:08:21,750 nhưng bạn có thể nhớ lại rằng nó ít nhất là hàng loạt các dấu chấm và dấu gạch ngang. 129 00:08:21,750 --> 00:08:26,640 Đây là một mã hóa tương đối hiệu quả và thông báo rằng lá thư phổ biến nhất - ví dụ, E - 130 00:08:26,640 --> 00:08:28,980 sử dụng tiếng bip ngắn nhất. 131 00:08:28,980 --> 00:08:31,740 Mã Morse là tất cả về tiếng bíp-bíp-bíp-bíp-bíp-bíp và tổ chức tấn 132 00:08:31,740 --> 00:08:34,799 hoặc trong một thời gian ngắn thời gian hoặc thời gian dài. 133 00:08:34,799 --> 00:08:40,330 E, như được biểu thị bằng dấu chấm, là một tiếng bíp ngắn siêu, chỉ cần tiếng bíp, và đó sẽ đại diện cho E. 134 00:08:40,330 --> 00:08:43,960 Ngược lại, T sẽ là một tiếng bíp dài hơn, như tiếng bíp [kéo dài âm thanh] 135 00:08:43,960 --> 00:08:45,710 và đó sẽ đại diện cho T. 136 00:08:45,710 --> 00:08:48,840 Nhưng đó vẫn còn khá ngắn bởi vì, ngược lại, nếu bạn nhìn vào Z, 137 00:08:48,840 --> 00:08:52,690 bày tỏ Z, bạn sẽ đi beep, beep [còn âm thanh], beep, beep [ngắn hơn âm thanh. 138 00:08:52,690 --> 00:08:55,360 Vì vậy, nó còn bởi vì nó ít phổ biến hơn. 139 00:08:55,360 --> 00:08:58,150 Nhưng Gotcha ở đây là mã Morse là một chút thiếu sót 140 00:08:58,150 --> 00:09:00,610 ở chỗ nó không phải ngay lập tức giải mã. 141 00:09:00,610 --> 00:09:07,350 Ví dụ, giả sử rằng bạn nghe trên một số cuối tiếng bíp dây ngắn], tiếng bíp dài. 142 00:09:07,350 --> 00:09:12,480 Thông điệp gì tôi chỉ nhận được? Một dấu chấm và dấu gạch ngang. Mà đại diện cho điều gì? 143 00:09:12,480 --> 00:09:15,330 [Sinh viên] A. >> [Malan] Có thể. 144 00:09:15,330 --> 00:09:18,270 Nó cũng có thể được E tiếp theo T. 145 00:09:18,270 --> 00:09:23,390 Nói cách khác, mã Morse, mặc dù nó thúc đẩy những nguyên tắc về tối ưu hóa các trường hợp góc, 146 00:09:23,390 --> 00:09:26,250 nó không thích bản thân để decodability ngay lập tức. 147 00:09:26,250 --> 00:09:29,850 Đó là, con người được nghe hoặc nhận được các dấu chấm và dấu gạch ngang 148 00:09:29,850 --> 00:09:34,540 bằng cách nào đó tìm ra nơi mà các vi phạm giữa các chữ cái, 149 00:09:34,540 --> 00:09:39,660 bởi vì nếu bạn không biết nơi mà những người phá vỡ, bạn có thể nhầm lẫn A cho ET hoặc ngược lại. 150 00:09:39,660 --> 00:09:43,880 >> Vì vậy, những gì bạn có thể làm gì? Trong mã Morse, bạn có thể chỉ là tạm dừng giữa mỗi của các chữ cái. 151 00:09:43,880 --> 00:09:47,660 Nhưng tạm dừng là loại của truy cập tới toàn bộ các điểm tăng tốc mọi thứ lên. 152 00:09:47,660 --> 00:09:52,880 Vì vậy, những gì nếu thay vì chúng tôi đến với một mã số, nơi không có tình trạng này xấu 153 00:09:52,880 --> 00:09:56,570 trong đó E là một tiền tố, ví dụ, của A - 154 00:09:56,570 --> 00:10:00,020 nói cách khác, nếu chúng ta có thể đảm bảo rằng các mô hình còn thiếu cho các chữ cái phổ biến 155 00:10:00,020 --> 00:10:04,850 dài cho các chữ cái ít phổ biến hơn, nhưng không có sự nhầm lẫn có thể? 156 00:10:04,850 --> 00:10:08,930 Một người đàn ông tên của Huffman năm trước phát minh ra chương trình này được gọi là mã hóa Huffman 157 00:10:08,930 --> 00:10:12,390 mà thực sự thúc đẩy một cấu trúc dữ liệu, chúng tôi đã dành một chút thời gian nói về 158 00:10:12,390 --> 00:10:16,560 tuần vừa qua, cây xanh, cây nhị phân cụ thể - 159 00:10:16,560 --> 00:10:19,710 một cây nhị phân có nghĩa là nó có không quá 2 trẻ em. 160 00:10:19,710 --> 00:10:22,720 Nó có thể là một con trái, có lẽ phải là một đứa trẻ, và đó là nó. 161 00:10:22,720 --> 00:10:26,510 Vì vậy, giả chỉ vì lợi ích của cuộc thảo luận mà ai đó muốn gửi một thông điệp 162 00:10:26,510 --> 00:10:31,270 trông như thế này. Đó là hoàn toàn vô nghia nhưng nó bao gồm Như, Bs, Cs, Ds, và Es. 163 00:10:31,270 --> 00:10:34,890 Và nếu bạn thực sự đếm lên tất cả Như, Bs, Cs, Ds, và Es 164 00:10:34,890 --> 00:10:36,870 và sau đó chia cho tổng số của các chữ cái, 165 00:10:36,870 --> 00:10:42,710 biểu đồ này ít ở đây nói rằng 45% của các chữ cái Es, 20% là As, 166 00:10:42,710 --> 00:10:45,010 10% Bs, và vv. 167 00:10:45,010 --> 00:10:47,330 Vì vậy, nói cách khác, giả định rằng chuỗi trích dẫn 168 00:10:47,330 --> 00:10:49,080 chỉ là một số thông điệp mà bạn muốn gửi. 169 00:10:49,080 --> 00:10:52,180 Nó sẽ xảy ra là vô nghĩa chỉ để chúng ta có thể sử dụng như là một vài ký tự càng tốt, 170 00:10:52,180 --> 00:10:55,220 nhưng nó thực sự là trường hợp đó E vẫn là phổ biến nhất, 171 00:10:55,220 --> 00:11:01,450 và B và C là phổ biến nhất, ít nhất là 5 chữ cái trong bảng chữ cái. 172 00:11:01,450 --> 00:11:04,040 Vì vậy, làm thế nào chúng ta có thể đi về đến với một mã hóa, 173 00:11:04,040 --> 00:11:08,430 một mã hóa nhị phân, một mô hình của 0 và 1 cho mỗi của các chữ cái 174 00:11:08,430 --> 00:11:14,820 trong một cách mà E là một mẫu ngắn và có thể B và C là các mẫu hơi dài, 175 00:11:14,820 --> 00:11:19,270 một lần nữa, ý tưởng là chúng ta muốn sử dụng các bit ít hơn hầu hết thời gian 176 00:11:19,270 --> 00:11:21,790 và nhiều bit chỉ một lần trong một thời gian. 177 00:11:21,790 --> 00:11:26,070 Theo Huffman mã hóa, bạn có thể tạo ra một khu rừng cây. 178 00:11:26,070 --> 00:11:31,190 Có loại của một đường dây câu chuyện ở đây có liên quan đến cây và cũng là quá trình xây dựng. 179 00:11:31,190 --> 00:11:32,420 Hãy bắt đầu. 180 00:11:32,420 --> 00:11:36,140 >> Tôi đề nghị bạn bắt đầu với khu rừng này, có thể nói, 5 cây, 181 00:11:36,140 --> 00:11:38,260 mỗi trong số đó là một cây khá ngu ngốc. 182 00:11:38,260 --> 00:11:42,800 Cây này bao gồm chỉ một nút duy nhất, như đại diện ở đây là một vòng tròn. 183 00:11:42,800 --> 00:11:45,310 Vì vậy, mỗi người trong số những điều này có thể là một cấu trúc C 184 00:11:45,310 --> 00:11:50,200 và bên trong các cấu trúc C có thể là một phao đại diện cho đếm tần số 185 00:11:50,200 --> 00:11:52,510 và sau đó có thể là một char đại diện cho các lá thư. 186 00:11:52,510 --> 00:11:56,470 Vì vậy, suy nghĩ của các nút này là chỉ cần bất kỳ struct C cũ, nhưng, bây giờ, mức độ cao hơn. 187 00:11:56,470 --> 00:12:01,230 Đây là một khu rừng 5 cây, mỗi người chỉ có một nút duy nhất. 188 00:12:01,230 --> 00:12:06,830 Huffman đề xuất là chúng ta bắt đầu kết hợp những cây 189 00:12:06,830 --> 00:12:11,140 có tính tần số nhỏ nhất thành cây hơi lớn 190 00:12:11,140 --> 00:12:13,490 bằng cách kết nối chúng với một nút gốc mới. 191 00:12:13,490 --> 00:12:17,560 Vì vậy, trong số các chữ cái ở đây, nhận thấy rằng để thuận tiện cho tôi đã sắp xếp từ trái sang phải, 192 00:12:17,560 --> 00:12:21,420 mặc dù đó không phải là thực sự cần thiết, và thông báo rằng nhỏ nhất nút 193 00:12:21,420 --> 00:12:23,930 Hiện tại 10% và 10%. 194 00:12:23,930 --> 00:12:28,940 Vì vậy, Huffman đề xuất rằng chúng ta hợp nhất những 2 nút nhỏ nhất thành một cây mới 195 00:12:28,940 --> 00:12:34,450 bằng cách giới thiệu một nút cha mới và sau đó cung cấp cho phụ huynh một con trái và một đứa trẻ phải 196 00:12:34,450 --> 00:12:37,720 B là tùy tiện bên trái và C là tùy tiện quyền. 197 00:12:37,720 --> 00:12:41,590 Và sau đó Huffman tiếp tục đề xuất cho phép của bây giờ chỉ cần nghĩ về con trái 198 00:12:41,590 --> 00:12:44,790 ở một trong những cây này luôn luôn được đại diện bởi 0 199 00:12:44,790 --> 00:12:47,890 và các con phải luôn luôn được đại diện bởi số 1. 200 00:12:47,890 --> 00:12:50,680 >> Nó không quan trọng nếu bạn flip chúng miễn là bạn phù hợp. 201 00:12:50,680 --> 00:12:54,650 Vì vậy, bây giờ chúng tôi có 4 cây trong rừng này. 202 00:12:54,650 --> 00:12:58,050 Và tôi nói 4 bởi vì bây giờ cây ở bên trái - 203 00:12:58,050 --> 00:13:00,570 và nó không phải quá nhiều một cây trong ý nghĩa là nó phát triển theo cách này, 204 00:13:00,570 --> 00:13:05,170 nó giống như một cây gia đình bây giờ là 0,2 là sắp xếp của cha mẹ của 2 đứa trẻ 205 00:13:05,170 --> 00:13:07,930 nhận thấy rằng cha mẹ mà chúng tôi đã rút ra 0,2. 206 00:13:07,930 --> 00:13:13,370 Chúng tôi đã thêm tính tần số của 2 trẻ em và cho nút mới tổng. 207 00:13:13,370 --> 00:13:15,310 Vì vậy, bây giờ chúng tôi chỉ cần lặp lại quá trình này. 208 00:13:15,310 --> 00:13:19,490 Tìm 2 nút nhỏ nhất và sau đó tham gia vào một cây mới 209 00:13:19,490 --> 00:13:21,380 và sau đó lặp lại quá trình hơn nữa. 210 00:13:21,380 --> 00:13:26,390 Ngay bây giờ chúng tôi có một vài ứng cử viên, 20%, 15%, và giảm thêm 20%. 211 00:13:26,390 --> 00:13:29,780 Trong trường hợp này, chúng tôi có để phá vỡ tie. Chúng ta có thể làm điều đó tùy tiện. 212 00:13:29,780 --> 00:13:31,540 Chúng tôi chỉ nên làm điều đó nhất quán. 213 00:13:31,540 --> 00:13:33,760 Trong trường hợp này tôi tùy tiện sẽ đi với một bên trái, 214 00:13:33,760 --> 00:13:39,880 và bây giờ tôi kết hợp 20% và 15% để cung cấp cho tôi một phụ huynh mới được gọi là 35%, 215 00:13:39,880 --> 00:13:46,310 có con bên trái là 0, có quyền của con là 1, và bây giờ chúng tôi có 3 cây trong rừng. 216 00:13:46,310 --> 00:13:47,960 Bạn có lẽ có thể nhìn thấy nơi này là đi. 217 00:13:47,960 --> 00:13:51,150 Nếu chúng ta lặp lại điều này một vài chi tiết, chúng ta sẽ có cây lớn hơn chỉ 1, 218 00:13:51,150 --> 00:13:53,900 tất cả các cạnh được dán nhãn với 0 và 1. 219 00:13:53,900 --> 00:13:55,710 Hãy làm điều đó một lần nữa. 220 00:13:55,710 --> 00:14:02,600 35% là gốc cây đó. 20% và 45%, do đó, chúng ta sẽ kết hợp 35% và 20%. 221 00:14:02,600 --> 00:14:05,610 Bây giờ chúng tôi có cây này ở đây. Chúng tôi thêm những cùng nhau, chúng tôi có 55%. 222 00:14:05,610 --> 00:14:07,910 Bây giờ chỉ có 2 cây trong rừng. 223 00:14:07,910 --> 00:14:11,900 Chúng tôi làm điều này 1 thời gian thức, và hy vọng toán học tất cả các tần thêm 224 00:14:11,900 --> 00:14:15,570 bởi vì họ nên kể từ khi chúng tôi tính toán từ get-đi để thêm lên đến 100%. 225 00:14:15,570 --> 00:14:17,960 Và bây giờ chúng tôi có 1 cây. 226 00:14:17,960 --> 00:14:20,580 Vì vậy, đây là một cây mã Huffman. 227 00:14:20,580 --> 00:14:24,400 Nó loại mất một thời gian để đến đó bằng lời nói, nhưng thực tế là với một vòng lặp for 228 00:14:24,400 --> 00:14:27,620 hoặc với một hàm đệ quy, bạn có thể xây dựng điều này lên khá nhanh. 229 00:14:27,620 --> 00:14:32,440 Vì vậy, bây giờ chúng tôi có 1 nút mới, và tất cả các nút này bên trong đã được malloc'd, 230 00:14:32,440 --> 00:14:34,690 có lẽ, dọc theo con đường. 231 00:14:34,690 --> 00:14:38,650 Vì vậy, bây giờ ở trên cùng của cây này chúng tôi có 100%, nhưng bây giờ nhận thấy chúng ta có một con đường 232 00:14:38,650 --> 00:14:43,780 từ mới này great-great-ông bà cho tất cả great-great-great-cháu 233 00:14:43,780 --> 00:14:45,930 tất cả các cách ở phía dưới, tất cả lá. 234 00:14:45,930 --> 00:14:52,840 >> Những gì chúng tôi đang làm bây giờ là đề nghị để đại diện cho E với doanh nghiệp, 235 00:14:52,840 --> 00:14:55,670 chúng tôi chỉ đơn giản là sẽ sử dụng số 1. Tại sao? 236 00:14:55,670 --> 00:15:01,000 Bởi vì nếu chúng ta đi qua cây này từ gốc cuối cùng với các lá được gọi là E, 237 00:15:01,000 --> 00:15:06,050 chúng tôi làm theo chỉ 1 cạnh, cạnh phải, và đó là nhãn của khóa học tại trên bên phải 1. 238 00:15:06,050 --> 00:15:11,550 Vì vậy, ngụ ý ở đây cho Huffman là E mã hóa trong hệ nhị phân chỉ được 1. 239 00:15:11,550 --> 00:15:14,490 Và đó là đẹp, damn hiệu quả. Có thể không thực sự nhận được bất kỳ nhỏ hơn. 240 00:15:14,490 --> 00:15:18,350 Ngược lại, A sẽ được đại diện, nếu bạn làm theo logic, 241 00:15:18,350 --> 00:15:21,610 bởi những gì mô hình của bit thay vì? 01. 242 00:15:21,610 --> 00:15:25,500 Vì vậy, để có được đến A, chúng tôi bắt đầu ở gốc và chúng tôi đi bên trái và sau đó chúng tôi đi đúng, 243 00:15:25,500 --> 00:15:28,580 có nghĩa là chúng ta theo một 0 và sau đó là 1. 244 00:15:28,580 --> 00:15:32,810 Vì vậy, chúng ta sẽ đại diện cho chữ A với các mô hình 0 và 1. 245 00:15:32,810 --> 00:15:36,010 Và bây giờ nhận thấy chúng tôi đã có một tài sản của decodability ngay lập tức 246 00:15:36,010 --> 00:15:38,090 rằng chúng tôi không có trong mã Morse. 247 00:15:38,090 --> 00:15:42,840 Mặc dù cả hai mô hình này là khá ngắn - E là 1 bit, 2 bit - 248 00:15:42,840 --> 00:15:45,080 nhận thấy rằng họ không thể bị nhầm lẫn một hay khác, 249 00:15:45,080 --> 00:15:54,870 bởi vì nếu bạn nhìn thấy một 1, nó đã nhận được một E, nếu bạn nhìn thấy một 0 sau đó một 1 rõ ràng là đã nhận được một A. 250 00:15:54,870 --> 00:15:58,410 Tương tự như vậy, D là những gì? 001. 251 00:15:58,410 --> 00:16:01,440 C là gì? 0001. 252 00:16:01,440 --> 00:16:05,320 Và B là gì? 0000. 253 00:16:05,320 --> 00:16:09,550 Và một lần nữa, bởi vì tất cả các chữ cái chúng ta quan tâm là lá 254 00:16:09,550 --> 00:16:13,890 và không ai trong số họ là loại trung gian trong đường dẫn từ gốc đến lá, 255 00:16:13,890 --> 00:16:18,760 không có nguy cơ conflating mã hóa khác nhau 2 chữ cái ' 256 00:16:18,760 --> 00:16:22,300 bởi vì tất cả các mẫu bit xác định. 257 00:16:22,300 --> 00:16:25,280 0000 sẽ luôn luôn được B. 258 00:16:25,280 --> 00:16:29,480 Có một nơi nào đó ở giữa không có nút mà bạn có thể nhầm lẫn giữa 1 lá thư cho người khác. 259 00:16:29,480 --> 00:16:31,150 Vì vậy, ngụ ý ở đây là gì? 260 00:16:31,150 --> 00:16:35,080 >> Bức thư phổ biến nhất - trong trường hợp này E - đã nhận được mã hóa ngắn nhất, 261 00:16:35,080 --> 00:16:37,430 Đã nhận được mã hóa ngắn nhất tiếp theo, 262 00:16:37,430 --> 00:16:41,390 và B và C, mà chúng ta đã biết từ các loại get-go trong những phổ biến nhất 263 00:16:41,390 --> 00:16:45,390 ở tần số 10% mỗi, họ đã nhận được mã hóa dài nhất. 264 00:16:45,390 --> 00:16:49,410 Và vì vậy điều này có nghĩa là bây giờ là nếu bạn muốn gửi một thông điệp rằng nén 265 00:16:49,410 --> 00:16:51,950 qua Internet hoặc trong một email hoặc tương tự, 266 00:16:51,950 --> 00:16:56,730 hơn là sử dụng ASCII tiêu chuẩn, bạn có thể gửi một tin nhắn mã hóa Huffman 267 00:16:56,730 --> 00:17:01,720 theo đó nếu bạn muốn gửi thư điện tử với doanh nghiệp, bạn gửi chỉ là một chút. 268 00:17:01,720 --> 00:17:05,680 Nếu bạn muốn gửi một A, bạn gửi 2 bit, 01, thay vì gửi 8 bit 269 00:17:05,680 --> 00:17:10,190 tiếp theo là một 8 bit tiếp theo là 8 bit khác và vv. 270 00:17:10,190 --> 00:17:11,940 Nhưng có một Gotcha ở đây. 271 00:17:11,940 --> 00:17:17,079 Nó không đủ để xây dựng cây này và sau đó bắt đầu gửi từ Alice đến Bob 272 00:17:17,079 --> 00:17:20,010 các mẫu bit ngắn hơn, chuỗi từ ASCII, 273 00:17:20,010 --> 00:17:23,140 bởi vì Alice cũng có thông báo cho Bob về những gì 274 00:17:23,140 --> 00:17:26,880 nếu Bob sẽ để có thể đọc tin nhắn nén? 275 00:17:26,880 --> 00:17:30,770 [Sinh viên phản ứng không nghe được] >> đó là gì? 276 00:17:30,770 --> 00:17:32,310 [Không nghe được sinh viên phản ứng] >> Trong cây. 277 00:17:32,310 --> 00:17:35,160 Hoặc thậm chí cụ thể hơn, những mã hóa, 278 00:17:35,160 --> 00:17:39,010 đặc biệt là kể từ khi trong câu chuyện này, chúng tôi đã thực hiện một cuộc gọi bản án tại một thời điểm. 279 00:17:39,010 --> 00:17:43,640 Nhớ rằng chúng ta phải chọn tùy tiện giữa 2 nút khác nhau 20%? 280 00:17:43,640 --> 00:17:49,800 Vì vậy, nó không phải là trường hợp đó, Bob, người nhận, chỉ có thể tái tạo lại cây của riêng mình 281 00:17:49,800 --> 00:17:53,390 bởi vì anh ta sẽ tạo ra cây bao giờ nên hơi khác nhau từ Alice. 282 00:17:53,390 --> 00:17:56,670 Hơn nữa, Bob không biết gì được thông báo ban đầu là 283 00:17:56,670 --> 00:18:00,770 bởi vì điều duy nhất Alice gửi anh ta, tất nhiên, là thông điệp nén. 284 00:18:00,770 --> 00:18:05,900 >> Vì vậy, đánh bắt với nén như thế này là, có, Alice có thể tiết kiệm rất nhiều toàn bộ bit 285 00:18:05,900 --> 00:18:09,900 bằng cách gửi 1 cho E và 01 cho A và vv, 286 00:18:09,900 --> 00:18:15,180 nhưng cô cũng để thông báo cho Bob lập bản đồ giữa các chữ cái và các bit 287 00:18:15,180 --> 00:18:19,620 bởi vì họ có thể không rõ ràng dựa vào chỉ ASCII nữa nếu chúng ta không sử dụng ASCII. 288 00:18:19,620 --> 00:18:22,200 Vì vậy, cô có thể gửi cho anh ta cây bằng cách nào đó - 289 00:18:22,200 --> 00:18:26,600 viết nó xuống, lưu nó như là dữ liệu nhị phân hoặc một cái gì đó như thế - 290 00:18:26,600 --> 00:18:30,280 hoặc chỉ cần gửi cho anh ta một cheat sheet chút, một tập tin Excel, cho thấy các ánh xạ. 291 00:18:30,280 --> 00:18:36,480 Vì vậy, hiệu quả của nén thực sự giả định rằng các thông điệp mà bạn đang gửi 292 00:18:36,480 --> 00:18:40,230 là khá lớn, ít nhất là kích thước trung bình, 293 00:18:40,230 --> 00:18:42,180 bởi vì nếu bạn đang gửi một thông điệp siêu ngắn, 294 00:18:42,180 --> 00:18:45,390 nếu bạn chỉ muốn để gửi tin nhắn BAD, mà sẽ xảy ra là một từ chúng ta có thể đánh vần ở đây, 295 00:18:45,390 --> 00:18:49,550 B-A-D, bạn có thể sẽ sử dụng các bit ít hơn, 296 00:18:49,550 --> 00:18:53,130 nhưng bắt là nếu bạn cũng phải thông báo cho Bob cây 297 00:18:53,130 --> 00:18:57,530 hoặc những mã hóa, bạn sẽ có thể lớn hơn tất cả các khoản tiết kiệm 298 00:18:57,530 --> 00:19:00,110 có những điều nén để bắt đầu với. 299 00:19:00,110 --> 00:19:02,210 Vì vậy, nó thực sự có thể là trường hợp đó, nếu bạn cố gắng nén 300 00:19:02,210 --> 00:19:05,330 ngay cả với một cái gì đó giống như định dạng file zip hoặc bạn có thể quen với - 301 00:19:05,330 --> 00:19:07,780 khá nhỏ các tập tin, tập tin ngay cả trống rỗng - 302 00:19:07,780 --> 00:19:10,930 đôi khi những tập tin có thể được lớn hơn và không nhỏ hơn. 303 00:19:10,930 --> 00:19:14,320 Nhưng thực tế chỉ xảy ra cho kích thước file nhỏ, 304 00:19:14,320 --> 00:19:16,920 do đó, nó sẽ không làm cho một file gigabyte là 2 GB; 305 00:19:16,920 --> 00:19:19,480 chúng ta đang thực sự nói byte hoặc kilobytes một vài. 306 00:19:19,480 --> 00:19:22,330 >> Một số chương trình như zip có đủ thông minh để nhận ra rằng, 307 00:19:22,330 --> 00:19:24,590 "Bạn sẽ phải chi tiêu nhiều bit nén này." 308 00:19:24,590 --> 00:19:27,460 "Hãy để tôi không bận tâm nén nó cho bạn ở tất cả." 309 00:19:27,460 --> 00:19:30,160 Vì vậy, đây chỉ là 1 cách sau đó nén định dạng văn bản. 310 00:19:30,160 --> 00:19:32,300 Chúng tôi có thể thực hiện một cái gì đó như thế này trong C. 311 00:19:32,300 --> 00:19:35,370 Ví dụ, ở đây là làm thế nào chúng ta có thể đại diện cho một nút trong cây này 312 00:19:35,370 --> 00:19:39,320 nơi chúng tôi có một char cho biểu tượng, một giá trị nổi cho tần số, 313 00:19:39,320 --> 00:19:42,250 và như chúng ta đã nhìn thấy với cấu trúc dữ liệu khác của chúng tôi, 2 con trỏ, 314 00:19:42,250 --> 00:19:47,080 1 con trái, 1 bên phải, một trong đó có thể được NULL, 315 00:19:47,080 --> 00:19:50,850 nhưng nếu không, nó đề cập đến một con trái và một đứa trẻ phải. 316 00:19:50,850 --> 00:19:55,130 Vì vậy, điều này sau đó là mã hóa Huffman, và đó là 1 cách mà bạn có thể đi về nén thông tin, 317 00:19:55,130 --> 00:19:57,880 và nó chắc chắn một trong những dễ dàng nhất để thực hiện 318 00:19:57,880 --> 00:20:00,830 trong bối cảnh, nói rằng, cấu trúc dữ liệu tuần trước, 319 00:20:00,830 --> 00:20:03,250 mặc dù ngay cả các thuật toán phức tạp hơn tồn tại 320 00:20:03,250 --> 00:20:08,220 mà có thể làm đột biến thậm chí còn phức tạp hơn các dữ liệu của bạn. 321 00:20:08,220 --> 00:20:11,640 Bất kỳ câu hỏi sau đó trên cây, cây nhị phân, hoặc nén của văn bản? 322 00:20:11,640 --> 00:20:15,590 [Sinh viên] có một số không rõ ràng, như thế nào nếu không nghe được] chia thành 01 323 00:20:15,590 --> 00:20:19,160 sau đó 011 sẽ là mơ hồ, phải không? 324 00:20:19,160 --> 00:20:22,730 [Không nghe được] >> câu hỏi. Sự mơ hồ. 325 00:20:22,730 --> 00:20:25,940 Hãy để tôi tóm tắt bằng cách đề cập đến bức tranh này ở đây. 326 00:20:25,940 --> 00:20:29,650 Bởi vì các ký tự mà bạn nén, các đại diện của, 327 00:20:29,650 --> 00:20:32,850 theo định nghĩa của thuật toán này luôn luôn giữ lá, 328 00:20:32,850 --> 00:20:41,870 bạn sẽ không bao giờ vô tình sử dụng cùng một khuôn mẫu bit cho các tiền tố của chữ nhiều. 329 00:20:41,870 --> 00:20:46,740 Vì vậy, nói cách khác, bạn đang quan tâm, nó giống như âm thanh, một sự mơ hồ phát sinh 330 00:20:46,740 --> 00:20:51,580 theo đó 001 có thể là sự khởi đầu của B hoặc bắt đầu của C hoặc một cái gì đó như thế. 331 00:20:51,580 --> 00:20:56,780 Nhưng điều đó không phải là trường hợp vì thông báo rằng tất cả các chữ cái trong bảng chữ cái chúng ta đang mã hóa 332 00:20:56,780 --> 00:20:58,290 có lá. 333 00:20:58,290 --> 00:21:01,910 >> Sự mơ hồ chỉ có thể phát sinh, như trong trường hợp của mã Morse, 334 00:21:01,910 --> 00:21:06,770 nếu, chẳng hạn, C là một nơi nào đó dọc theo con đường từ gốc đến B. 335 00:21:06,770 --> 00:21:12,290 [Sinh viên] Right. Vì vậy, trong trường hợp đó, nói rằng A có 2 lá. >> Say A có - đó một lần nữa. 336 00:21:12,290 --> 00:21:18,760 [Sinh viên] Say A có 2 lá, F và G, và sau đó G - >> Được rồi. Nhưng nó có thể không. 337 00:21:18,760 --> 00:21:23,230 A chính nó không thể có lá F và G bởi vì những chữ cái F và G 338 00:21:23,230 --> 00:21:27,560 mình sẽ để lại một nơi nào đó để bên trái của B hoặc quyền của E. 339 00:21:27,560 --> 00:21:28,900 Vì vậy, theo định nghĩa, họ phải có lá. 340 00:21:28,900 --> 00:21:32,940 Nếu không, bạn chính xác, chúng tôi đã không giải quyết được vấn đề mà mã Morse phải đối mặt với. 341 00:21:32,940 --> 00:21:38,150 Tốt câu hỏi. Các câu hỏi khác? Được rồi. 342 00:21:38,150 --> 00:21:42,050 Khái niệm về bit, nó quay ra chúng ta đã có sức mạnh tất cả cùng mà chúng tôi đã không thực sự được sử dụng 343 00:21:42,050 --> 00:21:44,200 khi nó đến để thao tác các số 0 và 1. 344 00:21:44,200 --> 00:21:46,600 Chúng tôi hỏi về điều này trên một trong những bài tập đầu tiên, 345 00:21:46,600 --> 00:21:52,340 cụ thể là, làm thế nào để bạn đi về chuyển đổi chữ hoa thành chữ thường hoặc ngược lại? 346 00:21:52,340 --> 00:21:55,460 Hoặc cụ thể hơn, một của những psets đầu tiên hỏi 347 00:21:55,460 --> 00:22:01,090 bao nhiêu bit bạn thực sự có để lật để thay đổi thành chữ thường hoặc ngược lại? 348 00:22:01,090 --> 00:22:05,580 Dưới đây là một lời nhắc nhở nhanh chóng của 65 và 97 trông giống như trong hệ nhị phân. 349 00:22:05,580 --> 00:22:08,060 Và thậm chí nếu câu hỏi đó đã loại phai nhạt trong trí nhớ của bạn, 350 00:22:08,060 --> 00:22:11,290 bạn có thể thấy một lần nữa ở đây là bao nhiêu bit cần được lộn 351 00:22:11,290 --> 00:22:15,810 thay đổi vốn thành chữ thường? Chỉ cần 1. 352 00:22:15,810 --> 00:22:19,650 >> Họ chỉ khác nhau ở 1 vị trí, bit thứ ba từ bên trái. 353 00:22:19,650 --> 00:22:24,240 Trong khi đó, A có 010, ít có một 011. 354 00:22:24,240 --> 00:22:26,250 Vì vậy, bằng cách nào đó chúng ta cần phải chỉ cần có thể để lật rằng bit, 355 00:22:26,250 --> 00:22:29,410 và sau đó chúng tôi có thể tận dụng hoặc chữ thường chữ. 356 00:22:29,410 --> 00:22:32,720 Chúng tôi đã làm điều này trong quá khứ bằng cách thực sự sử dụng nếu có điều kiện 357 00:22:32,720 --> 00:22:35,930 và kiểm tra nếu bức thư là giữa tư bản A và vốn Z, 358 00:22:35,930 --> 00:22:41,480 sau đó kết quả đầu ra như A - "a" + 26 hoặc một cái gì đó như thế. 359 00:22:41,480 --> 00:22:46,130 Bạn có thể làm một sự thay đổi số học các chữ cái trong bảng chữ cái. 360 00:22:46,130 --> 00:22:49,270 Nhưng nếu chúng ta chỉ có thể lật rằng bit duy nhất? 361 00:22:49,270 --> 00:22:59,080 Làm thế nào bạn có thể đi về việc tham gia 1 byte bit, do đó 8 bit như 01.000.001 và 01.100.001? 362 00:22:59,080 --> 00:23:03,170 Nếu bạn đã có những mô hình của các bit, làm thế nào chúng ta có thể thay đổi chỉ là 1 trong số họ? 363 00:23:03,170 --> 00:23:07,610 Điều gì sẽ xảy ra nếu chúng tôi giới thiệu màu vàng ở đây mô hình này khác bit? 364 00:23:07,610 --> 00:23:13,420 Nếu tôi làm cho 0s chuỗi màu vàng toàn bộ trừ bit 1 mà tôi muốn thay đổi 365 00:23:13,420 --> 00:23:17,900 và sau đó tôi giới thiệu một nhà điều hành mới được biết đến như là một nhà điều hành bitwise - 366 00:23:17,900 --> 00:23:21,210 Bitwise trong ý nghĩa rằng nó hoạt động trên các bit riêng lẻ, 367 00:23:21,210 --> 00:23:25,360 không phải trên toàn bộ một byte hoặc 4 byte tất cả cùng một lúc. 368 00:23:25,360 --> 00:23:31,170 Thanh dọc này có màu vàng cho thấy rằng nếu chúng ta có những đại diện vốn 369 00:23:31,170 --> 00:23:37,060 và bitwise "hoặc" với chuỗi màu vàng của các bit? 370 00:23:37,060 --> 00:23:41,300 Nói cách khác, suy nghĩ lại về cuộc thảo luận của chúng tôi các biểu thức Boolean trong Scratch và sau đó trong C. 371 00:23:41,300 --> 00:23:47,520 >> Làm một Boolean hoặc có nghĩa là đó là sự thật, hoặc là điều đầu tiên là đúng 372 00:23:47,520 --> 00:23:50,700 hoặc điều thứ hai là đúng hoặc cả hai đều có thể đúng, 373 00:23:50,700 --> 00:23:53,270 và sau đó kết quả đầu ra chính nó là đúng sự thật. 374 00:23:53,270 --> 00:24:00,230 Trong trường hợp này ở đây, chúng ta nhận được nếu chúng ta 0 "hoặc" ed với 0? False hay sai? 375 00:24:00,230 --> 00:24:04,280 Nó vẫn còn sai, vì thế chữ thường một vẫn còn như mong đợi. 376 00:24:04,280 --> 00:24:07,540 Điều gì sẽ xảy ra nếu thay vì chúng ta làm 1 hay 0? 377 00:24:07,540 --> 00:24:12,640 Điều này bây giờ còn 1, nhưng nhận thấy những gì xảy ra ở đây. 378 00:24:12,640 --> 00:24:18,630 Nếu chúng ta bắt đầu có vốn đầu A và chúng tôi tiếp tục "hoặc" bit riêng lẻ như chúng tôi đang làm gì ở đây, 379 00:24:18,630 --> 00:24:25,180 0 hoặc màu vàng 1 cho chúng ta những gì xuống đây? Điều này cho chúng ta 1. 380 00:24:25,180 --> 00:24:35,120 Trong thực tế, giả sử chúng tôi không biết một phiên bản chữ hoa của ít những gì thực sự là. 381 00:24:35,120 --> 00:24:38,270 Hãy làm điều này. Hãy để tôi di chuyển này trở lại ở đây. 382 00:24:38,270 --> 00:24:42,340 Hãy làm điều này một lần nữa. 0 hoặc 0 mang lại cho tôi 0. 383 00:24:42,340 --> 00:24:45,020 1 hoặc 0 mang lại cho tôi 1. 384 00:24:45,020 --> 00:24:48,020 0 hoặc 1 mang lại cho tôi 1. 385 00:24:48,020 --> 00:24:52,880 0 hoặc 0 mang lại cho tôi 0. Tiếp theo là 0, tiếp theo là 0, tiếp theo là 0. 386 00:24:52,880 --> 00:24:55,660 1 hoặc 0 mang lại cho tôi 1. 387 00:24:55,660 --> 00:24:59,140 Và do đó, ngay cả khi chúng tôi không biết trước những gì thành chữ thường một là, 388 00:24:59,140 --> 00:25:04,770 chỉ đơn giản bằng cách "hay" ing với mô hình của các bit mà chúng tôi đã trình bày ở đây màu vàng, 389 00:25:04,770 --> 00:25:09,400 bạn có thể tự chữ thường a vốn bằng cách đảo mà bit. 390 00:25:09,400 --> 00:25:11,580 Chúng tôi sử dụng tuần biểu hiện trước đây: flipping một chút. 391 00:25:11,580 --> 00:25:13,710 Làm thế nào để bạn thực sự làm điều đó lập trình? 392 00:25:13,710 --> 00:25:16,390 Bạn sử dụng những gì thường được gọi là mặt nạ, một chuỗi các bit, 393 00:25:16,390 --> 00:25:19,980 trong trường hợp này chỉ để xảy ra để trông giống như con số này ở đây, 394 00:25:19,980 --> 00:25:22,980 và sau đó bạn "hoặc" với nhau bằng cách sử dụng nhà điều hành này C mới, 395 00:25:22,980 --> 00:25:29,940 không | |, bạn sử dụng một | và bạn thực sự sẽ nhận được câu trả lời ở đây vì lý do tại sao? 396 00:25:29,940 --> 00:25:35,120 Đây là vị trí số 1, 2 nơi, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Vì vậy, nó chỉ ra rằng nếu bạn có một bức thư vốn và bitwise "hoặc" nó với số nguyên 32, 398 00:25:42,280 --> 00:25:47,520 bởi vì số nguyên 32 khi bạn nhìn vào nó như các bit như thế này, 399 00:25:47,520 --> 00:25:50,860 điều đó có nghĩa là bạn có thể lật các bit mà bạn thực sự muốn. 400 00:25:50,860 --> 00:25:52,630 Và tương tự như - và chúng ta sẽ xem xét mã trong thời điểm này chỉ là một - 401 00:25:52,630 --> 00:25:54,210 giả sử chúng ta muốn đi theo một hướng khác. 402 00:25:54,210 --> 00:25:58,210 >> Làm thế nào để bạn đi từ vốn chữ thường Một? Bit cần phải thay đổi? 403 00:25:58,210 --> 00:25:59,820 Đó là cùng. 404 00:25:59,820 --> 00:26:03,970 Chúng tôi muốn thay đổi điều đó bit thứ ba từ 1 đến 0 một. 405 00:26:03,970 --> 00:26:06,310 Và làm thế nào chúng ta có thể đi về việc này? 406 00:26:06,310 --> 00:26:10,130 Làm thế nào để chúng ta tắt một chút? Với những gì mô hình của các bit, chúng ta có thể tắt một chút? 407 00:26:11,580 --> 00:26:14,070 Điều gì sẽ xảy ra nếu chúng ta sắp xếp của nghịch mặt nạ? 408 00:26:14,070 --> 00:26:17,350 Trong khi đó, trước khi chúng tôi thực hiện 0s mặt nạ màu vàng toàn bộ 409 00:26:17,350 --> 00:26:19,930 trừ bit 1, chúng tôi muốn để bật, 410 00:26:19,930 --> 00:26:25,580 những gì nếu thời gian này chúng tôi thực hiện 1s mặt nạ toàn bộ ngoại trừ các bit mà chúng ta muốn tắt 411 00:26:25,580 --> 00:26:28,330 và sau đó sử dụng những gì nhà điều hành? 412 00:26:28,330 --> 00:26:30,560 Điều gì sẽ xảy ra nếu chúng tôi "và" những điều? Hãy có một cái nhìn. 413 00:26:30,560 --> 00:26:34,880 Nếu bây giờ chúng ta lật này, giả sử rằng một lần nữa tôi tạo ra một mặt nạ đó là tất cả 1s 414 00:26:34,880 --> 00:26:37,650 trừ bit 1 mà tôi muốn tắt 415 00:26:37,650 --> 00:26:43,860 và sau đó chứ không phải là "hay" những con số màu trắng lên hàng đầu với các con số màu vàng xuống đây, 416 00:26:43,860 --> 00:26:46,940 điều gì sẽ xảy ra nếu tôi thay vì "và" họ lại với nhau? Nó được gọi là một phép toán và 417 00:26:46,940 --> 00:26:49,450 Một cách hợp lý, đó là điều tương tự như một Boolean. 418 00:26:49,450 --> 00:26:55,160 Điều này mang lại cho tôi 0 & 1 là 0. Vì vậy, sai và đúng là sai. 419 00:26:55,160 --> 00:26:58,160 Đúng sự thật và sự thật là sự thật. 420 00:26:58,160 --> 00:27:04,020 Và đây là sự kỳ diệu: Đúng và sai là sai, vì thế chúng tôi đã tắt mà bit. 421 00:27:04,020 --> 00:27:06,560 Và bây giờ phần còn lại của câu chuyện là hơi đơn giản. 422 00:27:06,560 --> 00:27:11,970 Bởi vì phần còn lại của mặt nạ là 1s, nó không có vấn đề gì các con số là màu trắng. 423 00:27:11,970 --> 00:27:15,580 Khi bạn "và" một cái gì đó với sự thật, bạn sẽ không thay đổi giá trị của nó. 424 00:27:15,580 --> 00:27:20,200 Nếu đó là sự thật, nó sẽ vẫn còn đúng. Nếu nó sai, nó sẽ vẫn sai. 425 00:27:20,200 --> 00:27:23,190 >> Nhưng kỳ diệu xảy ra khi bạn có một cái gì đó là sự thật 426 00:27:23,190 --> 00:27:25,430 và sau đó bạn "và" nó với sai. 427 00:27:25,430 --> 00:27:30,030 Điều này có tác tắt rằng bit. 428 00:27:30,030 --> 00:27:31,980 Vì vậy, một chút khó hiểu có. 429 00:27:31,980 --> 00:27:35,390 Chúng ta hãy thực sự nhìn vào một số mã, mà thực sự có thể nhìn khó hiểu hơn, 430 00:27:35,390 --> 00:27:38,220 nhưng chúng ta hãy xem ở đây tại ToLower. 431 00:27:38,220 --> 00:27:45,880 Nếu tôi nhìn vào ToLower, đi từ A hoa thành chữ thường, 432 00:27:45,880 --> 00:27:47,730 chúng ta hãy xem làm thế nào chúng ta có thể thực hiện chương trình này. 433 00:27:47,730 --> 00:27:51,280 Đây là chính, và nó không phải dùng bất cứ đối số dòng lệnh. 434 00:27:51,280 --> 00:27:55,980 Tôi tuyên bố một c ký tự cho chữ mà người dùng sẽ gõ vào 435 00:27:55,980 --> 00:28:00,690 Sau đó tôi sử dụng một do quen thuộc vòng lặp trong khi chỉ cần đảm bảo rằng người dùng chắc chắn mang lại cho tôi số vốn 436 00:28:00,690 --> 00:28:05,010 hoặc B hoặc C. .. Z, do đó, họ cung cấp cho tôi một cái gì đó giữa A và Z. 437 00:28:05,010 --> 00:28:08,580 Và bây giờ tôi đang làm gì ở đây? 438 00:28:08,580 --> 00:28:14,870 Tôi "hay" ing với 0x20, nhưng đó là thực sự giống như - 439 00:28:14,870 --> 00:28:19,500 và chúng tôi sẽ trở lại với điều này trong một thời điểm - 32. 440 00:28:19,500 --> 00:28:24,830 Vì vậy, một lần nữa, 32 là mô hình này của các bit ở đây. Tại sao chúng ta biết điều này? 441 00:28:24,830 --> 00:28:26,320 Chỉ cần suy nghĩ lại về tuần 0. 442 00:28:26,320 --> 00:28:31,010 Đây là vị trí số 1, 2 nơi, 4s, 8s, 16s, 32s nơi. 443 00:28:31,010 --> 00:28:33,470 Vì vậy, con số này màu vàng xảy ra là 32. 444 00:28:33,470 --> 00:28:40,570 Sau đó tôi có thể mất một lá thư như char ở đây, phép toán "hoặc" nó theo nghĩa đen với số lượng 32, 445 00:28:40,570 --> 00:28:45,250 và những gì tôi nhận được trở lại? Phiên bản chữ thường char đó. 446 00:28:45,250 --> 00:28:48,830 Một lúc trước, mặc dù, tôi bày tỏ trong một ký hiệu cơ sở khác nhau. 447 00:28:48,830 --> 00:28:51,370 Điều này đã đại diện cho những gì? >> [Sinh viên] Hexadecimal. 448 00:28:51,370 --> 00:28:53,050 [Malan] Điều này xảy ra để đại diện cho hệ thập lục phân. 449 00:28:53,050 --> 00:28:55,170 Chúng tôi đã không nói về hệ thập lục phân tất cả những gì, 450 00:28:55,170 --> 00:28:57,330 nhưng nó thực sự thuận tiện trong các trường hợp như thế này. 451 00:28:57,330 --> 00:29:01,730 >> Mặc dù có vẻ phức tạp hơn và mặc dù có vẻ như 20 và không 32, 452 00:29:01,730 --> 00:29:06,240 nó chỉ ra rằng hệ thập lục phân thực sự là ký hiệu thuận tiện siêu 453 00:29:06,240 --> 00:29:10,810 bởi vì trong hệ thập lục phân mỗi chữ số sau khi 0x - và điều này có nghĩa là không có gì; 454 00:29:10,810 --> 00:29:13,960 đây là quy ước của con người chỉ nói rằng ở đây có một số thập lục phân - 455 00:29:13,960 --> 00:29:18,590 mỗi người trong số các chữ số, 2 và sau đó 0, mình có thể được đại diện 456 00:29:18,590 --> 00:29:20,800 với chính xác 4 bit. 457 00:29:20,800 --> 00:29:27,840 Vì vậy, nếu chúng ta làm điều này, hãy để tôi mở một trình soạn thảo văn bản ở đây - lạ autocomplete - 458 00:29:27,840 --> 00:29:35,940 nếu chúng ta làm một trình soạn thảo văn bản nhỏ ở đây, 0x20 số có nghĩa là ở đây là 4 bit, đây là một 4 bit. 459 00:29:35,940 --> 00:29:38,050 Hãy làm 4 bit ngoài cùng bên phải đầu tiên. 460 00:29:38,050 --> 00:29:44,690 0 khi biểu diễn với 4 bit là gì? Siêu dễ dàng. Chỉ cần tất cả các số 0. 461 00:29:44,690 --> 00:29:46,780 Vì vậy, 4 bit như là số 0. 462 00:29:46,780 --> 00:29:53,510 Làm thế nào để bạn đại diện 2? Nó được một lúc kể từ khi chúng tôi đã làm điều này, nhưng đó là 0100. 463 00:29:53,510 --> 00:29:57,310 Vì vậy, đây là nơi 1s, đây là nơi 2, và sau đó nó không quan trọng những gì các nơi khác. 464 00:29:57,310 --> 00:30:00,610 Nói cách khác, trong hệ thập lục phân, bạn có thể nói 0x20, 465 00:30:00,610 --> 00:30:04,340 nhưng nếu sau đó bạn suy nghĩ về 2 là những gì và làm thế nào là nó trong hệ nhị phân, 466 00:30:04,340 --> 00:30:07,130 0 là gì và thế nào là nó trong hệ nhị phân, 467 00:30:07,130 --> 00:30:10,440 các câu trả lời cho những câu hỏi này và điều này, tương ứng. 468 00:30:10,440 --> 00:30:14,380 Vì vậy, 0x20 xảy ra để đại diện cho mô hình của 8 bit, 469 00:30:14,380 --> 00:30:16,880 đó chính là mặt nạ mà chúng tôi muốn. 470 00:30:16,880 --> 00:30:20,140 Vì vậy, đây là cho thời điểm này chỉ là một bài tập trí tuệ, 471 00:30:20,140 --> 00:30:24,520 nhưng thực tế là trong mã của nó thường phổ biến hơn để viết các hằng số như thế này 472 00:30:24,520 --> 00:30:28,360 trong hệ thập lục phân bởi vì sau đó các lập trình viên có thể tương đối dễ dàng, 473 00:30:28,360 --> 00:30:32,560 thậm chí nếu cần một số giấy và bút chì, tìm ra những gì mà mô hình của các bit 474 00:30:32,560 --> 00:30:35,960 bởi vì bạn có thể không chỉ thể hiện 0 và 1 thường trong mã. 475 00:30:35,960 --> 00:30:38,540 Bạn không thể đi 00.010 và vv. 476 00:30:38,540 --> 00:30:42,380 >> Bạn phải chọn ký hiệu thập phân hoặc thập lục phân hay bát phân hoặc khác. 477 00:30:42,380 --> 00:30:47,540 Hầu hết mọi người có xu hướng chọn hệ thập lục phân chỉ đơn giản là để mỗi chữ số đại diện cho 4 bit 478 00:30:47,540 --> 00:30:49,320 và bạn có thể làm điều này toán học nhanh chóng. 479 00:30:49,320 --> 00:30:54,990 Và tôi sẽ vẫy tay của tôi tại toupper, đó là gần như giống nhau, nó trông gần như giống hệt nhau. 480 00:30:54,990 --> 00:31:01,900 Toupper xảy ra để sử dụng không phải là nhà điều hành hoặc là anh chàng này và df. 481 00:31:01,900 --> 00:31:09,300 Df đại diện cho điều gì? df? Bất cứ ai? >> [Sinh viên] 255. 482 00:31:09,300 --> 00:31:12,780 255? Không 255. Đó sẽ là ff. 483 00:31:12,780 --> 00:31:15,210 Chúng tôi sẽ để lại một trong những điều này như là một ít tập thể dục. 484 00:31:15,210 --> 00:31:23,460 Nhưng nếu bạn đi từ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 và sau đó điều gì sẽ đến sau 9? 485 00:31:23,460 --> 00:31:26,510 Chúng tôi đang loại ra khỏi chữ số thập phân, nhưng trong hệ thập lục phân, những gì đến sau 9? 486 00:31:26,510 --> 00:31:29,510 [Sinh viên] a. >> Vì vậy, a, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Bạn có thể tìm ra từ đó những gì mô hình của các bit d thực sự đại diện. 488 00:31:33,470 --> 00:31:38,850 Và nếu chúng ta làm toán, chúng ta sẽ thấy rằng mặt nạ bạn sẽ nhận được trở lại là giống hệt nhau này. 489 00:31:38,850 --> 00:31:45,580 Đây là f, tất cả các 1s, và điều này là d. Vì vậy, df đại diện cho mặt nạ đó. Được rồi. 490 00:31:45,580 --> 00:31:50,980 Và cuối cùng, không phải để làm những thứ âm thanh siêu, siêu kỹ thuật, 491 00:31:50,980 --> 00:31:53,840 nhưng giả sử chúng ta muốn viết một chương trình mà thực hiện điều này. 492 00:31:53,840 --> 00:31:58,960 Hãy để tôi đi trước và thực hiện nhị phân, mà là một chương trình trong một tập tin gọi là binary.c. 493 00:31:58,960 --> 00:32:02,050 Và bây giờ cho phép tôi chạy nhị phân và cung cấp cho tôi một số nguyên không âm. 494 00:32:02,050 --> 00:32:03,960 Hãy bắt đầu dễ dàng và gõ vào 0. 495 00:32:03,960 --> 00:32:09,010 Điều này bây giờ là một chương trình in ra một số nguyên trong biểu diễn nhị phân của nó. 496 00:32:09,010 --> 00:32:13,470 Vì vậy, nếu tôi chơi game này một lần nữa và loại chỉ trong 1, tôi cần phải có được một đại diện 32-bit của 1. 497 00:32:13,470 --> 00:32:15,490 Nếu tôi làm điều này một lần nữa với 2, tôi sẽ nhận được điều đó. 498 00:32:15,490 --> 00:32:19,310 Nếu tôi làm 7, tôi sẽ nhận được một 1s vài lúc kết thúc và vv. 499 00:32:19,310 --> 00:32:22,740 Nó chỉ ra tôi đề cập đến điều này bởi vì với hoạt động bitwise 500 00:32:22,740 --> 00:32:25,490 bạn thực sự có thể làm 1 điều khác là tốt. 501 00:32:25,490 --> 00:32:29,130 Bạn có thể tạo ra những mặt nạ tự động. 502 00:32:29,130 --> 00:32:32,800 Hãy xem xét ví dụ 1 cuối cùng liên quan đến hoạt động Bitwise. 503 00:32:32,800 --> 00:32:35,490 Đây là phần đầu tiên của mã này, nhắc nhở người dùng cho một số, 504 00:32:35,490 --> 00:32:38,130 và nó khẳng định rằng bạn cung cấp cho tôi một số nguyên không âm. 505 00:32:38,130 --> 00:32:39,780 Vì vậy, đó là sắp xếp các công cụ trường học cũ. 506 00:32:39,780 --> 00:32:41,980 Nhưng đây là một cái gì đó là loại thú vị. 507 00:32:41,980 --> 00:32:44,910 >> Làm thế nào để đi về việc in một số trong hệ nhị phân? 508 00:32:44,910 --> 00:32:48,970 Lần đầu tiên tôi lặp lại từ những gì những gì? 509 00:32:48,970 --> 00:32:52,270 Kích thước của một int thường là gì, ít nhất là trong thiết bị? >> [Sinh viên] 4. 510 00:32:52,270 --> 00:32:57,130 Đó là 4. Vì vậy, 4 * 8 là 32 - 1 là 31. 511 00:32:57,130 --> 00:33:02,590 Vì vậy, nếu tôi bắt đầu đếm từ 31, đại diện cho, nó quay ra, 512 00:33:02,590 --> 00:33:07,630 chỉ khái niệm, các bit 31 hoặc thứ tự các bit cao nhất, đó là anh chàng này ở đây, 513 00:33:07,630 --> 00:33:09,650 trong khi đây là có được bit 0. 514 00:33:09,650 --> 00:33:12,850 Vì vậy, đây là một chút 01 ... bit 31. 515 00:33:12,850 --> 00:33:14,950 Vì vậy, mã này đang làm gì? 516 00:33:14,950 --> 00:33:20,140 Thông báo này cho vòng lặp, mặc dù có vẻ khó hiểu, chỉ là lặp lại từ 31 xuống 0. Có bấy nhiêu thôi. 517 00:33:20,140 --> 00:33:24,530 Vì vậy, phần thú vị hiện nay là phải trong 5 dòng ở đây. 518 00:33:24,530 --> 00:33:28,110 Chú ý rằng trong dòng này tôi tuyên bố một biến gọi là mặt nạ 519 00:33:28,110 --> 00:33:30,790 để phù hợp với câu chuyện của chúng ta về những con số màu vàng. 520 00:33:30,790 --> 00:33:32,200 Và sau đó điều này đang làm gì? 521 00:33:32,200 --> 00:33:35,720 Đây là một nhà điều hành bitwise chúng tôi đã không nhìn thấy trước, rất có thể. 522 00:33:35,720 --> 00:33:38,300 Đó là các nhà điều hành dịch chuyển trái. 523 00:33:38,300 --> 00:33:40,060 Toán tử này thực hiện điều này. 524 00:33:40,060 --> 00:33:44,920 Dưới đây là số 1, và nếu bạn làm tôi lại thay đổi, sự thay đổi trái, 525 00:33:44,920 --> 00:33:49,260 làm những gì bạn nghĩ rằng có tác dụng làm mà cá nhân 1? 526 00:33:49,260 --> 00:33:51,290 Nghĩa đen thay đổi nó. 527 00:33:51,290 --> 00:33:57,540 Vì vậy, nếu số 1 là những gì bạn có trên bên trái và bạn bắt đầu bằng cách khởi tạo i đến 31, 528 00:33:57,540 --> 00:34:03,490 đó là những gì sẽ làm gì? Nó sẽ mất số 1 này và thay đổi nó 31 địa điểm ở đây. 529 00:34:03,490 --> 00:34:06,210 Và bởi vì rõ ràng là không có chữ số khác đằng sau nó, 530 00:34:06,210 --> 00:34:10,350 những người theo mặc định sẽ được thay thế với số 0. 531 00:34:10,350 --> 00:34:15,120 Vì vậy, bạn sẽ bắt đầu với số 1, trong đó tất nhiên trông như thế này - 532 00:34:15,120 --> 00:34:18,659 và để cho tôi vẽ nó trên đây ở trung tâm. 533 00:34:18,659 --> 00:34:22,139 Và sau đó khi bạn chuyển sang bên trái, anh chàng này về cơ bản đi theo cách này. 534 00:34:22,139 --> 00:34:24,659 Nhưng ngay sau khi bạn làm điều đó, 0 được lấp đầy. 535 00:34:24,659 --> 00:34:28,360 Nếu bạn thay đổi nó một lần thứ hai, nó đi theo cách này và 0 khác được lấp đầy. 536 00:34:28,360 --> 00:34:31,000 >> Bạn thay đổi nó một lần nữa và sau đó 0 khác được lấp đầy. 537 00:34:31,000 --> 00:34:37,900 Vì vậy, nếu bạn làm điều này điều của 1 << i 31 địa điểm, bạn sẽ nhận được một mặt nạ 538 00:34:37,900 --> 00:34:42,550 đó là 32 ký tự, là tận cùng bên trái trong số đó là một 1, 539 00:34:42,550 --> 00:34:45,199 tất cả các phần còn lại trong số đó là một 0. 540 00:34:45,199 --> 00:34:50,880 Và nó biến ra, như một sang một bên, thay đổi một số bên trái như thế này 541 00:34:50,880 --> 00:34:53,530 cũng tình cờ, và đôi khi thuận tiện, 542 00:34:53,530 --> 00:34:57,520 có tác dụng làm những gì con số đó? >> [Sinh viên] Tăng gấp đôi nó. 543 00:34:57,520 --> 00:35:00,980 Tăng gấp đôi nó bởi vì mỗi cột vị trí số 1, 2 nơi, nơi 4s, 544 00:35:00,980 --> 00:35:05,030 8s nơi, nơi 16 - họ sẽ tăng gấp đôi tất cả như bạn đi bên trái. 545 00:35:05,030 --> 00:35:09,500 Hay đúng hơn, khi bạn chuyển 1s bạn sẽ kết thúc tăng gấp đôi giá trị của số. 546 00:35:09,500 --> 00:35:12,070 Bạn có thể làm biến đổi thú vị của các chữ số 547 00:35:12,070 --> 00:35:15,640 bằng cách chuyển tất cả mọi thứ theo cách này bởi quyền hạn của 2. 548 00:35:15,640 --> 00:35:17,150 Vì vậy, làm thế nào để làm việc này? 549 00:35:17,150 --> 00:35:22,580 Điều này sau đó mang lại cho tôi một chiếc mặt nạ đó là tất cả 0s trừ 1 ở vị trí chính xác tôi muốn nó, 550 00:35:22,580 --> 00:35:27,920 và sau đó biểu thức này, bị mất cắp từ toupper.c, 551 00:35:27,920 --> 00:35:31,770 chỉ đơn giản là nói lấy số n mà người sử dụng gõ vào, 552 00:35:31,770 --> 00:35:34,730 "Và" với chiếc mặt nạ, và bạn đang đi để có được? 553 00:35:34,730 --> 00:35:39,200 Bạn đang đi để có được một 1 nếu có là 1 trong vị trí đó đeo mặt nạ, 554 00:35:39,200 --> 00:35:41,570 hoặc bạn sẽ nhận được một 0 nếu không có. 555 00:35:41,570 --> 00:35:44,370 Và do đó, tất cả các chương trình này không có hiệu quả là nó có một vòng lặp, 556 00:35:44,370 --> 00:35:48,340 và nó tạo ra một mặt nạ với một 1 ở đây, sau đó một 1 ở đây, sau đó một 1 ở đây, 557 00:35:48,340 --> 00:35:52,950 và nó sử dụng Bitwise và lừa này để nói là có một bit 1 trong đầu vào của người sử dụng ở đây? 558 00:35:52,950 --> 00:35:59,220 >> Là có một bit 1 trong đầu vào của người sử dụng ở đây? Và nếu như vậy, nghĩa là in 1, khác in 0. 559 00:35:59,220 --> 00:36:03,780 Chúng tôi đang làm điều này với ints chỉ vì đó là lý do tại sao chúng tôi đang làm 32 bit thay vì 8, 560 00:36:03,780 --> 00:36:06,900 nhưng những gì chúng tôi đã giới thiệu sau đó là Bitwise và bitwise này hoặc, 561 00:36:06,900 --> 00:36:10,450 và nhà điều hành này chuyển trái, mà không phải là thường xuyên terribly hữu ích, 562 00:36:10,450 --> 00:36:12,230 nhưng hóa ra chúng có thể được. 563 00:36:12,230 --> 00:36:16,560 Trong thực tế, nếu bạn đã để đại diện cho một cái gì đó giống như một mảng của Booleans 564 00:36:16,560 --> 00:36:21,260 chỉ để đại diện cho đúng hay sai, giả sử bạn muốn theo dõi hay không 565 00:36:21,260 --> 00:36:24,630 một căn phòng đầy đủ của 300 học sinh là hiện tại, 566 00:36:24,630 --> 00:36:29,420 bạn có thể khai báo một mảng có kích thước 300 loại bool để bạn có được 300 bools, 567 00:36:29,420 --> 00:36:33,090 và bạn có thể thiết lập mỗi đúng nếu một người nào đó và sai khác. 568 00:36:33,090 --> 00:36:37,550 Tại sao là đại diện trong cấu trúc dữ liệu đó không hiệu quả? 569 00:36:39,370 --> 00:36:44,800 Gì xấu về việc thiết kế các cấu trúc dữ liệu, một mảng của 300 bools? 570 00:36:46,190 --> 00:36:49,600 Bool trong thực tế, bên dưới mui xe là gì? 571 00:36:49,600 --> 00:36:52,310 Điều này cũng là một cái gì đó mà có thể không được quen thuộc. 572 00:36:52,310 --> 00:36:53,720 Hóa ra là không bool. 573 00:36:53,720 --> 00:36:56,620 Nhớ là chúng tôi loại được tạo ra với file cs50.h, 574 00:36:56,620 --> 00:36:58,630 mà bản thân nó bao gồm tiêu chuẩn bool. 575 00:36:58,630 --> 00:37:00,930 C là loại ngu ngốc, mặc dù, khi nói đến bool. 576 00:37:00,930 --> 00:37:04,880 Nó sử dụng 8 bit để đại diện cho tất cả các bool, là hoàn toàn lãng phí 577 00:37:04,880 --> 00:37:09,040 bởi vì rõ ràng, bao nhiêu bit để bạn cần phải đại diện cho một bool? Chỉ cần 1. 578 00:37:09,040 --> 00:37:13,190 Vì vậy, nó chỉ ra rằng nếu bây giờ bạn có khả năng với các nhà khai thác bitwise 579 00:37:13,190 --> 00:37:17,760 để thao tác bit cá nhân ngay cả trong một char, ngay cả trong một byte đơn, 580 00:37:17,760 --> 00:37:21,380 nó quay ra bạn có thể làm giảm bộ nhớ cần thiết để đại diện cho một cái gì đó ngu ngốc 581 00:37:21,380 --> 00:37:25,490 như cấu trúc: dữ liệu đó theo kiểu của một yếu tố của 8. 582 00:37:25,490 --> 00:37:29,820 Thay vì sử dụng 8 bit để đại diện cho đúng hay sai, bạn có nghĩa là có thể sử dụng 1 583 00:37:29,820 --> 00:37:34,500 bằng cách sử dụng một byte duy nhất cho mỗi 8 học sinh trong lớp học 584 00:37:34,500 --> 00:37:41,990 và điều chỉnh từ 0 1 bit cá nhân bằng cách sử dụng các loại thủ đoạn ở mức độ thấp. 585 00:37:43,850 --> 00:37:49,460 Điều đó thực sự chấm dứt năng lượng. Có bất kỳ câu hỏi về hoạt động Bitwise? 586 00:37:49,460 --> 00:37:52,710 >> Yeah. >> [Sinh viên] Có một nhà điều hành độc quyền hay không? 587 00:37:52,710 --> 00:37:56,440 Vâng. Có một nhà điều hành độc quyền hoặc trông như thế này, ^, biểu tượng cà rốt, 588 00:37:56,440 --> 00:38:02,070 có nghĩa là chỉ là điều đầu tiên hoặc điều thứ hai có thể là một 1 cho đầu ra là một 1. 589 00:38:02,070 --> 00:38:07,750 Đó cũng là một không, ~, mà sẽ cho phép bạn để đảo ngược một 0 đến 1 hoặc ngược lại cũng. 590 00:38:07,750 --> 00:38:11,600 Và cũng có một nhà điều hành thay đổi quyền, >>, mà là đối diện của một trong những chúng ta đã thấy. 591 00:38:11,600 --> 00:38:13,850 Được rồi. Hãy để có những điều đến một cấp độ cao hơn. 592 00:38:13,850 --> 00:38:16,770 Chúng tôi bắt đầu bằng cách nói chuyện về văn bản và sau đó nén 593 00:38:16,770 --> 00:38:19,650 và đại diện cho các văn bản với số lượng ít hơn của các bit; 594 00:38:19,650 --> 00:38:22,890 chúng ta đã nói một chút về việc làm thế nào chúng ta có thể bắt đầu thao tác mọi thứ trên một mức độ bitwise. 595 00:38:22,890 --> 00:38:26,640 Bây giờ hãy thu nhỏ trở lại tăng 10.000 feet để đại diện 596 00:38:26,640 --> 00:38:29,250 điều phức tạp hơn như đồ họa. 597 00:38:29,250 --> 00:38:32,950 Ở đây chúng tôi có một lá cờ của Đức, ở đây chúng tôi có một của Pháp. 598 00:38:32,950 --> 00:38:36,350 Đây có thể được đại diện trong các định dạng tập tin bạn có thể biết GIF, ví dụ. 599 00:38:36,350 --> 00:38:40,030 Nếu bạn đã từng nhìn thấy một hình ảnh trên trang web kết thúc. Gif, 600 00:38:40,030 --> 00:38:43,000 đây là một trao đổi định dạng đồ họa. 601 00:38:43,000 --> 00:38:47,530 Đây là 2 lá cờ ở đây loại cho vay mình đến nén 602 00:38:47,530 --> 00:38:52,050 cho những gì lý do có lẽ rõ ràng? >> [Không nghe được sinh viên phản ứng] 603 00:38:52,050 --> 00:38:53,440 Có rất nhiều sự lặp lại, phải không? 604 00:38:53,440 --> 00:38:57,270 Để gửi lá cờ của Đức, nghĩ về điều này như là một hình ảnh trên màn hình 605 00:38:57,270 --> 00:38:59,030 sao trong những ngày đầu của bạn. 606 00:38:59,030 --> 00:39:02,380 Bạn có thể nhớ lại rằng có điểm ảnh cá nhân chấm hoặc soạn một hình ảnh. 607 00:39:02,380 --> 00:39:06,650 >> Có cả một hàng chấm đen và toàn bộ hàng khác của các chấm đen. 608 00:39:06,650 --> 00:39:10,110 Có một loạt các hàng chấm đen mà chúng ta có thể thấy nếu chúng ta thực sự thu nhỏ trong, 609 00:39:10,110 --> 00:39:13,370 giống như khi chúng ta phóng to trên khuôn mặt của Rob trong Photoshop. 610 00:39:13,370 --> 00:39:15,500 Ngay khi chúng tôi nhận sâu hơn và sâu hơn và sâu hơn vào hình ảnh, 611 00:39:15,500 --> 00:39:19,990 bạn bắt đầu nhìn thấy các pixelation, tất cả các hình vuông mà bao gồm mắt của mình trong trường hợp đó. 612 00:39:19,990 --> 00:39:24,130 Tương tự đối phó ở đây. Nếu chúng ta phóng to khá một chút, bạn sẽ thấy dấu chấm cá nhân. 613 00:39:24,130 --> 00:39:27,110 Vâng, đây là một sự lãng phí của các bit. 614 00:39:27,110 --> 00:39:32,120 Nếu 1/3 của lá cờ là màu đen và 1/3 của lá cờ là màu vàng và vv, 615 00:39:32,120 --> 00:39:34,860 tại sao chúng ta không thể bằng cách nào đó nén lá cờ này? 616 00:39:34,860 --> 00:39:39,560 Và ngay cả cờ Pháp có thể được nén mặc dù mô hình là một chút khác nhau. 617 00:39:39,560 --> 00:39:44,120 Nó chỉ ra các định dạng file GIF là một định dạng nén lossless, 618 00:39:44,120 --> 00:39:48,420 có nghĩa là bạn có thể có một hình ảnh như cờ Đức ở đây, 619 00:39:48,420 --> 00:39:53,540 bạn có thể ném đi rất nhiều của các bit của nó mà không bị mất chất lượng. 620 00:39:53,540 --> 00:39:55,340 Điều này là trái ngược với một cái gì đó giống như hình ảnh JPEG, 621 00:39:55,340 --> 00:39:57,050 mà hầu hết chúng ta có thể quen thuộc hơn. 622 00:39:57,050 --> 00:39:59,000 Facebook hình ảnh và ảnh trên Flickr và các loại tương tự 623 00:39:59,000 --> 00:40:02,200 gần như luôn luôn lưu lại dưới dạng hình ảnh JPEG khi họ đang tải lên, 624 00:40:02,200 --> 00:40:08,100 nhưng hình ảnh JPEG là một định dạng lossy - nhờ đó mà bạn vứt bit - lossy 625 00:40:08,100 --> 00:40:10,430 nhưng bạn cũng vứt chất lượng. 626 00:40:10,430 --> 00:40:13,890 Và vì vậy nếu bạn nén hình ảnh với Photoshop hoặc tải chúng lên Facebook 627 00:40:13,890 --> 00:40:15,580 hoặc đưa họ về một chiếc điện thoại thực sự crappy, 628 00:40:15,580 --> 00:40:19,510 bạn biết rằng hình ảnh bắt đầu để có được rất lem luốt và pixelated, 629 00:40:19,510 --> 00:40:22,290 và đó là bởi vì nó được nén bằng máy tính hoặc điện thoại 630 00:40:22,290 --> 00:40:24,550 bằng cách ném thông tin đi. 631 00:40:24,550 --> 00:40:28,500 Tuy nhiên, GIF là tuyệt vời ở chỗ nó có thể sử dụng các bit ít hơn nó có thể theo mặc định 632 00:40:28,500 --> 00:40:30,750 mà không bị mất bất kỳ thông tin nào. 633 00:40:30,750 --> 00:40:32,410 >> Và nó về cơ bản như sau. 634 00:40:32,410 --> 00:40:38,740 Thay vì lưu trữ trong một tập tin như một BMP sẽ một triple RGB cho màu đen, màu đen, màu đen, màu đen, 635 00:40:38,740 --> 00:40:42,570 màu đen, màu đen, màu đen, màu đen, màu đen, màu đen, màu đen, màu đen và vân vân, 636 00:40:42,570 --> 00:40:45,640 đúng hơn, định dạng GIF sẽ nói, "Black" 637 00:40:45,640 --> 00:40:48,330 và sau đó, "Lặp lại 100 lần", hoặc một cái gì đó như thế. 638 00:40:48,330 --> 00:40:52,280 "Black, lặp lại 100 lần, màu đen, lặp lại 100 lần ..." 639 00:40:52,280 --> 00:40:54,530 "Vàng, lặp lại 100 lần." 640 00:40:54,530 --> 00:40:57,200 Và như vậy nó ghi nhớ, về cơ bản, các điểm ảnh tận cùng bên trái 641 00:40:57,200 --> 00:41:02,160 và sau đó mã hóa bằng cách nào đó các khái niệm lặp đi lặp lại rằng điểm ảnh một lần nữa và một lần nữa. 642 00:41:02,160 --> 00:41:06,110 Vì vậy, GIF sau đó có thể nén mình mà không bị mất bất kỳ thông tin nào. 643 00:41:06,110 --> 00:41:09,510 Nhưng nếu bạn đã đoán, nếu đó là các thuật toán mà GIF sử dụng, 644 00:41:09,510 --> 00:41:13,180 những lá cờ này, mặc dù họ trông giống hệt nhau về kích thước, 645 00:41:13,180 --> 00:41:19,620 là có được nhỏ hơn khi được lưu trên đĩa như là một GIF? >> [Sinh viên] Đức. 646 00:41:19,620 --> 00:41:21,660 Đức sẽ nhỏ hơn? Tại sao? 647 00:41:21,660 --> 00:41:26,620 [Sinh viên] Bởi vì bạn lặp lại nó nhiều, nhiều lần theo chiều ngang 648 00:41:26,620 --> 00:41:29,010 và sau đó bạn lặp lại một thời gian khác. >> Chính xác. 649 00:41:29,010 --> 00:41:32,020 Bởi vì những người phát minh ra GIF chỉ là loại tự ý quyết định 650 00:41:32,020 --> 00:41:36,040 rằng sự lặp lại sẽ được thừa hưởng theo chiều ngang và theo chiều ngang. 651 00:41:36,040 --> 00:41:40,900 Có rất nhiều chi tiết lặp đi lặp lại theo chiều ngang đây trong lá cờ Đức hơn trong lá cờ Pháp. 652 00:41:40,900 --> 00:41:44,430 Vì vậy, nếu chúng ta thực sự mở ra một thư mục trên ổ cứng của tôi có những ảnh GIF, 653 00:41:44,430 --> 00:41:51,920 bạn thực sự có thể thấy rằng cờ Đức ở đây là 2 kilobyte và một của Pháp là 4 kilobyte. 654 00:41:51,920 --> 00:41:54,080 Nó sẽ xảy ra là một sự trùng hợp ngẫu nhiên đó là một trong hai lần khác, 655 00:41:54,080 --> 00:41:57,960 nhưng đó là trong thực tế, các trường hợp đó, lá cờ Pháp là lớn hơn nhiều. 656 00:41:57,960 --> 00:42:01,250 >> Mặc dù chúng ta đang nói ở đây về đồ họa, cùng một ý tưởng có thể áp dụng đối với 657 00:42:01,250 --> 00:42:05,150 không phải những thứ như cờ nhưng hình ảnh là một chút phức tạp hơn. 658 00:42:05,150 --> 00:42:08,170 Nếu bạn có một hình ảnh của một quả táo, chắc chắn có rất nhiều trùng lặp, 659 00:42:08,170 --> 00:42:11,040 do đó, bằng cách nào đó chúng ta có thể nhớ rằng nền mặc định là màu xanh 660 00:42:11,040 --> 00:42:13,230 và không, như hình ảnh bên phải, 661 00:42:13,230 --> 00:42:16,830 phải nhớ màu sắc của mỗi điểm ảnh trong bức hình này. 662 00:42:16,830 --> 00:42:21,060 Vì vậy, chúng ta có thể ném bit đi mà không bị mất thông tin. 663 00:42:21,060 --> 00:42:23,340 Quả táo vẫn còn trông như nhau. 664 00:42:23,340 --> 00:42:27,510 Trong ví dụ này, ở đây, bạn có thể xem những gì sẽ xảy ra trong một bộ phim. 665 00:42:27,510 --> 00:42:31,970 Những đại diện cho cuộn phim trường cũ theo đó hình ảnh trên có 666 00:42:31,970 --> 00:42:36,900 bạn có lái xe RV qua một ngôi nhà và một cái cây. 667 00:42:36,900 --> 00:42:42,130 Và như van mà các ổ đĩa qua từ trái sang phải, những gì rõ ràng là không thay đổi? 668 00:42:42,130 --> 00:42:45,320 Ngôi nhà không đi bất cứ nơi nào, và cây không phải là đi bất cứ nơi nào. 669 00:42:45,320 --> 00:42:47,700 Điều duy nhất mà di chuyển là xe trong trường hợp này. 670 00:42:47,700 --> 00:42:51,650 Vì vậy, khi nền không thay đổi cho thấy, những gì bạn có thể làm trong các bộ phim 671 00:42:51,650 --> 00:42:56,530 tương tự như vậy chỉ cần vứt bỏ thông tin mà không thay đổi giữa các khung hình. 672 00:42:56,530 --> 00:42:58,900 Điều này thường được biết đến như là nén interframe 673 00:42:58,900 --> 00:43:02,120 theo đó nếu khung này trông gần giống như một trong những điều này, 674 00:43:02,120 --> 00:43:05,390 chúng ta không bận tâm lưu trữ trên đĩa bất kỳ các thông tin giống hệt nhau 675 00:43:05,390 --> 00:43:09,250 những khung hình trung gian, chúng ta chỉ sử dụng một lần trong một khung hình chính 676 00:43:09,250 --> 00:43:13,420 mà thực sự lưu trữ thông tin dư thừa chỉ là một kiểm tra sanity ít. 677 00:43:13,420 --> 00:43:18,620 >> Ngược lại, một cách tiếp cận video nén là trong ví dụ thứ hai và thấp hơn ở đây, 678 00:43:18,620 --> 00:43:23,970 thay vì lưu trữ 30 khung hình, tại sao không bạn chỉ cần lưu trữ 15 khung hình một giây để thay thế? 679 00:43:23,970 --> 00:43:27,070 Thay vì các loại phim chảy đẹp, hoàn hảo, 680 00:43:27,070 --> 00:43:30,060 nó có thể giống như nó nói lắp một chút, một chút trường học cũ, 681 00:43:30,060 --> 00:43:37,190 nhưng ảnh hưởng thực sẽ được sử dụng các bit ít hơn nếu không có thể là cần thiết. 682 00:43:37,190 --> 00:43:39,240 Vì vậy, nơi thực hiện điều này sau đó lại cho chúng tôi? 683 00:43:39,240 --> 00:43:41,700 Đó là một chút của một sang một bên trên nơi nào khác bạn có thể đi với nén. 684 00:43:41,700 --> 00:43:45,140 Để thêm vào đó, một lớp học như CS175 đây. 685 00:43:45,140 --> 00:43:46,990 Dưới đây là một ví dụ khác trong video. 686 00:43:46,990 --> 00:43:49,190 Nếu ong là điều duy nhất di chuyển, 687 00:43:49,190 --> 00:43:51,790 bạn thực sự có thể vứt bỏ thông tin trong những khung hình trung 688 00:43:51,790 --> 00:43:55,260 bởi vì hoa và bầu trời và lá không thay đổi. 689 00:43:55,260 --> 00:43:57,960 Nhưng Bây giờ chúng ta hãy xem xét 1 điều cuối cùng. 690 00:43:57,960 --> 00:44:03,890 Trong 5 phút tiếp theo, chúng tôi rời khỏi C đằng sau mãi mãi trong bài giảng? Vâng. Không có trong các psets, mặc dù. 691 00:44:03,890 --> 00:44:10,210 Cuối cùng câu chuyện về C và sau đó chúng tôi nhận được công cụ rất sexy 692 00:44:10,210 --> 00:44:13,870 liên quan đến HTML và Web và woo-hoo. Được rồi. 693 00:44:13,870 --> 00:44:16,050 Ở đây chúng tôi đi. Đó là động lực. 694 00:44:16,050 --> 00:44:20,020 Hóa ra tất cả thời gian này khi chúng tôi đã được viết chương trình chúng tôi chạy kêu vang. 695 00:44:20,020 --> 00:44:23,890 Và Clang, chúng tôi đã nói từ tuần đầu tiên khá nhiều, có mã nguồn 696 00:44:23,890 --> 00:44:25,740 và chuyển đổi nó thành mã đối tượng. 697 00:44:25,740 --> 00:44:28,540 Phải mất C và chuyển đổi nó thành 0 và 1. 698 00:44:28,540 --> 00:44:32,150 Tôi đã loại được nói dối với bạn trong một vài tuần bởi vì nó không hoàn toàn đơn giản như vậy. 699 00:44:32,150 --> 00:44:36,750 >> Có rất nhiều chi tiết bên dưới mui xe khi bạn chạy một chương trình như Clang. 700 00:44:36,750 --> 00:44:39,560 Trong thực tế, quá trình biên dịch một chương trình thực sự có thể được tóm tắt, 701 00:44:39,560 --> 00:44:42,210 như bạn có thể nhớ lại từ video của Rob trên trình biên dịch, 702 00:44:42,210 --> 00:44:47,580 thành 4 bước: tiền xử lý, biên soạn, lắp ráp, và liên kết. 703 00:44:47,580 --> 00:44:51,950 Nhưng chúng tôi trong lớp và hầu hết mọi người trên thế giới thường tóm tắt tất cả các bước 704 00:44:51,950 --> 00:44:54,410 như chỉ là "biên dịch." 705 00:44:54,410 --> 00:44:58,070 Nhưng nếu chúng ta bắt đầu với mã nguồn như thế này, nhớ lại điều này có lẽ là chương trình C đơn giản 706 00:44:58,070 --> 00:45:03,530 chúng tôi đã viết vậy, đến nay, nhớ lại rằng khi biên dịch nó sẽ trông như thế này. 707 00:45:03,530 --> 00:45:07,310 Nhưng có thực sự là một bước trung gian, và những bước như sau. 708 00:45:07,310 --> 00:45:10,750 Lần đầu tiên có điều này ở đầu này và hầu hết các chương trình của chúng tôi, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 # Bao gồm làm cho chúng ta? 711 00:45:17,210 --> 00:45:24,150 Nó khá nhiều bản sao và bột nhão nội dung của stdio.h vào tập tin của tôi rằng tại sao? 712 00:45:24,150 --> 00:45:27,220 Tại sao tôi lại quan tâm đến nội dung của stdio.h? Những gì trong đó quan tâm? 713 00:45:27,220 --> 00:45:32,310 Printf kê khai, mẫu thử nghiệm của mình, để trình biên dịch sau đó biết những gì tôi có ý nghĩa 714 00:45:32,310 --> 00:45:34,900 khi tôi đề cập đến chức năng này printf. 715 00:45:34,900 --> 00:45:39,390 Vì vậy, bước 1 trong việc biên soạn là tiền xử lý, theo đó một chương trình như Clang 716 00:45:39,390 --> 00:45:43,450 hoặc một số chương trình trợ giúp mà kêu vang đi kèm với lần đọc đầu mã của bạn xuống dưới, 717 00:45:43,450 --> 00:45:47,740 trái sang phải, và bất cứ lúc nào nó thấy một biểu tượng # theo sau bởi một từ khóa như bao gồm, 718 00:45:47,740 --> 00:45:53,980 nó thực hiện hoạt động đó, sao chép và dán trong stdio.h trường hợp vào tập tin của bạn. 719 00:45:53,980 --> 00:45:55,510 Đó là bước 1. 720 00:45:55,510 --> 00:45:59,620 Sau đó, bạn có một tập tin C lớn hơn vì các bản sao lớn, công việc dán đó chỉ xảy ra rất nhiều. 721 00:45:59,620 --> 00:46:01,710 >> Bước 2 giờ được biên dịch. 722 00:46:01,710 --> 00:46:04,880 Nhưng hóa ra biên dịch có mã nguồn mà trông như thế này 723 00:46:04,880 --> 00:46:08,160 và biến nó thành một cái gì đó trông như thế này, 724 00:46:08,160 --> 00:46:12,560 mà đối với những người quen thuộc được gọi là? >> [Sinh viên] hội. >> Hội ngôn ngữ. 725 00:46:12,560 --> 00:46:16,700 Điều này thực sự là một cái gì đó nếu bạn mất CS61 bạn sẽ nhảy vào chi tiết hơn. 726 00:46:16,700 --> 00:46:22,380 Đây chỉ là về gần như là bạn có thể nhận được để viết 0 và 1 mình 727 00:46:22,380 --> 00:46:25,850 nhưng viết những điều theo cách như vậy mà vẫn làm cho ít nhất một chút ý nghĩa. 728 00:46:25,850 --> 00:46:30,760 Đây là những hướng dẫn của máy, và nếu chúng ta di chuyển xuống các chức năng chính ở đây, 729 00:46:30,760 --> 00:46:35,470 nhận thấy rằng có chỉ dẫn này đẩy, di chuyển hướng dẫn, trừ hướng dẫn, 730 00:46:35,470 --> 00:46:38,550 gọi hướng dẫn, và vv. 731 00:46:38,550 --> 00:46:42,930 Khi bạn nghe rằng máy tính của bạn có Intel bên trong, 732 00:46:42,930 --> 00:46:46,180 bạn có một CPU Intel trong Mac hoặc máy PC của bạn, điều đó không có nghĩa là gì? 733 00:46:46,180 --> 00:46:51,200 CPU đi kèm được xây dựng bởi các công ty như Intel hiểu hướng dẫn nhất định. 734 00:46:51,200 --> 00:46:55,770 Họ không có ý tưởng những chức năng như trao đổi hoặc một chính se, 735 00:46:55,770 --> 00:47:00,060 nhưng họ không biết những gì hướng dẫn rất thấp cấp như thêm, trừ, đẩy, 736 00:47:00,060 --> 00:47:02,430 di chuyển, gọi điện, và vv. 737 00:47:02,430 --> 00:47:06,170 Vì vậy, khi bạn biên dịch mã C vào lắp ráp ngôn ngữ, 738 00:47:06,170 --> 00:47:11,820 rất thân thiện với người sử dụng mã của bạn trông được chuyển đổi thành một cái gì đó trông như thế này, 739 00:47:11,820 --> 00:47:21,670 mà nghĩa đen di chuyển byte hoặc 4 byte xung quanh trong các đơn vị nhỏ như vậy trong và ngoài của CPU. 740 00:47:21,670 --> 00:47:26,820 Nhưng cuối cùng, khi Clang là sẵn sàng để có đại diện của các chương trình của bạn 741 00:47:26,820 --> 00:47:30,940 thành 0 và 1, sau đó bước được gọi là lắp ráp xảy ra, 742 00:47:30,940 --> 00:47:33,850 và điều này một lần nữa tất cả xảy ra trong chớp mắt khi chạy Clang. 743 00:47:33,850 --> 00:47:39,300 Chúng tôi bắt đầu ở đây, nó ra một tập tin như thế này, và sau đó nó chuyển đổi các 0 và 1. 744 00:47:39,300 --> 00:47:42,000 Và nếu bạn muốn quay trở lại tại một số điểm và thực sự thấy điều này trong hành động, 745 00:47:42,000 --> 00:47:48,220 nếu tôi đi vào hello1.c đây là một trong những chương trình đầu tiên chúng tôi nhìn - 746 00:47:48,220 --> 00:47:53,710 thông thường chúng tôi sẽ biên dịch này với hello1.c Clang và điều này sẽ cung cấp cho chúng tôi a.out. 747 00:47:53,710 --> 00:47:59,890 Nếu ngược lại, thay vào đó bạn cung cấp cho nó-S cờ, những gì bạn sẽ nhận được là hello1.s 748 00:47:59,890 --> 00:48:02,750 và bạn thực sự sẽ thấy ngôn ngữ lắp ráp. 749 00:48:02,750 --> 00:48:05,750 >> Tôi đang làm điều này cho một chương trình rất ngắn, nhưng nếu bạn đi trở lại cho Scramble 750 00:48:05,750 --> 00:48:08,740 hoặc Recover hoặc chương trình nào bạn đã viết và chỉ ra khỏi tò mò 751 00:48:08,740 --> 00:48:13,240 muốn để xem những gì nó thực sự trông như thế nào, những gì thực sự được đưa vào CPU, 752 00:48:13,240 --> 00:48:15,700 bạn có thể sử dụng mà-S cờ với Clang. 753 00:48:15,700 --> 00:48:17,770 Nhưng sau đó, cuối cùng, có vẫn còn 1 Gotcha. 754 00:48:17,770 --> 00:48:21,810 Dưới đây là 0 và 1 đại diện cho thực hiện của tôi trên thế giới, xin chào. 755 00:48:21,810 --> 00:48:25,530 Nhưng tôi sử dụng chức năng của người khác trong chương trình của tôi. 756 00:48:25,530 --> 00:48:28,710 Vì vậy, mặc dù quá trình này tôi có hello.c, 757 00:48:28,710 --> 00:48:34,280 nó được biên dịch vào lắp ráp mã, và sau đó nó được lắp ráp thành 0 và 1, 758 00:48:34,280 --> 00:48:37,460 chỉ có 0 và 1 được kết quả vào thời điểm này trong thời gian 759 00:48:37,460 --> 00:48:40,270 là những cái mà kết quả từ mã của tôi. 760 00:48:40,270 --> 00:48:44,400 Nhưng người đã viết printf, họ biên dịch mã của họ cách đây 20 năm 761 00:48:44,400 --> 00:48:47,000 và nó bây giờ cài đặt một nơi nào đó trên thiết bị, 762 00:48:47,000 --> 00:48:51,610 vì vậy chúng tôi bằng cách nào đó phải hợp nhất của mình 0 và 1 và 0 1s, 763 00:48:51,610 --> 00:48:56,160 và đó đưa chúng ta đến bước thứ 4 và cuối cùng của biên dịch, được gọi là liên kết. 764 00:48:56,160 --> 00:48:58,680 Vì vậy, ở phía bên trái, chúng ta có cùng một bức ảnh chính xác như trước: 765 00:48:58,680 --> 00:49:02,580 hello.c trở thành lắp ráp mã trở thành 0 và 1. 766 00:49:02,580 --> 00:49:05,960 Nhưng nhớ lại rằng tôi đã sử dụng thư viện I / O tiêu chuẩn trong mã của tôi, 767 00:49:05,960 --> 00:49:10,350 và điều đó có nghĩa là một nơi nào đó trên máy tính có một tập tin gọi là stdio.c 768 00:49:10,350 --> 00:49:13,980 hoặc ít nhất là phiên bản biên dịch của chúng vì một ai đó một vài năm trước đây 769 00:49:13,980 --> 00:49:18,530 biên soạn stdio.c vào mã lắp ráp và sau đó một bó toàn bộ 0 và 1. 770 00:49:18,530 --> 00:49:21,130 Đây là những gì được biết đến như một tĩnh hoặc một thư viện động. 771 00:49:21,130 --> 00:49:23,350 Đó là một số tập tin ngồi một nơi nào đó trong thiết bị. 772 00:49:23,350 --> 00:49:28,710 >> Nhưng cuối cùng, tôi phải mất 0 và số 1 của tôi và của người đó 0 và 1 773 00:49:28,710 --> 00:49:32,760 và bằng cách nào đó liên kết chúng lại với nhau, nghĩa là kết hợp các số 0 và 1 774 00:49:32,760 --> 00:49:37,900 vào một tập tin duy nhất được gọi là a.out hoặc hello1 hoặc bất cứ điều gì tôi gọi là chương trình của tôi 775 00:49:37,900 --> 00:49:43,320 do đó kết quả cuối cùng có tất cả các 1s và 0s soạn chương trình của tôi. 776 00:49:43,320 --> 00:49:45,660 Vì vậy, thời gian này, tất cả các học kỳ này khi bạn đã sử dụng Clang 777 00:49:45,660 --> 00:49:48,750 và thậm chí gần đây chạy make để chạy Clang, 778 00:49:48,750 --> 00:49:53,580 tất cả các bước đã được xảy ra loại ngay lập tức nhưng rất cố tình. 779 00:49:53,580 --> 00:49:57,830 Và vì vậy nếu bạn tiếp tục trong khoa học máy tính, cụ thể là CS61, 780 00:49:57,830 --> 00:50:00,850 đây là lớp mà bạn sẽ tiếp tục lột quay trở lại đó 781 00:50:00,850 --> 00:50:06,980 nói về hiệu quả, tác động an ninh, và như thế các chi tiết mức độ thấp hơn. 782 00:50:06,980 --> 00:50:09,220 Nhưng với điều đó, chúng tôi sắp rời khỏi C phía sau. 783 00:50:09,220 --> 00:50:11,420 Chúng ta hãy đi trước và đi nghỉ 5 phút của chúng tôi ngay bây giờ, 784 00:50:11,420 --> 00:50:14,190 và khi chúng ta trở lại: Internet. 785 00:50:17,280 --> 00:50:19,170 Được rồi. Chúng tôi đang trở lại. 786 00:50:19,170 --> 00:50:23,590 Bây giờ chúng ta bắt đầu nhìn của chúng tôi không chỉ ở HTML bởi vì, như bạn sẽ thấy, 787 00:50:23,590 --> 00:50:26,050 HTML chính nó thực sự là khá đơn giản 788 00:50:26,050 --> 00:50:29,270 nhưng thực sự tại lập trình web nói chung, kết nối mạng nói chung, 789 00:50:29,270 --> 00:50:31,770 và làm thế nào tất cả các công nghệ này đến với nhau 790 00:50:31,770 --> 00:50:35,400 để cho phép chúng tôi tạo ra các chương trình phức tạp hơn nhiều trên Internet 791 00:50:35,400 --> 00:50:38,690 hơn vậy, đến nay chúng tôi đã có thể trong các cửa sổ màu đen và trắng. 792 00:50:38,690 --> 00:50:42,140 Thật vậy, vào thời điểm này trong học kỳ mặc dù chúng tôi sẽ dành nhiều thời gian tương đối ít hơn 793 00:50:42,140 --> 00:50:46,200 trên PHP, HTML, CSS, JavaScript, SQL và nhiều hơn nữa, 794 00:50:46,200 --> 00:50:48,480 hầu hết các sinh viên làm cuối cùng làm dự án cuối cùng mà là dựa trên web 795 00:50:48,480 --> 00:50:51,230 bởi vì như bạn sẽ thấy, các nền bây giờ bạn có trong C 796 00:50:51,230 --> 00:50:54,450 rất nhiều áp dụng cho các ngôn ngữ cấp cao hơn. 797 00:50:54,450 --> 00:50:56,800 >> Và khi bạn bắt đầu suy nghĩ về dự án cuối cùng của bạn, 798 00:50:56,800 --> 00:50:59,940 trong đó, giống như vấn đề Thiết lập 0, nơi bạn được khuyến khích 799 00:50:59,940 --> 00:51:02,160 để làm bất cứ điều gì nhất quan tâm đến bạn Scratch 800 00:51:02,160 --> 00:51:05,790 dự án cuối cùng là cơ hội của bạn để có những kiến ​​thức mới và hiểu biết với C 801 00:51:05,790 --> 00:51:09,850 hoặc PHP hoặc JavaScript hoặc muốn ra cho một spin 802 00:51:09,850 --> 00:51:12,330 và tạo ra mảnh của bạn rất riêng của phần mềm cho thế giới xem. 803 00:51:12,330 --> 00:51:17,770 Và hạt giống bạn với những ý tưởng, biết rằng bạn có thể đứng đầu ở đây, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Hàng năm chúng tôi thu hút các ý tưởng từ các giảng viên và nhân viên và sinh viên trong khuôn viên trường 805 00:51:21,800 --> 00:51:27,330 chỉ để gửi ý tưởng của mình cho những điều thú vị mà có thể được giải quyết bằng cách sử dụng máy tính, 806 00:51:27,330 --> 00:51:29,860 sử dụng các trang web, sử dụng phần mềm. 807 00:51:29,860 --> 00:51:32,360 Vì vậy, nếu bạn đang đấu tranh để đến với một ý tưởng của riêng bạn, 808 00:51:32,360 --> 00:51:35,790 tất cả các phương tiện di chuyển thông qua các ý tưởng có từ năm nay và cuối cùng. 809 00:51:35,790 --> 00:51:39,990 Nó là hoàn toàn được giải quyết một dự án đã được giải quyết trước. 810 00:51:39,990 --> 00:51:44,540 Chúng ta đã thấy nhiều ứng dụng để nhìn thấy tình trạng của giặt trong khuôn viên trường, 811 00:51:44,540 --> 00:51:47,000 nhiều ứng dụng cho điều hướng menu phòng ăn, 812 00:51:47,000 --> 00:51:49,540 nhiều ứng dụng cho điều hướng danh mục khóa học và các loại tương tự. 813 00:51:49,540 --> 00:51:53,680 Và quả thực, trong một bài giảng trong tương lai và các cuộc hội thảo trong tương lai, 814 00:51:53,680 --> 00:51:57,750 chúng tôi sẽ giới thiệu cho bạn một số hàm API công bố công khai, cả hai thương mại 815 00:51:57,750 --> 00:52:02,520 cũng như ở đây có sẵn từ CS50 trong khuôn viên trường để bạn có thể truy cập vào dữ liệu 816 00:52:02,520 --> 00:52:04,910 và sau đó có thể làm những điều thú vị với nó. 817 00:52:04,910 --> 00:52:09,380 Vì vậy, các dự án cuối cùng trong một vài ngày khi chúng tôi phát hành các đặc điểm kỹ thuật, 818 00:52:09,380 --> 00:52:12,990 nhưng bây giờ, biết rằng bạn có thể làm việc solo hoặc với 1 hoặc 2 người bạn 819 00:52:12,990 --> 00:52:16,010 trên bất kỳ dự án quan tâm đến bạn nhất. 820 00:52:16,010 --> 00:52:18,080 Internet. 821 00:52:18,080 --> 00:52:22,300 Bạn đi trước và kéo ra khỏi máy tính xách tay của bạn, bạn hãy vào facebook.com cho lần đầu tiên, 822 00:52:22,300 --> 00:52:27,020 không đăng nhập trong thời gian gần đây, và nhấn Enter. Chính xác những gì sẽ xảy ra? 823 00:52:27,020 --> 00:52:30,150 >> Khi bạn nhấn Enter trên máy tính của bạn, một bó toàn bộ các bước 824 00:52:30,150 --> 00:52:32,600 bắt đầu sắp xếp kỳ diệu xảy ra. 825 00:52:32,600 --> 00:52:35,960 Vì vậy, các bạn ở đây trên máy chủ web, như Facebook là ở đây bên phải, 826 00:52:35,960 --> 00:52:42,500 và bằng cách nào đó bạn đang sử dụng ngôn ngữ này được gọi là HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP không phải là một ngôn ngữ lập trình. Đó là nhiều hơn của một giao thức. 828 00:52:46,770 --> 00:52:52,310 Nó là một bộ các công ước mà các trình duyệt web và máy chủ web sử dụng khi intercommunicating. 829 00:52:52,310 --> 00:52:54,360 Và điều này có nghĩa là như sau. 830 00:52:54,360 --> 00:52:56,790 Giống như trong thế giới thực, chúng tôi có các công ước 831 00:52:56,790 --> 00:53:00,140 mà nếu bạn đáp ứng một số nhân lực cho lần đầu tiên, nếu bạn không nhớ humoring tôi ở đây, 832 00:53:00,140 --> 00:53:03,980 Tôi có thể đến với bạn, nói, "Xin chào, tôi tên là David." >> Hi, David. Tên tôi là Sammy. 833 00:53:03,980 --> 00:53:05,770 "Hi, David Tên tôi là Sammy. 834 00:53:05,770 --> 00:53:08,310 Vì vậy, bây giờ chúng tôi đã tham gia trong loại giao thức của con người ngớ ngẩn 835 00:53:08,310 --> 00:53:12,200 nơi mà tôi đã bắt đầu giao thức, Sammy đã phản ứng, 836 00:53:12,200 --> 00:53:15,060 chúng tôi đã lắc tay, và giao dịch hoàn tất. 837 00:53:15,060 --> 00:53:18,260 HTTP là rất tinh thần tương tự. 838 00:53:18,260 --> 00:53:23,350 Khi yêu cầu trình duyệt web của bạn www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 những gì trình duyệt của bạn thực sự làm đang mở rộng bàn tay của mình, có thể nói, 840 00:53:27,020 --> 00:53:29,960 đến máy chủ và gửi tin nhắn. 841 00:53:29,960 --> 00:53:34,220 Và thông điệp đó thường là một cái gì đó giống như nhận được những gì bạn muốn nhận được - 842 00:53:34,220 --> 00:53:38,740 làm cho tôi trang chủ, mà thường được biểu thị bằng một dấu gạch chéo ở cuối URL. 843 00:53:38,740 --> 00:53:43,790 Và chỉ để bạn biết những gì ngôn ngữ tôi đang nói, trình duyệt sẽ cho bạn biết 844 00:53:43,790 --> 00:53:46,930 mà tôi đang nói HTTP phiên bản 1.1, 845 00:53:46,930 --> 00:53:51,980 Và cũng có thể là phương pháp tốt tôi sẽ cho bạn biết rằng các máy chủ mà tôi muốn trang chủ của 846 00:53:51,980 --> 00:53:54,120 là facebook.com. 847 00:53:54,120 --> 00:53:57,730 Thông thường, một trình duyệt web, unbeknownst cho bạn của con người, 848 00:53:57,730 --> 00:54:03,350 gửi tin nhắn qua mạng Internet khi bạn chỉ cần gõ www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Nhập vào trình duyệt của bạn. 850 00:54:05,370 --> 00:54:07,300 Và Facebook phản ứng với những gì? 851 00:54:07,300 --> 00:54:12,540 Nó phản ứng với một số chi tiết tương tự khó hiểu mà còn nhiều hơn nữa. 852 00:54:12,540 --> 00:54:14,310 Hãy để tôi đi tới trang chủ của Facebook ở đây. 853 00:54:14,310 --> 00:54:17,480 Đây là màn hình mà hầu hết chúng ta có thể không bao giờ nhìn thấy nếu bạn ở lại đăng nhập vào tất cả các thời gian, 854 00:54:17,480 --> 00:54:19,830 nhưng điều này thực sự là trang nhà của họ. 855 00:54:19,830 --> 00:54:24,150 Nếu chúng ta làm điều này trong Chrome, nhận thấy rằng bạn có thể kéo lên menu ngữ cảnh này chút. 856 00:54:24,150 --> 00:54:26,980 Sử dụng Chrome, cho dù trên Mac OS, Windows, Linux, hoặc tương tự, 857 00:54:26,980 --> 00:54:31,840 Nếu bạn kiểm soát nhấp chuột hoặc nhấp chuột trái, bạn thường có thể kéo lên một menu trông như thế này, 858 00:54:31,840 --> 00:54:35,870 nơi mà một vài lựa chọn đang chờ đợi, một trong số đó là View Page Source. 859 00:54:35,870 --> 00:54:39,920 Bạn cũng có thể thường nhận được những điều này bằng cách vào menu View và poking xung quanh. 860 00:54:39,920 --> 00:54:42,750 Ví dụ, đây dưới Xem, phát triển là điều tương tự. 861 00:54:42,750 --> 00:54:45,780 Tôi sẽ đi trước và nhìn vào View Page Source. 862 00:54:45,780 --> 00:54:50,800 Những gì bạn sẽ thấy là HTML mà Mark đã viết để đại diện cho facebook.com. 863 00:54:50,800 --> 00:54:55,910 Đó là một mớ hỗn độn đầy đủ ở đây, nhưng chúng ta sẽ thấy rằng điều này có ý nghĩa nhiều hơn một chút trước khi dài. 864 00:54:55,910 --> 00:54:59,840 Nhưng có một số mô hình ở đây. Hãy để tôi di chuyển xuống các công cụ như thế này. 865 00:54:59,840 --> 00:55:05,730 Đây là khó khăn cho một con người để đọc, nhưng nhận ra là mô hình này của dấu ngoặc góc cạnh 866 00:55:05,730 --> 00:55:10,360 với các từ khóa như tùy chọn, các từ khóa như giá trị, một số chuỗi trích dẫn. 867 00:55:10,360 --> 00:55:15,660 Đây là nơi mà khi bạn đã đăng ký cho lần đầu tiên quy định năm sinh của bạn là gì. 868 00:55:15,660 --> 00:55:19,020 Rằng trình đơn thả xuống của năm sinh là bằng cách nào đó mã hóa ở đây 869 00:55:19,020 --> 00:55:23,870 trong ngôn ngữ này được gọi là HTML, HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Nói cách khác, khi trình duyệt của bạn yêu cầu một trang web, 871 00:55:27,730 --> 00:55:30,610 nó nói công ước này được gọi là HTTP. 872 00:55:30,610 --> 00:55:35,170 Nhưng facebook.com không đáp ứng với yêu cầu đó? 873 00:55:35,170 --> 00:55:38,260 >> Nó phản ứng với một số của những tin nhắn khó hiểu, như chúng ta sẽ thấy trong một thời điểm. 874 00:55:38,260 --> 00:55:43,760 Tuy nhiên, hầu hết các phản ứng của nó là ở dạng HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 Đó là ngôn ngữ thực tế trong đó một trang web được viết. 876 00:55:47,170 --> 00:55:52,030 Và những gì một trình duyệt web thực sự sau đó là, sau khi nhận được một cái gì đó trông như thế này, 877 00:55:52,030 --> 00:55:57,120 đọc nó trên xuống dưới, trái sang phải, và bất cứ lúc nào nó thấy một trong những dấu ngoặc góc cạnh 878 00:55:57,120 --> 00:56:03,370 theo sau bởi một từ khóa như tùy chọn, nó sẽ hiển thị ngôn ngữ đánh dấu theo cách thích hợp. 879 00:56:03,370 --> 00:56:06,820 Trong trường hợp này, nó sẽ hiển thị một trình đơn thả xuống năm. 880 00:56:06,820 --> 00:56:09,240 Nhưng một lần nữa, đây là một mớ hỗn độn đầy đủ để xem xét. 881 00:56:09,240 --> 00:56:16,630 Đây không phải là bởi vì phát triển Facebook biểu hiện 0 cho 5 cho phong cách, ví dụ. 882 00:56:16,630 --> 00:56:20,190 Điều này là bởi vì hầu hết các mã mà họ viết là trong thực tế, viết đẹp, 883 00:56:20,190 --> 00:56:22,450 cũng nhận xét, độc đáo thụt vào, và như thế, 884 00:56:22,450 --> 00:56:26,080 nhưng máy Tất nhiên, máy tính, trình duyệt thực sự không give a damn 885 00:56:26,080 --> 00:56:27,890 xem mã của bạn được theo kiểu. 886 00:56:27,890 --> 00:56:33,100 Và trên thực tế, nó hoàn toàn lãng phí nhấn phím tab tất cả những lần 887 00:56:33,100 --> 00:56:37,650 và đưa ý kiến ​​tất cả cả mã của bạn và để lựa chọn thực sự mô tả tên biến 888 00:56:37,650 --> 00:56:42,340 bởi vì nếu trình duyệt không quan tâm, tất cả các bạn đang làm vào cuối ngày là lãng phí byte. 889 00:56:42,340 --> 00:56:46,660 >> Vì vậy, nó chỉ ra những gì hầu hết các trang web làm là mặc dù mã nguồn cho facebook.com, 890 00:56:46,660 --> 00:56:49,550 cs50.net và tất cả các trang web khác trên Internet 891 00:56:49,550 --> 00:56:53,730 thường được tốt bằng văn bản và cũng nhận xét và độc đáo thụt vào và các loại tương tự, 892 00:56:53,730 --> 00:56:59,270 thường trước khi trang web được đưa lên mạng Internet, các mã được minified, 893 00:56:59,270 --> 00:57:02,970 theo đó các HTML và CSS - cái gì khác chúng ta sẽ sớm thấy - 894 00:57:02,970 --> 00:57:05,960 mã JavaScript chúng ta sẽ sớm thấy được nén 895 00:57:05,960 --> 00:57:09,250 theo đó tên dài biến trở thành X và Y và Z, 896 00:57:09,250 --> 00:57:13,900 và tất cả các khoảng trắng đó mà làm cho tất cả mọi thứ để có thể đọc được là tất cả bỏ đi, 897 00:57:13,900 --> 00:57:17,700 bởi vì nếu bạn nghĩ về nó theo cách này, Facebook được một trang tỷ số truy cập một ngày - 898 00:57:17,700 --> 00:57:21,670 một cái gì đó điên rồ như thế - vì vậy nếu một lập trình chỉ để được qua đường hậu môn 899 00:57:21,670 --> 00:57:26,660 nhấn thanh không gian thêm 1 thời gian chỉ để thụt lề một số dòng mã bao giờ nhiều hơn nữa? 900 00:57:26,660 --> 00:57:29,500 Ngụ ý là gì nếu Facebook bảo tồn khoảng trắng 901 00:57:29,500 --> 00:57:32,880 trong tất cả các byte họ gửi lại cho mọi người trên Internet? 902 00:57:32,880 --> 00:57:36,400 Nhấn thanh không gian một lần cung cấp cho bạn thêm một byte trong tập tin của bạn. 903 00:57:36,400 --> 00:57:39,730 Và nếu một tỷ người sau đó tiến hành để tải trang chủ ngày hôm đó, 904 00:57:39,730 --> 00:57:42,060 bao nhiêu dữ liệu đã được truyền qua Internet? 905 00:57:42,060 --> 00:57:45,200 Một gigabyte không có lý do tốt. 906 00:57:45,200 --> 00:57:48,510 Và được cấp cho rất nhiều trang web này không phải là một vấn đề khả năng mở rộng, 907 00:57:48,510 --> 00:57:51,030 nhưng đối với Facebook, Google, một số trang web phổ biến nhất 908 00:57:51,030 --> 00:57:54,860 có khuyến khích tài chính để làm cho mã của bạn trông giống như một mớ hỗn độn 909 00:57:54,860 --> 00:57:58,980 để bạn sử dụng như vài byte có thể thêm vào sau đó nén 910 00:57:58,980 --> 00:58:01,500 bằng cách sử dụng một cái gì đó như zip, một thuật toán gọi gzip 911 00:58:01,500 --> 00:58:04,250 mà trình duyệt không cho bạn tự động. Nhưng điều này là khủng khiếp. 912 00:58:04,250 --> 00:58:08,060 Chúng tôi sẽ không bao giờ tìm hiểu bất cứ điều gì về các trang web của những người khác và làm thế nào để thiết kế các trang web 913 00:58:08,060 --> 00:58:09,680 nếu chúng ta phải nhìn vào nó như thế này. 914 00:58:09,680 --> 00:58:13,620 >> Vì vậy, may mắn thay, các trình duyệt như Chrome và IE và Firefox những ngày này 915 00:58:13,620 --> 00:58:16,450 thường đi kèm với xây dựng trong các công cụ phát triển. 916 00:58:16,450 --> 00:58:21,730 Trong thực tế, nếu tôi đi xuống đây để kiểm tra nguyên tố hoặc nếu tôi đi vào View, Nhà phát triển, 917 00:58:21,730 --> 00:58:25,220 và đi đến Công cụ phát triển một cách rõ ràng, 918 00:58:25,220 --> 00:58:27,640 cửa sổ này ở dưới cùng của màn hình của tôi bây giờ bật lên. 919 00:58:27,640 --> 00:58:31,230 Đó là một chút đáng sợ lúc đầu bởi vì có rất nhiều các tab không quen thuộc ở đây, 920 00:58:31,230 --> 00:58:34,510 nhưng nếu tôi nhấp vào yếu tố tất cả các con đường ở phía dưới bên trái, 921 00:58:34,510 --> 00:58:38,810 Chrome rõ ràng là khá thông minh. Nó biết làm thế nào để giải thích tất cả các mã này. 922 00:58:38,810 --> 00:58:42,320 Và do đó, những gì Chrome không là nó làm sạch tất cả các HTML của Facebook. 923 00:58:42,320 --> 00:58:45,680 Mặc dù không có khoảng trắng ở đó, có không thụt đầu dòng có, 924 00:58:45,680 --> 00:58:51,120 bây giờ nhận thấy rằng tôi có thể bắt đầu điều hướng trang web này tất cả các phân cấp. 925 00:58:51,120 --> 00:58:56,910 Nó chỉ ra rằng tất cả các trang web được viết trong một ngôn ngữ được gọi là HTML5 nên bắt đầu với điều này, 926 00:58:56,910 --> 00:59:03,980 khai báo DOCTYPE này, có thể nói: 927 00:59:03,980 --> 00:59:07,840 Đó là loại ánh sáng và màu xám có, nhưng đó là dòng đầu tiên của mã trong tập tin này, 928 00:59:07,840 --> 00:59:12,080 mà chỉ cho các trình duyệt, "Hey, ở đây có một số HTML5 Ở đây có một trang web." 929 00:59:12,080 --> 00:59:18,490 Khung mở đầu tiên vượt ra ngoài đó sẽ xảy ra là điều này, một khung mở HTML tag, 930 00:59:18,490 --> 00:59:22,320 và sau đó nếu tôi lặn vào sâu hơn - những mũi tên này là hoàn toàn vô nghĩa; 931 00:59:22,320 --> 00:59:25,140 họ chỉ là vì lợi ích trình bày của họ là không thực sự trong tập tin - 932 00:59:25,140 --> 00:59:30,300 nhận thấy rằng bên trong tag HTML của Facebook, bất cứ điều gì bắt đầu với một khung mở 933 00:59:30,300 --> 00:59:32,910 và sau đó một từ được gọi là một thẻ. 934 00:59:32,910 --> 00:59:38,610 Vì vậy, bên trong các tag HTML là rõ ràng là một thẻ đầu và một thẻ cơ thể. 935 00:59:38,610 --> 00:59:41,930 Bên trong của thẻ đầu bây giờ là cả một mớ hỗn độn cho Facebook 936 00:59:41,930 --> 00:59:45,620 bởi vì họ có rất nhiều siêu dữ liệu và những thứ khác để tiếp thị và quảng cáo. 937 00:59:45,620 --> 00:59:50,600 >> Nhưng nếu chúng ta di chuyển xuống, xuống, xuống, xuống, chúng ta hãy xem nó ở đâu. Ở đây nó được. 938 00:59:50,600 --> 00:59:52,210 Đây là một trong ít nhất là phần nào quen thuộc. 939 00:59:52,210 --> 00:59:55,990 Tiêu đề của trang chủ của Facebook, nếu bạn nhìn vào các tab trên thanh tiêu đề của bạn, 940 00:59:55,990 --> 00:59:59,060 Chào mừng bạn đến với Facebook - Đăng nhập, Đăng ký hoặc Tìm hiểu thêm. 941 00:59:59,060 --> 01:00:01,110 Đó là những gì bạn sẽ thấy trong thanh tiêu đề của Chrome, 942 01:00:01,110 --> 01:00:03,100 và đó là cách nó được trình bày trong các mã. 943 01:00:03,100 --> 01:00:08,090 Nếu chúng ta bỏ qua mọi thứ khác trong đầu, hầu hết ruột của một trang web trong cơ thể, 944 01:00:08,090 --> 01:00:10,940 và nó quay ra rằng mã của Facebook sẽ trông phức tạp hơn 945 01:00:10,940 --> 01:00:14,540 hơn so với hầu hết mọi thứ, chúng ta sẽ viết ban đầu chỉ vì nó được xây dựng trong những năm qua, 946 01:00:14,540 --> 01:00:17,260 nhưng có một toàn bộ rất nhiều thẻ script, mã JavaScript, 947 01:00:17,260 --> 01:00:18,870 mà làm cho các trang web rất tương tác: 948 01:00:18,870 --> 01:00:22,330 nhìn thấy tình trạng cập nhật ngay lập tức bằng cách sử dụng ngôn ngữ như JavaScript. 949 01:00:22,330 --> 01:00:25,270 Có một cái gì đó được gọi là một div, mà là một bộ phận của một trang. 950 01:00:25,270 --> 01:00:27,940 Nhưng trước khi chúng tôi nhận được đến chi tiết đó, chúng ta hãy cố gắng để thu nhỏ 951 01:00:27,940 --> 01:00:31,920 và nhìn vào một phiên bản đơn giản của Facebook 1.0, do đó, để nói chuyện. 952 01:00:31,920 --> 01:00:34,740 Dưới đây là hello thế giới của các trang web. 953 01:00:34,740 --> 01:00:37,370 Nó đã có khai báo DOCTYPE ở đầu 954 01:00:37,370 --> 01:00:40,280 đó là một chút khác nhau từ mọi thứ khác. 955 01:00:40,280 --> 01:00:46,130 Không có gì khác chúng tôi viết trong một trang web sẽ bắt đầu với 01:00:48,880 và ngoại trừ một cái gì đó gọi là ý kiến ​​trong HTML. 957 01:00:48,880 --> 01:00:53,000 Nhưng đối với hầu hết các phần, tất cả mọi thứ trong một trang web là mở khung, từ khóa, đóng khung. 958 01:00:53,000 --> 01:00:56,220 >> Trong trường hợp này, bạn có thể thấy đơn giản nhất của các trang web có thể có. 959 01:00:56,220 --> 01:01:00,260 Tag HTML chứa một thẻ đầu và nó có chứa một thẻ cơ thể, 960 01:01:00,260 --> 01:01:04,580 nhưng nhận thấy rằng có khái niệm này bắt đầu và dừng lại thẻ. 961 01:01:04,580 --> 01:01:11,360 Đây là thẻ bắt đầu cho HTML, đây là tag đóng hoặc thẻ kết thúc. 962 01:01:11,360 --> 01:01:15,400 Nhận thấy rằng họ đang sắp xếp của các mặt đối lập trong ý nghĩa rằng thẻ gần hoặc thẻ kết thúc 963 01:01:15,400 --> 01:01:20,030 đã dấu gạch chéo bên trong của chính nó. 964 01:01:20,030 --> 01:01:23,540 Trong khi đó, có một thẻ mở ở đây và đầu tag đóng ở đây. 965 01:01:23,540 --> 01:01:26,880 >> Có một tiêu đề mở và một tiêu đề tag đóng ở đây. 966 01:01:26,880 --> 01:01:29,850 Thực tế rằng tôi đã đặt các tiêu đề trên 1 dòng, hoàn toàn tùy ý. 967 01:01:29,850 --> 01:01:33,760 Nó chỉ trông giống như nó sẽ phù hợp với độc đáo trên 1 dòng, nên tôi không bận tâm nhấn Enter một vài lần. 968 01:01:33,760 --> 01:01:38,200 Trong khi đó, cơ thể tôi đã làm thụt chỉ để được bao giờ nên rõ ràng. 969 01:01:38,200 --> 01:01:41,050 Chú ý rằng HTML là một ngôn ngữ khá câm. 970 01:01:41,050 --> 01:01:43,410 Trong thực tế, trở lại trong ngày trước khi có trình soạn thảo WYSIWYG 971 01:01:43,410 --> 01:01:46,770 và Microsoft Word nơi bạn có thể nói, "này đậm, in nghiêng," 972 01:01:46,770 --> 01:01:50,850 bạn thực sự sẽ gõ lệnh nhỏ trong bài tiểu luận 20 + năm trước 973 01:01:50,850 --> 01:01:55,740 nhờ đó mà bạn sẽ nói, "Bắt đầu làm cho văn bản in đậm làm cho văn bản in đậm." 974 01:01:55,740 --> 01:01:59,010 "Bắt đầu làm này nghiêng văn bản làm này nghiêng văn bản." 975 01:01:59,010 --> 01:02:01,850 >> Đó là HTML hoặc ngôn ngữ bất kỳ đánh dấu. 976 01:02:01,850 --> 01:02:05,530 Thẻ này đầu tiên nói, "Hey, trình duyệt. Ở đây có một số HTML." 977 01:02:05,530 --> 01:02:09,880 Thẻ tiếp theo nói: "Này, trình duyệt. Ở đây có người đứng đầu, tiêu đề của trang web của tôi." 978 01:02:09,880 --> 01:02:11,650 "Hey, trình duyệt. Ở đây có tiêu đề." 979 01:02:11,650 --> 01:02:15,880 Và sau đó ở đây, "Hey, trình duyệt. Đó là nó cho tiêu đề." 980 01:02:15,880 --> 01:02:20,000 Vì vậy, đây là trình duyệt biết như thế nào để không còn hiển thị các ký tự hơn chào, thế giới 981 01:02:20,000 --> 01:02:21,860 trong thanh tiêu đề. 982 01:02:21,860 --> 01:02:23,640 Trong khi đó, điều này nói, "Đó là nó cho người đứng đầu". 983 01:02:23,640 --> 01:02:28,340 Này nói, "Ở đây có cơ thể là cơ quan thực tế." - Theo nghĩa đen, những lời nói hello, thế giới. 984 01:02:28,340 --> 01:02:33,190 Và điều này nói ở đây, "Đó là nó cho cơ thể Đó là nó cho HTML." 985 01:02:33,190 --> 01:02:34,640 Vì vậy, trình duyệt là khá ngớ ngẩn. 986 01:02:34,640 --> 01:02:39,920 Họ chỉ cần đọc các công cụ này trên xuống dưới, từ trái sang phải, và làm chính xác những gì họ đang nói để làm. 987 01:02:39,920 --> 01:02:41,860 Hãy thực sự làm một ví dụ nhỏ ở đây. 988 01:02:41,860 --> 01:02:46,240 Hãy để tôi mở đơn giản nhất của các chương trình trên máy Mac của tôi ở đây, cụ thể là TextEdit. 989 01:02:46,240 --> 01:02:48,220 Trên Windows, bạn có thể sử dụng Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Nhưng điều này là tất cả những gì bạn cần để bắt đầu làm cho các trang web. 991 01:02:50,520 --> 01:02:53,730 Tôi sẽ đi trước và chỉ cần sao chép và dán mã này vào tập tin này. 992 01:02:53,730 --> 01:02:57,210 Tôi sẽ đi trước và lưu nó vào máy tính để bàn của tôi, 993 01:02:57,210 --> 01:03:01,220 và tôi sẽ tiết kiệm này là hello.html, 994 01:03:01,220 --> 01:03:03,840 và bây giờ tập tin có tên hello.html. 995 01:03:03,840 --> 01:03:05,690 Ở đây là trên máy tính để bàn của tôi. 996 01:03:05,690 --> 01:03:11,130 Hãy để tôi đi vào một trình duyệt và kéo tập tin vào trình duyệt. 997 01:03:11,130 --> 01:03:14,060 Và thì đấy, đây là trang web của tôi đầu tiên. 998 01:03:14,060 --> 01:03:17,340 Chú ý rằng các tiêu đề của tab là chào, thế giới theo thẻ tiêu đề, 999 01:03:17,340 --> 01:03:20,040 và thông báo rằng hello, thế giới là cơ quan của trang web của tôi, 1000 01:03:20,040 --> 01:03:22,190 và woo-hoo, tôi trên Internet. 1001 01:03:22,190 --> 01:03:24,700 >> Tôi không thực sự đúng, bởi vì tập tin này không phải là trên Internet. 1002 01:03:24,700 --> 01:03:28,330 Nó xảy ra được trên ổ đĩa cứng địa phương của tôi lúc đó con đường cụ thể. 1003 01:03:28,330 --> 01:03:32,720 Nhưng ý tưởng là như nhau. Tất cả chúng ta cần là một máy chủ web mà tải nó lên. 1004 01:03:32,720 --> 01:03:37,410 Nhưng trước tiên chúng ta hãy thực sự giới thiệu phức tạp hơn một chút và một cách điệu ít hơn. 1005 01:03:37,410 --> 01:03:39,890 Đây là một đơn giản, nếu nhàm chán, trang web. 1006 01:03:39,890 --> 01:03:41,990 Nó chỉ ra có các loại thẻ chúng tôi có thể sử dụng. 1007 01:03:41,990 --> 01:03:45,530 Ví dụ, đây màu vàng tôi đã giới thiệu 2 thẻ mới. 1008 01:03:45,530 --> 01:03:49,630 Chúng tôi sẽ không chơi nhiều với những ngày hôm nay, nhưng nhận thấy rằng các thẻ liên kết 1009 01:03:49,630 --> 01:03:52,520 bằng cách nào đó có vẻ khác với mọi thứ khác. 1010 01:03:52,520 --> 01:03:55,370 Thẻ liên kết có những gì được gọi là thuộc tính, 1011 01:03:55,370 --> 01:03:59,770 và một thuộc tính là một cái gì đó thay đổi hành vi của thẻ. 1012 01:03:59,770 --> 01:04:03,840 Trong trường hợp này không phải là lựa chọn tốt nhất tên, liên kết, bởi vì đó là loại vô nghĩa, 1013 01:04:03,840 --> 01:04:11,590 nhưng thẻ liên kết này cho biết, về cơ bản, bao gồm các tập tin được gọi là styles.css bên trong trang web của tôi. 1014 01:04:11,590 --> 01:04:15,400 Bạn có thể nghĩ điều này như là tương tự C # bao gồm các chỉ. 1015 01:04:15,400 --> 01:04:19,650 Styles.css là đề cập đến một ngôn ngữ khác nhau hoàn toàn rằng chúng tôi sẽ chơi với ngày hôm nay, 1016 01:04:19,650 --> 01:04:23,790 nhưng nó cho thẩm mỹ: kích thước phông chữ, màu sắc, đệm, thụt đầu dòng, lợi nhuận, 1017 01:04:23,790 --> 01:04:26,040 và tất cả các loại đó chi tiết của thẩm mỹ. 1018 01:04:26,040 --> 01:04:28,820 Trong khi đó, các thẻ script có chức năng tương tự, 1019 01:04:28,820 --> 01:04:33,140 nhưng hơn bao gồm CSS, ngôn ngữ, nó bao gồm một ngôn ngữ khác, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Vì vậy, nói cách khác, với 2 thẻ này, tôi sẽ có thể viết các trang web của riêng tôi 1021 01:04:37,810 --> 01:04:41,490 mà còn kéo trong mã mà tôi hay một ai đó đã viết 1022 01:04:41,490 --> 01:04:44,350 để chúng tôi có thể đứng trên vai người khác, chúng ta có thể thực hành thiết kế tốt, 1023 01:04:44,350 --> 01:04:46,120 bao thanh toán ra mã thông thường. 1024 01:04:46,120 --> 01:04:49,090 Nếu tôi đã có 10 trang web khác nhau, điều này có nghĩa rằng một số thẩm mỹ của tôi 1025 01:04:49,090 --> 01:04:52,490 có thể là yếu tố ra ngoài, giống như # bao gồm, vào một tập tin riêng biệt. 1026 01:04:52,490 --> 01:04:54,420 Vì vậy, chúng tôi đang nhận được ở đó. 1027 01:04:54,420 --> 01:04:57,180 Nhưng chúng ta hãy thực sự đầu tiên làm một cái gì đó thú vị hơn với tập tin này. 1028 01:04:57,180 --> 01:05:01,110 >> Một lần nữa, đây chỉ là TextEdit. Tôi không phải là kỹ thuật trên Internet được nêu ra, nhưng chúng tôi sẽ nhận được ở đó. 1029 01:05:01,110 --> 01:05:04,910 Tôi muốn làm cho hello, thế giới một chút táo bạo hơn là. 1030 01:05:04,910 --> 01:05:10,890 Vì vậy, xin chào, chúng ta tùy tiện nói cho in đậm. 1031 01:05:10,890 --> 01:05:15,910 Một lần nữa, câu chuyện là như nhau: hello, dấu phẩy, bắt đầu thực hiện này đậm, 1032 01:05:15,910 --> 01:05:19,730 sau đó thế giới được in đậm, và điều này có nghĩa là ngừng in ấn này in đậm. 1033 01:05:19,730 --> 01:05:24,020 Hãy để tôi đi trước và lưu tập tin của tôi, quay trở lại vào Chrome, tôi sẽ phóng to chỉ để chúng ta có thể nhìn thấy nó tốt hơn, 1034 01:05:24,020 --> 01:05:27,870 và tải lại, và bạn sẽ thấy thế giới mà bây giờ là in đậm. 1035 01:05:27,870 --> 01:05:31,810 Web là tất cả về các siêu liên kết, do đó, chúng ta hãy đi trước và làm điều này: 1036 01:05:31,810 --> 01:05:38,550 trang web ưa thích của tôi là, hãy nói, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Lưu, tải lại. Okay. Có một vài vấn đề bây giờ bên cạnh những hideousness của trang web. 1038 01:05:43,810 --> 01:05:47,310 1, tôi khá chắc chắn tôi nhấn Enter. Và tôi đã làm. 1039 01:05:47,310 --> 01:05:51,590 Tôi không chỉ nhấn Enter, tôi cũng thụt vào, thực hành những gì chúng tôi đã được rao giảng về phong cách, 1040 01:05:51,590 --> 01:05:54,930 nhưng của tôi là ngay bên cạnh thế giới. 1041 01:05:54,930 --> 01:05:58,410 Vậy tại sao điều này? Các trình duyệt chỉ làm những gì bạn nói với họ để làm. 1042 01:05:58,410 --> 01:06:04,010 Tôi đã không nói với các trình duyệt, "dòng Nghỉ giải lao ở đây Chèn đoạn phá vỡ ở đây." 1043 01:06:04,010 --> 01:06:07,820 Vì vậy, trình duyệt, nó không quan trọng nếu tôi nhấn Quay lại 30 lần, 1044 01:06:07,820 --> 01:06:10,820 nó vẫn sẽ đặt bên phải của tôi với thế giới. 1045 01:06:10,820 --> 01:06:15,930 Những gì tôi thực sự phải làm ở đây là nói một cái gì đó như
, chèn một ngắt dòng. 1046 01:06:15,930 --> 01:06:17,940 >> Và thực sự, một ngắt dòng là loại một điều kỳ lạ 1047 01:06:17,940 --> 01:06:21,650 vì bạn có thể không thực sự bắt đầu di chuyển đến dòng khác, sau đó làm một cái gì đó, 1048 01:06:21,650 --> 01:06:25,380 và sau đó di chuyển đến một dòng mới. Đó là loại một hoạt động nguyên tử. 1049 01:06:25,380 --> 01:06:28,140 Bạn có thể làm điều đó hoặc bạn không. Bạn nhấn Enter hoặc bạn không. 1050 01:06:28,140 --> 01:06:33,390 Vì vậy, br là một chút của một thẻ khác nhau, và vì vậy tôi cần phải sắp xếp cả hai mở và đóng nó 1051 01:06:33,390 --> 01:06:35,230 tất cả cùng một lúc. 1052 01:06:35,230 --> 01:06:37,500 Cú pháp cho rằng là thế này. 1053 01:06:37,500 --> 01:06:41,760 Về mặt kỹ thuật, bạn có thể làm một cái gì đó như thế này trong một số phiên bản của HTML, 1054 01:06:41,760 --> 01:06:45,600 nhưng điều này chỉ là ngu ngốc vì không có lý do để bắt đầu và dừng lại một cái gì đó 1055 01:06:45,600 --> 01:06:48,420 nếu bạn thay vì có thể làm tất cả cùng một lúc. 1056 01:06:48,420 --> 01:06:52,310 Nhận ra rằng HTML5 không yêu cầu nghiêm ngặt này dấu gạch chéo, 1057 01:06:52,310 --> 01:06:55,410 do đó, bạn sẽ thấy sách giáo khoa và các tài nguyên trực tuyến mà không có nó, 1058 01:06:55,410 --> 01:06:59,780 nhưng đối với các biện pháp tốt, chúng ta hãy thực hành đối xứng mà chúng tôi đã nhìn thấy vậy đến nay. 1059 01:06:59,780 --> 01:07:02,870 Điều này có nghĩa rằng từ khóa là cả hai mở và đóng cửa. 1060 01:07:02,870 --> 01:07:05,220 Vì vậy, bây giờ cho tôi lưu tập tin của tôi, quay trở lại. 1061 01:07:05,220 --> 01:07:10,240 Được rồi, do đó, nó bắt đầu trông đẹp hơn, ngoại trừ Web tôi biết là loại có thể click, 1062 01:07:10,240 --> 01:07:13,610 và chưa youtube ở đây dường như không dẫn đến bất cứ điều gì. 1063 01:07:13,610 --> 01:07:17,560 Đó là bởi vì mặc dù nó trông giống như một liên kết, trình duyệt không biết rằng mỗi gia nhập, 1064 01:07:17,560 --> 01:07:20,670 vì vậy tôi phải để cho trình duyệt rằng đây là một liên kết. 1065 01:07:20,670 --> 01:07:22,620 >> Các cách để làm điều này là sử dụng một thẻ neo: 1066 01:07:22,620 --> 01:07:26,770 01:07:35,900 = "Http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 và cho tôi di chuyển này vào một dòng mới chỉ là như vậy đó là một chút dễ đọc hơn, 1069 01:07:38,490 --> 01:07:40,060 và tôi sẽ thu nhỏ kích thước phông chữ. 1070 01:07:40,060 --> 01:07:43,890 Tôi thực hiện chưa? Không. Có sẽ là sự đối lập. 1071 01:07:43,890 --> 01:07:46,760 Thẻ này, thẻ neo, không thực sự có một thuộc tính, 1072 01:07:46,760 --> 01:07:52,900 thay đổi hành vi của nó, và giá trị của thuộc tính đó là rõ ràng của YouTube URL. 1073 01:07:52,900 --> 01:07:56,380 Nhưng hãy chú ý sự phân đôi là chỉ vì đó là URL bạn sẽ, 1074 01:07:56,380 --> 01:08:01,020 đó không có nghĩa là lời mà bạn đang nhấn mạnh và làm cho một liên kết. 1075 01:08:01,020 --> 01:08:03,960 Thay vào đó, có thể là một cái gì đó như thế này. 1076 01:08:03,960 --> 01:08:10,870 Vì vậy, tôi có thể nói này từ một siêu liên kết bằng cách sử dụng thẻ neo gần. 1077 01:08:10,870 --> 01:08:12,650 Thông báo tôi không làm điều này. 1078 01:08:12,650 --> 01:08:15,890 1, điều này sẽ chỉ là một sự lãng phí thời gian của mọi người và nó không cần thiết. 1079 01:08:15,890 --> 01:08:19,290 >> Để đóng một thẻ, bạn chỉ đề cập đến tên của thẻ một lần nữa. 1080 01:08:19,290 --> 01:08:21,800 Bạn không đề cập đến bất kỳ các thuộc tính. 1081 01:08:21,800 --> 01:08:26,189 Vì vậy, hãy tiết kiệm đó, trở lại. Được rồi, thì đấy, bây giờ nó là màu xanh và siêu liên kết. 1082 01:08:26,189 --> 01:08:29,430 Nếu tôi nhấp vào nó, tôi thực sự đi đến YouTube. 1083 01:08:29,430 --> 01:08:32,529 Vì vậy, mặc dù trang web của tôi không phải là trên Internet, nó là ít nhất là HTML, 1084 01:08:32,529 --> 01:08:37,930 và nếu chúng ta để Internet bắt kịp, chúng tôi thực sự sẽ kết thúc ở đây tại youtube.com. 1085 01:08:37,930 --> 01:08:40,670 Và tôi có thể quay trở lại và đây là trang web của tôi. Nhưng hãy chú ý điều này. 1086 01:08:40,670 --> 01:08:43,120 Nếu bạn đã từng nhận được thư rác hoặc tấn công lừa đảo trực tuyến, 1087 01:08:43,120 --> 01:08:45,850 bây giờ bạn có khả năng chỉ sau 5 phút để làm điều tương tự. 1088 01:08:45,850 --> 01:08:50,920 Chúng ta có thể ở đây và làm một cái gì đó giống như www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 hoặc bất cứ điều gì các trang web sơ sài, và sau đó bạn có thể nói xác minh tài khoản PayPal của bạn. 1090 01:08:59,319 --> 01:09:04,840 [Cười] Và bây giờ điều này sẽ đi đến badguy.com, mà tôi sẽ không bấm vào 1091 01:09:04,840 --> 01:09:08,000 vì tôi không có ý tưởng mà dẫn. [Cười] 1092 01:09:08,000 --> 01:09:10,859 >> Nhưng bây giờ chúng ta có khả năng để thực sự kết thúc ở đó. 1093 01:09:10,859 --> 01:09:12,640 Vì vậy, chúng tôi đang thực sự chỉ mới bắt đầu cào trên bề mặt. 1094 01:09:12,640 --> 01:09:15,830 Chúng tôi không lập trình cho mỗi gia nhập, chúng ta đang viết ngôn ngữ đánh dấu. 1095 01:09:15,830 --> 01:09:18,569 Nhưng ngay sau khi chúng tôi ra khỏi vòng vốn từ vựng của chúng tôi trong HTML, 1096 01:09:18,569 --> 01:09:21,520 chúng tôi sẽ giới thiệu PHP, một ngôn ngữ lập trình thực tế 1097 01:09:21,520 --> 01:09:26,859 mà sẽ cho phép chúng tôi để tạo ra HTML tự động, tạo ra CSS tự động, 1098 01:09:26,859 --> 01:09:29,430 để chúng tôi có thể bắt đầu vào thứ tư để thực hiện, nói, 1099 01:09:29,430 --> 01:09:31,700 công cụ tìm kiếm của chúng tôi và nhiều hơn nữa. 1100 01:09:31,700 --> 01:09:34,770 Nhưng trong một vài ngày. Chúng ta sẽ thấy bạn sau đó. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]