1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [שבוע 7] 2 00:00:02,440 --> 00:00:04,730 [דוד י מלאן - אוניברסיטת הרווארד] 3 00:00:04,730 --> 00:00:07,490 [זה CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 בסדר. ברוך שובך. זה CS50, וזו היא ההתחלה של שבוע 7. 5 00:00:12,280 --> 00:00:14,690 כמה הכרזות קטנות: 6 00:00:14,690 --> 00:00:18,150 Pset5 הוא עכשיו בהתקדמות, או בקרוב יהיה, 7 00:00:18,150 --> 00:00:21,590 והרשו לי לומר, בכנות, זה נוטה להיות בין מאתגר יותר 8 00:00:21,590 --> 00:00:24,460 הסטים הבעייתיים של הקורס, אז בוא יזכירו לי את זה עכשיו 9 00:00:24,460 --> 00:00:28,190 כך שהשבוע הזה יותר מתמיד שלא לחכות עד, יניח, יום רביעי בלילה 10 00:00:28,190 --> 00:00:29,920 יום חמישי בערב או לצלול פנימה 11 00:00:29,920 --> 00:00:32,369 זה בהחלט pset מעניין. אנחנו חושבים שזה כיף. 12 00:00:32,369 --> 00:00:36,110 אם אתה ממש מקבל את זה נכון בהמלוא ולאחר מכן יכול לאתגר את הלוח הגדול שנקרא, 13 00:00:36,110 --> 00:00:39,830 תהיה לך הזדמנות כדי להתאים שכל עם חלק מצוות של הקורס 14 00:00:39,830 --> 00:00:41,620 וכמה מחבריך לכיתה. 15 00:00:41,620 --> 00:00:44,670 מה הוא הלוח הגדול הוא ברגע שיש לך עבודה של בדק איות שלך, 16 00:00:44,670 --> 00:00:48,860 תוכל ללכת לcs50.net לאחר הפעלת פקודה, 17 00:00:48,860 --> 00:00:52,430 גרידא להצטרף, ולאחר מכן את כמות הזמן וכמות הזיכרון RAM ועוד 18 00:00:52,430 --> 00:00:56,130 שהשתמשת ביישום שלך יוצג כאן בדף הבית של הקורס. 19 00:00:56,130 --> 00:00:59,740 תוכל להבחין כי כל חבורה של האנשים האלה כאן מופיעות כצוות 20 00:00:59,740 --> 00:01:04,220 מאז סוף השבוע, צוות חשב שזה יהיה כיף לנסות לעלות זה על זה. 21 00:01:04,220 --> 00:01:07,390 אז מבין שהמטרה כאן היא לא לעלות על צוות. 22 00:01:07,390 --> 00:01:09,790 גם אני כאן רק במספר 13. 23 00:01:09,790 --> 00:01:13,790 גרידא להצטרף, אבל זה הזדמנות לראות עד כמה זיכרון RAM הקטן 24 00:01:13,790 --> 00:01:16,790 וכמה מעט שניות CPU אתה יכול להשתמש בכמה פנים אל פנים של חבריך לכיתה. 25 00:01:16,790 --> 00:01:20,540 >> ואני מודה שמייקל קווין שמידט, 26 00:01:20,540 --> 00:01:23,750 כיום בעמדת מספר 1 כאחד מTFS, 27 00:01:23,750 --> 00:01:28,120 זה הוא יישום שאנחנו קוראים לא אפשריים 28 00:01:28,120 --> 00:01:32,700 בהתחשב בכך שהוא משתמש כמעט 0 RAM וכמעט 0 שניות לטעינה. 29 00:01:32,700 --> 00:01:35,670 אז אנחנו כבר נדאג למחוברים קווין. [שחוק] 30 00:01:35,670 --> 00:01:40,950 יש כישורים מסוימים שקווין הוא לשים למבחן כאן. 31 00:01:40,950 --> 00:01:45,280 אחד הדברים שחשבנו שאנחנו היינו עושים גם עכשיו CS50x הוא שבוע בהתקדמות, 32 00:01:45,280 --> 00:01:49,520 ואתם הם כחלק בלתי נפרדים מניסוי זה כתלמידים האלה. 33 00:01:49,520 --> 00:01:53,720 שאלנו אותם כחלק מpset0, שהיה דומה להגשת פרויקט Scratch 34 00:01:53,720 --> 00:01:58,280 מעניין אותם - משחק, חתיכה אינטראקטיבית של אמנות, אנימציה, או כמו - 35 00:01:58,280 --> 00:02:03,700 1 - וידאו 2-דקה, אם הם היו רוצים, יגידו שלום לעולם ושהם באמת. 36 00:02:03,700 --> 00:02:06,780 חשבתי שאני רוצה לחלוק איתכם רק כמה מהסרטונים שהוגשו עד כה 37 00:02:06,780 --> 00:02:10,759 כי אצלנו בצוות לפחות, זה באמת היה מרגש 38 00:02:10,759 --> 00:02:14,220 ומעורר השראה לראות את האנשים האלה מכל רחבי העולם - מדינות בכל רחבי העולם - 39 00:02:14,220 --> 00:02:18,160 כוונון, של כל הדברים, לקורס במדע מחשב באינטרנט, 40 00:02:18,160 --> 00:02:20,410 בין אם זה בגלל שהם רוצים להמשיך את לימודיהם, 41 00:02:20,410 --> 00:02:22,300 הם רוצים לקחת את הקריירה שלהם בכיוון חדש, 42 00:02:22,300 --> 00:02:24,390 הם רוצים להשלים פערים בידע שלהם, 43 00:02:24,390 --> 00:02:27,190 כך שחלק מאותן הסיבות שאתם אולי כבר כאן. 44 00:02:27,190 --> 00:02:31,090 >> אז אני אתן לך סטודנט אחד כזה כאן. אתה יכול להעלות את הנפח רק קצת. 45 00:02:31,090 --> 00:02:35,520 הנה אחת מההגשות של הסטודנטים שלנו 1-דקה. 46 00:02:35,520 --> 00:02:40,380 שלום, עולם. אני סטודנט להנדסת תעשייה כאן במלאגה, ספרד. 47 00:02:40,380 --> 00:02:45,840 אני שמח על המהלך הזה באינטרנט כי אני אוהב מדעי מחשב, אני באמת, 48 00:02:45,840 --> 00:02:48,880 ואני באמת מעריך שאני מקבל כדי לחקור אותו. 49 00:02:48,880 --> 00:02:51,940 והעובדה שאני יכול ללמוד אותו כל שאתם עושים 50 00:02:51,940 --> 00:02:57,040 אבל במקום להיות ברווארד אני במלאגה, כמה מדהים זה? 51 00:02:57,040 --> 00:03:02,040 ובכן, אני פרננדו, וזה CS50. תראו אתכם. 52 00:03:02,040 --> 00:03:07,100 [שחוק] סרטון נוסף שאנחנו אוהבים במיוחד, תמצא שהאנגלים של האדון הזה הוא לא כל כך חזק. 53 00:03:07,100 --> 00:03:11,520 זה נראה כאילו יש לו את זה במכונת תרגום, ולכן את התרגומים עצמם הם קצת לא מושלמים, 54 00:03:11,520 --> 00:03:15,790 אבל זה עד כה, כמו גם היה אחד מהמועדפים שלנו. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 שלום, עולם. [מדבר ביפנית] 57 00:03:32,370 --> 00:03:39,830 [יש לי לברך ביפנית בגלל האנגלי שלי הוא מאוד לא אמין.] 58 00:03:39,830 --> 00:03:45,380 [שאני מסרתי לך את המסר מהעיר גיפו, יפן.] 59 00:03:45,380 --> 00:03:49,820 [אני יכול להיות תלמיד בפעם הראשונה מזה 20 שנים, כפי שניתן לראות.] 60 00:03:49,820 --> 00:03:54,640 [אני מודה מאוד לאוניברסיטת הרווארד, שנתן לי את ההזדמנות הזאת וedx.] 61 00:03:54,640 --> 00:04:01,510 [גולף הוא גיטרה והדבר האהוב עליי בריצה.] [שחוק] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [למה אתה חושב שאני מנסה להשתתף cs50x.] 64 00:04:10,790 --> 00:04:14,990 [אוניברסיטת הרווארד, הוא הכמיהה שלי.] 65 00:04:14,990 --> 00:04:19,740 [במיוחד אם אני נוכחות מרוחקת חיה ביפן.] 66 00:04:19,740 --> 00:04:26,680 [אני רוצה לנסות מייד מודע לקיומו של edx כגון מתי.] 67 00:04:26,680 --> 00:04:32,500 [אתה לא חושב שכדי שלא קשור לגיל של למידת א] 68 00:04:32,500 --> 00:04:38,350 [Cs50 הוא הגעגועים שלי. השם שלי הוא קאזא, וזה cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [מחיאות כפות ומריעות] 70 00:04:43,090 --> 00:04:49,220 אהובים אחרת שלנו הייתה זו כניעה לכאן ממישהו. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [מלאן] גוגל את זה אם אתה לא מכיר מם הזה. 72 00:04:55,380 --> 00:05:01,480 >> ואז לבסוף, כמה אחרים שקבלו פורסם שאולי לזכות בפרס המקסים. 73 00:05:01,480 --> 00:05:06,820 [סטודנטים] אאווו! >> [מלאן] יהיה לנו להקשיב. זה קצר, אז תקשיב טוב. 74 00:05:08,580 --> 00:05:11,150 [דובר נקבה] מה שמך? >> לואי. 75 00:05:11,150 --> 00:05:16,120 [דובר נקבה] מה זה? >> [צחקוקים] CS50. [שחוק] 76 00:05:16,120 --> 00:05:19,510 [מלאן] הוא לוקח 2, אם כי. 77 00:05:19,510 --> 00:05:22,240 הנה, עבר. 78 00:05:23,030 --> 00:05:26,980 השמי הוא לואי, וזה CS50. 79 00:05:26,980 --> 00:05:30,250 [שחוק] אז זה הוא CS50x. 80 00:05:30,250 --> 00:05:33,230 תודה לכל אלה מכם ואילו לאחר יחד בבית 81 00:05:33,230 --> 00:05:35,620 שכבר partaking עד כה. 82 00:05:35,620 --> 00:05:39,510 כיום, אנו מגיעים למסקנת הדיון במבני נתונים שלנו, 83 00:05:39,510 --> 00:05:41,160 לפחות בחלק מבסיסי ביותר, 84 00:05:41,160 --> 00:05:44,760 ואז אנחנו ממשיכים בשיחתנו על HTML ותכנות אינטרנט. 85 00:05:44,760 --> 00:05:48,520 אכן, בילינו את העבר כשבעה שבועות מסתכלים על יסודות תכנות - 86 00:05:48,520 --> 00:05:50,450 אלגוריתמים, מבני נתונים, וכמו - 87 00:05:50,450 --> 00:05:53,050 ו-C, כפי שחווית עד כה, 88 00:05:53,050 --> 00:05:57,060 לא בהכרח נגיש ביותר של שפות 89 00:05:57,060 --> 00:05:59,090 עם שכדי ליישם כמה מהרעיונות האלה. 90 00:05:59,090 --> 00:06:01,880 וכך החל מהשבוע ובשבוע הבא ולאחר מכן הבא, 91 00:06:01,880 --> 00:06:07,110 אנחנו סוף סוף נוכל מעבר מ C, אשר ידועות בדרך כלל כשפה נמוכה למדי ברמה, 92 00:06:07,110 --> 00:06:11,190 לדברים ברמה גבוהה יותר, וביניהם PHP, JavaScript, וכמו, 93 00:06:11,190 --> 00:06:14,850 שאנחנו נראה לשאוב את אותם שיעורים שלמדנו בשבועות האחרונים, 94 00:06:14,850 --> 00:06:19,430 אבל תמצא שהצהיר דברים כמו מערכים ושולחנות חשיש וחיפוש ומיון 95 00:06:19,430 --> 00:06:23,370 להיות כל כך הרבה יותר קל משום שהשפות עצמן תתחלנה להשתמש 96 00:06:23,370 --> 00:06:25,290 יהיה יותר חזק. 97 00:06:25,290 --> 00:06:27,410 אבל קודם, יישום של עצים. 98 00:06:27,410 --> 00:06:30,240 זה נפוץ מאוד בימים אלה לצורך לדחוס מידע. 99 00:06:30,240 --> 00:06:34,770 באיזה קשר היית רוצה לדחוס איזה מידע דיגיטלי? 100 00:06:37,190 --> 00:06:39,670 >> כן. >> [תלמיד] כאשר אתה צריך לשלוח אותו דרך האינטרנט. 101 00:06:39,670 --> 00:06:41,450 כן, כשאתה רוצה לשלוח משהו דרך האינטרנט. 102 00:06:41,450 --> 00:06:44,950 אם אתה רוצה להוריד קובץ גדול, זה אידיאלי אם מישהו בצד השני 103 00:06:44,950 --> 00:06:48,760 יש דחוסי קובץ שמשתמש בפורמט ZIP או משהו כזה 104 00:06:48,760 --> 00:06:53,760 כך שאתה שולח פחות סיבי מאשר אחר עלול להיות מועבר. 105 00:06:53,760 --> 00:06:55,500 אז איך אתה לדחוס מידע? 106 00:06:55,500 --> 00:07:00,540 כל זה מסתכם לשימוש בפחות סיבי מאשר נדרשים כברירת מחדל. 107 00:07:00,540 --> 00:07:03,220 אבל זה סוג של דבר מוזר מפני חושבים לחזור לשבועות 0 ו 1 108 00:07:03,220 --> 00:07:07,370 כשדברנו על ASCII ובינארי ודברנו על ASCII בפרט 109 00:07:07,370 --> 00:07:10,690 כמו באמצעות 8 סיביים כדי לייצג אותיות האלפבית 110 00:07:10,690 --> 00:07:16,120 כך שהמכתב מיוצג על ידי 65, אותיות קטנות הוא המספר 97, 111 00:07:16,120 --> 00:07:21,210 ועם זאת אתם מייצגים את 65 או 97, אתה משתמש 7 או 8 סיבי. 112 00:07:21,210 --> 00:07:24,120 אבל לתפוס את זה שיש כמה אותיות באלפבית העברי 113 00:07:24,120 --> 00:07:26,230 כי הם לא פופולריים כמו אחרים. 114 00:07:26,230 --> 00:07:31,600 Z הוא לא כל כך פופולרי, ש היא לא כל כך פופולרי, אבל A ו-E הוא סופר פופולרי. 115 00:07:31,600 --> 00:07:37,280 ובכל זאת, לכל המכתבים הללו, כברירת מחדל בעולם משתמש באותו מספר הביטים, רק 8. 116 00:07:37,280 --> 00:07:42,690 אז האם לא היה חכם יותר אם במקום להשתמש 8 ביטים לכל אות, 117 00:07:42,690 --> 00:07:47,440 אפילו בשימוש לעתים רחוקות ביותר כמו Q ו-Z, 118 00:07:47,440 --> 00:07:51,910 מה אם היינו פחות סיבי ולE ו-S והאותיות הפופולריות ביותר 119 00:07:51,910 --> 00:07:55,000 וצרוך יותר ביטים לאותיות פחות הפופולריות, 120 00:07:55,000 --> 00:07:57,770 הרעיון הוא לייעל את בואו למקרה הנפוץ, 121 00:07:57,770 --> 00:08:01,160 אשר הוא נושא במדעי מחשב בניסיון לייעל את מה שהולך לקרות ביותר 122 00:08:01,160 --> 00:08:05,310 ולבלות קצת יותר זמן, קצת יותר מרחב בדברים, כן, עלול לקרות 123 00:08:05,310 --> 00:08:07,680 אך לא בהכרח בתדירות גבוהה. 124 00:08:07,680 --> 00:08:09,330 אז בואו ניקח דוגמה. 125 00:08:09,330 --> 00:08:12,610 >> תניח שאנחנו רוצים לקודד מידע די ביעילות. 126 00:08:12,610 --> 00:08:15,090 ייתכן שגדלתם בידיעה שמשהו קטן על קוד מורס, 127 00:08:15,090 --> 00:08:17,450 ורוב הסיכויים הם שאתה לא יודע את הקוד בפועל, 128 00:08:17,450 --> 00:08:21,750 אבל אתם אולי זוכרים שזה לפחות זו סדרה של נקודות וקווים. 129 00:08:21,750 --> 00:08:26,640 זהו קידוד יעיל למדי, והודעה שהמכתב הפופולרי ביותר - למשל, ה - 130 00:08:26,640 --> 00:08:28,980 משתמש הקצר של צפצופים. 131 00:08:28,980 --> 00:08:31,740 קוד המורס הוא על כל ביפ-ביפ-ביפ ומחזיק צלילים 132 00:08:31,740 --> 00:08:34,799 או לפרקי זמן קצרים או לתקופות זמן ארוכים. 133 00:08:34,799 --> 00:08:40,330 E, וכונה על ידי הנקודה, היא צפצוף קצר סופר, רק צפצוף, ושייצג את א ' 134 00:08:40,330 --> 00:08:43,960 לעומת זאת, T יהיה צפצוף ארוך יותר, כמו צפצוף [מאריך קול], 135 00:08:43,960 --> 00:08:45,710 ושאייצג ט 136 00:08:45,710 --> 00:08:48,840 אבל זה עדיין די קצר כי, לעומת זאת, אם אתה מסתכל על Z, 137 00:08:48,840 --> 00:08:52,690 להביע Z היית הולך ביפ, ביפ [צליל יותר], ביפ, ביפ [צליל קצר יותר]. 138 00:08:52,690 --> 00:08:55,360 אז זה כבר לא כי זה פחות מקובל. 139 00:08:55,360 --> 00:08:58,150 אבל תפסתי אותך כאן הוא שקוד המורס הוא קצת פגום 140 00:08:58,150 --> 00:09:00,610 בכך שהוא לא מייד decodable. 141 00:09:00,610 --> 00:09:07,350 לדוגמה, תניח שאתה שומע בסופו של דבר חלק מצפצוף החוט [קצר], צפצוף [עוד]. 142 00:09:07,350 --> 00:09:12,480 איזה מסר אני פשוט לא מקבל? נקודה ומקף. מה זה מייצג? 143 00:09:12,480 --> 00:09:15,330 [תלמיד] א '>> [מלאן] אולי. 144 00:09:15,330 --> 00:09:18,270 זה יכול להיות גם E ואחרי ט 145 00:09:18,270 --> 00:09:23,390 במילים אחרות, קוד מורס, למרות שהוא ממנף את העיקרון הזה של אופטימיזציה מקרה הפינה, 146 00:09:23,390 --> 00:09:26,250 זה לא להשאיל את עוצמה decodability המיידי. 147 00:09:26,250 --> 00:09:29,850 כלומר, האדם ששומע או מקבל נקודות וקווים אלה 148 00:09:29,850 --> 00:09:34,540 יש להבין איכשהו שבה הפסקות הן בין אותיות, 149 00:09:34,540 --> 00:09:39,660 כי אם אתה לא יודע איפה ההפסקות האלה, אתה עלול לבלבל לאי.טי. או להיפך. 150 00:09:39,660 --> 00:09:43,880 >> אז מה אפשר לעשות? בקוד מורס שאתה יכול פשוט להשהות בין כל אחד מהמכתבים. 151 00:09:43,880 --> 00:09:47,660 אך נעצר לרגע הוא סוג של סתירה לכל העניין של זירוז דברים. 152 00:09:47,660 --> 00:09:52,880 אז מה אם במקום זה בא עם קוד שבו לא היה המצב הגרוע הזה 153 00:09:52,880 --> 00:09:56,570 כאשר E היא קידומת, למשל, של - 154 00:09:56,570 --> 00:10:00,020 במילים אחרות, אם אנחנו יכולים לוודא שהדפוסים עדיין קצרים לאותיות הפופולריות 155 00:10:00,020 --> 00:10:04,850 ארוך לאותיות פחות הפופולריות, אבל אין בלבול אפשרי? 156 00:10:04,850 --> 00:10:08,930 אדם בשם של האפמן לפני שנים המציא שיטה זו נקראת קידוד האפמן 157 00:10:08,930 --> 00:10:12,390 כי למעשה ממנף את אחד ממבני הנתונים שאנחנו מבלים קצת זמן מדברים על 158 00:10:12,390 --> 00:10:16,560 בשבוע האחרון, זה של עצים, עצים בינאריים במיוחד - 159 00:10:16,560 --> 00:10:19,710 משמעות עץ בינארי שאין לו יותר מ 2 ילדים. 160 00:10:19,710 --> 00:10:22,720 יש אולי ילד שמאלי, אולי ילד נכון, וזהו. 161 00:10:22,720 --> 00:10:26,510 אז תניח רק לצורך הדיון שמישהו רוצה לשלוח הודעה 162 00:10:26,510 --> 00:10:31,270 שנראה כמו זה. זאת שטות גמורה אבל זה מורכב מכל, ארוחת בוקר, Cs, DS, וEs. 163 00:10:31,270 --> 00:10:34,890 ואם אתה ממש לספור את כל כ, ארוחת בוקר, Cs, DS, וEs 164 00:10:34,890 --> 00:10:36,870 ואז לחלק במספר הכולל של אותיות, 165 00:10:36,870 --> 00:10:42,710 התרשים הקטן הזה כאן, אומר כי 45% מהמכתבים הם אסתר, 20% הם כ, 166 00:10:42,710 --> 00:10:45,010 10% ארוחת בוקר, וכך הלאה. 167 00:10:45,010 --> 00:10:47,330 אז במילים אחרות, תניח שהמחרוזת צוטטה שם 168 00:10:47,330 --> 00:10:49,080 רק מסר כלשהו שברצונך לשלוח. 169 00:10:49,080 --> 00:10:52,180 זה קורה להיות שטויות רק כדי שנוכל להשתמש בו כמספר אותיות ככל האפשר, 170 00:10:52,180 --> 00:10:55,220 אבל זה אכן המקרה שהדואר נשאר פופולרי ביותר, 171 00:10:55,220 --> 00:11:01,450 ו-B ו-C הם הפחות פופולרי, לפחות של 5 אותיות אלה של האלפבית. 172 00:11:01,450 --> 00:11:04,040 אז איך אנחנו יכולים ללכת על זה שהגיע עם קידוד, 173 00:11:04,040 --> 00:11:08,430 קידוד בינארי, דפוס של 0s ו 1s לכל אחד מהמכתבים האלה 174 00:11:08,430 --> 00:11:14,820 בצורה כזאת, כי E היא דפוס קצר ואולי B ו-C הם דפוסים מעט ארוכים יותר, 175 00:11:14,820 --> 00:11:19,270 שוב, הרעיון הוא שאנחנו רוצים להשתמש פחות סיביים רוב הזמן 176 00:11:19,270 --> 00:11:21,790 ועוד דברים רק פעם בכמה זמן. 177 00:11:21,790 --> 00:11:26,070 לדברי האפמן קידוד, אתה יכול ליצור יער של עצים. 178 00:11:26,070 --> 00:11:31,190 יש סוג של קו פה סיפור שכרוך בעצים וגם בתהליך של בנייתם. 179 00:11:31,190 --> 00:11:32,420 בואו נתחיל. 180 00:11:32,420 --> 00:11:36,140 >> אני מציע לך להתחיל עם יער זה, כביכול, של 5 עצים, 181 00:11:36,140 --> 00:11:38,260 כל אחד מהם הוא עץ די טיפש. 182 00:11:38,260 --> 00:11:42,800 העץ מורכב מסתם צומת אחת, כפי שמיוצגת כאן על ידי המעגל. 183 00:11:42,800 --> 00:11:45,310 אז כל אחד מהדברים האלה יכול להיות struct C 184 00:11:45,310 --> 00:11:50,200 ובתוך struct C עשויה להיות לצוף מייצג את ספירת התדירות 185 00:11:50,200 --> 00:11:52,510 ואז אולי char המייצג את המכתב. 186 00:11:52,510 --> 00:11:56,470 אז תחשוב על צומת האלה כסתם struct C ישן, אבל, לעת עתה, ברמה גבוהה יותר. 187 00:11:56,470 --> 00:12:01,230 זהו יער של עצים 5, כל אחד שיש צומת אחת בלבד. 188 00:12:01,230 --> 00:12:06,830 מה האפמן המוצע הוא שאנחנו מתחילים לשלב העצים האלה 189 00:12:06,830 --> 00:12:11,140 שיש את ספירת השכיחות הקטנה ביותר לעצים גדולים מעט יותר 190 00:12:11,140 --> 00:12:13,490 עד לחיבור לצומת שורש חדשה. 191 00:12:13,490 --> 00:12:17,560 אז בין האותיות כאן, שים לב כי לנוחיות שאמיין אותם משמאל לימין, 192 00:12:17,560 --> 00:12:21,420 למרות שזה לא הכרחי, ושים לב שהבלוטות הקטנות ביותר 193 00:12:21,420 --> 00:12:23,930 כיום 10% ו 10%. 194 00:12:23,930 --> 00:12:28,940 אז האפמן הציע שלמזג 2 הבלוטות הקטנות האלה לתוך עץ חדש 195 00:12:28,940 --> 00:12:34,450 על ידי החדרת צומת הורה חדשה ולאחר מכן לתת ההורה שילד שמאלי וימני ילד 196 00:12:34,450 --> 00:12:37,720 בי B הוא שרירותי השמאל ו-C הוא שרירותי הנכון. 197 00:12:37,720 --> 00:12:41,590 ואז האפמן עוד מוצע, כי בואו עכשיו רק נחשוב על הילד השמאלי 198 00:12:41,590 --> 00:12:44,790 באחד מהעצים האלה תמיד כפי שמיוצגים על ידי 0 199 00:12:44,790 --> 00:12:47,890 והילד צודק תמיד כפי שמיוצג על ידי המספר 1. 200 00:12:47,890 --> 00:12:50,680 >> זה לא משנה אם אתה להעיף אותם, כל עוד אתה עקבי. 201 00:12:50,680 --> 00:12:54,650 אז עכשיו יש לנו ארבעה עצים ביער הזה. 202 00:12:54,650 --> 00:12:58,050 ואני אומר כי עכשיו 4 עץ מהשמאל - 203 00:12:58,050 --> 00:13:00,570 וזה לא כל כך הרבה עץ, במובן זה שהוא גדל בדרך זו, 204 00:13:00,570 --> 00:13:05,170 זה יותר כמו עץ ​​משפחה שבו עכשיו 0.2 הוא סוג של ההורה של שני ילדים - 205 00:13:05,170 --> 00:13:07,930 מבחין כי שבהורה אנחנו נמשכים 0.2. 206 00:13:07,930 --> 00:13:13,370 אנחנו הוספנו את ספירת השכיחות של שני ילדים ונתנו את הצומת החדשה הסכום הכולל. 207 00:13:13,370 --> 00:13:15,310 אז עכשיו אנחנו פשוט לחזור על תהליך זה. 208 00:13:15,310 --> 00:13:19,490 מצא את שני צומת הקטנים ביותר ואז תחבר אותם לעץ חדש 209 00:13:19,490 --> 00:13:21,380 ואז לחזור על התהליך עוד יותר. 210 00:13:21,380 --> 00:13:26,390 כרגע יש לנו כמה מועמדים, 20%, 15%, ו 20% נוספים. 211 00:13:26,390 --> 00:13:29,780 במקרה זה, יש לנו לשבור את העניבה. אנחנו יכולים לעשות את זה באופן שרירותי. 212 00:13:29,780 --> 00:13:31,540 אנחנו צריכים פשוט לעשות את זה באופן עקבי. 213 00:13:31,540 --> 00:13:33,760 במקרה זה, אני שרירותי ללכת עם האחד בצד השמאל, 214 00:13:33,760 --> 00:13:39,880 ואני עכשיו למזג 20% ושל 15% שינתנו לי הורה חדש בשם 35%, 215 00:13:39,880 --> 00:13:46,310 ילד ששמאל הוא 0, שזכות ילד הוא 1, ועכשיו יש לנו רק שלושה עצים ביער. 216 00:13:46,310 --> 00:13:47,960 אתה אולי יכול לראות לאן זה הולך. 217 00:13:47,960 --> 00:13:51,150 אם אנחנו חוזרים על זה עוד כמה פעמים, אנחנו הולכים להיות רק עץ אחד גדול, 218 00:13:51,150 --> 00:13:53,900 שכל קצוות מסומנים עם 0s ו 1s. 219 00:13:53,900 --> 00:13:55,710 בואו נעשה את זה שוב. 220 00:13:55,710 --> 00:14:02,600 35% הם שורשו של העץ. 20% ו 45%, ולכן אנחנו הולכים למיזוג של 35% ו 20%. 221 00:14:02,600 --> 00:14:05,610 עכשיו יש לנו העץ הזה כאן. אנו מוסיפים אלה יחד, יש לנו 55%. 222 00:14:05,610 --> 00:14:07,910 עכשיו יש רק שני עצים ביער. 223 00:14:07,910 --> 00:14:11,900 אנחנו עושים את זה פעם אחת אחרונה, ואני מקווה מתמטי כל התדרים להוסיף עד 224 00:14:11,900 --> 00:14:15,570 כי הם צריכים מאז שמחושבים אותם מהרגע הראשון להוסיף עד 100%. 225 00:14:15,570 --> 00:14:17,960 ועכשיו יש לנו עץ אחד. 226 00:14:17,960 --> 00:14:20,580 אז זה עץ האפמן קידוד. 227 00:14:20,580 --> 00:14:24,400 זה סוג של לקח זמן להגיע לשם באופן מילולי, אבל המציאות היא שעם ללולאה 228 00:14:24,400 --> 00:14:27,620 או עם פונקציה רקורסיבית, אתה יכול לבנות את הדבר הזה די מהר. 229 00:14:27,620 --> 00:14:32,440 אז עכשיו יש לנו צומת חדשה אחד, וכל צומת הפנימיים הללו malloc'd, 230 00:14:32,440 --> 00:14:34,690 ככל הנראה, לאורך כל הדרך. 231 00:14:34,690 --> 00:14:38,650 אז עכשיו בחלק העליון של העץ הזה יש לנו 100%, אבל עכשיו שמנו לב שיש לנו דרך 232 00:14:38,650 --> 00:14:43,780 מזה-הורי סבים גדולים חדשים גדולים לכל כמות של נכדי רבה הגדולות 233 00:14:43,780 --> 00:14:45,930 כל הדרך בתחתית, לכל העלים. 234 00:14:45,930 --> 00:14:52,840 >> מה אנחנו הולכים לעשות עכשיו הוא מציע כי על מנת לייצג את אות E, 235 00:14:52,840 --> 00:14:55,670 אנחנו פשוט נשתמש במספר 1. למה? 236 00:14:55,670 --> 00:15:01,000 כי אם אנחנו חוצים את העץ הזה מהשורש הסופי עד לעלה הידוע כדואר, 237 00:15:01,000 --> 00:15:06,050 אנו עוקבים רק קצה אחד, הקצה הימני, וזה כמובן שכותרת ליום 1 בצד ימין למעלה. 238 00:15:06,050 --> 00:15:11,550 אז מה שמשתמע כאן לאפמן היה שהקידוד של E בינארי שסתם יהיה 1. 239 00:15:11,550 --> 00:15:14,490 וזה די לא יעיל. באמת אינך יכול לצמצם יותר מזה. 240 00:15:14,490 --> 00:15:18,350 לעומת זאת, הולך להיות מיוצגים, אם אתה מבין את ההיגיון, 241 00:15:18,350 --> 00:15:21,610 לפי מה דפוס של ביטים במקום? 01. 242 00:15:21,610 --> 00:15:25,500 אז כדי להגיע ל, אנחנו מתחילים בשורש וללכת שמאלה ואז ימינה, 243 00:15:25,500 --> 00:15:28,580 מה שאומר שאנחנו אחרי 0 ואז 1. 244 00:15:28,580 --> 00:15:32,810 אז תייצג את המכתב עם הדפוס 0 ו 1. 245 00:15:32,810 --> 00:15:36,010 ועכשיו שם לב כבר יש לנו רכוש של decodability המיידי 246 00:15:36,010 --> 00:15:38,090 שלא היה לנו בקוד מורס. 247 00:15:38,090 --> 00:15:42,840 למרות ששניהם של דפוסים אלה הם די קצרים - E היא 1 ביט, הוא 2 ביטים - 248 00:15:42,840 --> 00:15:45,080 שם לב שהם לא יכולים להיות מבולבלים זה או אחר, 249 00:15:45,080 --> 00:15:54,870 כי אם אתה רואה 1 זה חייב להיות E, אם אתה רואה 0 אז 1 זה חייב להיות ברור א 250 00:15:54,870 --> 00:15:58,410 בדומה לכך, מה D? 001. 251 00:15:58,410 --> 00:16:01,440 מה זה C? 0001. 252 00:16:01,440 --> 00:16:05,320 ומה הוא B? 0000. 253 00:16:05,320 --> 00:16:09,550 ושוב, כי כל המכתבים חשובים לנו הם על העלים 254 00:16:09,550 --> 00:16:13,890 ואף אחד מהם הם סוג של מתווכים בדרך משורש ועד עלים, 255 00:16:13,890 --> 00:16:18,760 אין סיכון של מצרף קידודים השונים 2 אותיות 256 00:16:18,760 --> 00:16:22,300 משום שכל אלה הם דפוסים הסיביים דטרמיניסטיים. 257 00:16:22,300 --> 00:16:25,280 0000 תמיד יהיו B. 258 00:16:25,280 --> 00:16:29,480 אין צומת איפשהו באמצע, כי אתה עלול לבלבל את אות אחת לשנייה. 259 00:16:29,480 --> 00:16:31,150 אז מה המשמעות כאן? 260 00:16:31,150 --> 00:16:35,080 >> המכתב הפופולרי ביותר - במקרה זה אי - קבל את הקידוד הקצר ביותר, 261 00:16:35,080 --> 00:16:37,430 קבל את הקידוד הקצר הבא, 262 00:16:37,430 --> 00:16:41,390 ו-B ו-C, שכבר ידע מהסוג היו מקבל-go של הפחות הפופולרי 263 00:16:41,390 --> 00:16:45,390 בתדירות של 10% כל אחד, הם מקבלים את הקידוד הארוך ביותר. 264 00:16:45,390 --> 00:16:49,410 ואז מה זה אומר הוא שאם אתה רוצה לשלוח הודעה זה דחוס 265 00:16:49,410 --> 00:16:51,950 באינטרנט או בדואר אלקטרוני או כ, 266 00:16:51,950 --> 00:16:56,730 במקום להשתמש ASCII הרגיל, תוכל לשלוח הודעה מוצפנת האפמן 267 00:16:56,730 --> 00:17:01,720 שלפיו אם ברצונך לשלוח מכתב הדואר, שתשלח רק קצת בודדה. 268 00:17:01,720 --> 00:17:05,680 אם ברצונך לשלוח, אתה שולח 2 ביטים, 01, במקום לשלוח 8 סיביים 269 00:17:05,680 --> 00:17:10,190 אחרי 8 ביטים נוספים ובעקבותיה 8 ביטים נוספים וכן הלאה. 270 00:17:10,190 --> 00:17:11,940 אבל יש תפס אותך כאן. 271 00:17:11,940 --> 00:17:17,079 זה לא מספיק רק לבנות את העץ הזה ואז להתחיל לשלוח מאליס לבוב 272 00:17:17,079 --> 00:17:20,010 הדפוס קצת קצר יותר, מחרוזת מASCII, 273 00:17:20,010 --> 00:17:23,140 משום שאליס יש גם להודיע ​​בוב של מה 274 00:17:23,140 --> 00:17:26,880 אם בוב הולך להיות מסוגל לקרוא את הודעתה הדחוסה? 275 00:17:26,880 --> 00:17:30,770 [תגובת תלמיד לא נשמע] >> מה זה? 276 00:17:30,770 --> 00:17:32,310 [תגובה בלתי נשמעת תלמיד] >> ממה הוא העץ. 277 00:17:32,310 --> 00:17:35,160 או אפילו יותר ספציפי, מה קידודים אלה, 278 00:17:35,160 --> 00:17:39,010 במיוחד מאחר בסיפור הזה עשינו שיחת שיפוט בנקודה אחת. 279 00:17:39,010 --> 00:17:43,640 זכור שיש לנו לבחור באופן שרירותי בין 2 צומת השונים 20%? 280 00:17:43,640 --> 00:17:49,800 אז זה לא המקרה שבוב, הנמען, יכול פשוט לשחזר את העץ בעצמו 281 00:17:49,800 --> 00:17:53,390 כי אולי הוא ייצור את העץ אי פעם כל כך שונה במעט מאליס. 282 00:17:53,390 --> 00:17:56,670 יתר על כן, בוב אפילו לא יודע מה היא ההודעה המקורית 283 00:17:56,670 --> 00:18:00,770 כי הדבר היחיד שאליס שולחת לו, כמובן, הוא המסר הדחוס. 284 00:18:00,770 --> 00:18:05,900 >> אז תופס עם דחיסה כמו זה שכן, אליס יכולה לחסוך המון חתיכות 285 00:18:05,900 --> 00:18:09,900 על ידי שליחת 1 עבור E ו 01 ולכן הלאה, 286 00:18:09,900 --> 00:18:15,180 אבל גם לה יש להודיע ​​לבוב מה הוא המיפוי בין אותיות וחתיכות 287 00:18:15,180 --> 00:18:19,620 בגלל שהם לא יכולים להסתמך על בהירות רק ASCII יותר אם אנחנו לא משתמשים בתווי ASCII. 288 00:18:19,620 --> 00:18:22,200 אז או שהיא יכולה לשלוח אותו לעץ איכשהו - 289 00:18:22,200 --> 00:18:26,600 לכתוב אותו, לאחסן אותו כנתונים בינאריים או משהו כזה - 290 00:18:26,600 --> 00:18:30,280 או פשוט לשלוח לו גיליון קצת לרמות, קובץ Excel, המציג את המיפויים. 291 00:18:30,280 --> 00:18:36,480 אז היעילות של דחיסה באמת מניחה שההודעות שאתה שולח 292 00:18:36,480 --> 00:18:40,230 הם די גדולים, לפחות בגודל בינוני, 293 00:18:40,230 --> 00:18:42,180 כי אם אתה שולח הודעת סופר קצרה, 294 00:18:42,180 --> 00:18:45,390 אם אתה רק רוצה לשלוח המסר רע, שקורה להיות מילה שאנחנו יכולים לאיית כאן, 295 00:18:45,390 --> 00:18:49,550 B--D, אז כנראה שאתה הולך להשתמש בפחות סיבי, 296 00:18:49,550 --> 00:18:53,130 אבל המלכוד הוא אם יש לך גם להודיע ​​מה בוב העץ הוא 297 00:18:53,130 --> 00:18:57,530 או מה קידודים אלה, אתה הולך כנראה כדי להכריע את כל החסכונות 298 00:18:57,530 --> 00:19:00,110 שיש דברים דחוסים מלכתחילה. 299 00:19:00,110 --> 00:19:02,210 אז זה באמת יכול להיות מקרה שאם אתה מנסה לדחוס 300 00:19:02,210 --> 00:19:05,330 אפילו עם משהו כמו פורמטי zip או קובץ אתה יכול להיות מוכר עם - 301 00:19:05,330 --> 00:19:07,780 קבצים די קטנים, קבצים אפילו ריקים - 302 00:19:07,780 --> 00:19:10,930 לעתים קבצים אלה עשויים לקבל יותר ולא קטנים יותר. 303 00:19:10,930 --> 00:19:14,320 אבל באופן מציאותי, זה קורה רק לגודל קובץ קטן, 304 00:19:14,320 --> 00:19:16,920 כך שזה לא הולך להפוך את קובץ ג'יגה יהיה 2 ג'יגה; 305 00:19:16,920 --> 00:19:19,480 אנחנו באמת מדברים בתים, או רק כמה ק"ג. 306 00:19:19,480 --> 00:19:22,330 >> חלק מהתוכניות כגון zip הן חכמות מספיק כדי להבין את זה, 307 00:19:22,330 --> 00:19:24,590 "אתה הולך לבלות עוד חתיכות דחיסה זה." 308 00:19:24,590 --> 00:19:27,460 "תן לי לא מפריע לך לדחוס אותו בכלל". 309 00:19:27,460 --> 00:19:30,160 אז זה הוא רק דרך אחת אז של דחיסת פורמט טקסט. 310 00:19:30,160 --> 00:19:32,300 אנחנו יכולים ליישם משהו כזה בג 311 00:19:32,300 --> 00:19:35,370 לדוגמה, הנה כיצד תוכל לייצג צומת בעץ הזה 312 00:19:35,370 --> 00:19:39,320 שם יש לנו char לסמל, ערך צף לתדר, 313 00:19:39,320 --> 00:19:42,250 וכפי שראינו במבנים האחרים שלנו הנתונים, 2 מצביעים, 314 00:19:42,250 --> 00:19:47,080 1 עד ילד השמאל, 1 בצד ימין, או של מה שיכול להיות NULL, 315 00:19:47,080 --> 00:19:50,850 אבל אם לא, זה מתייחס לילד שמאלי וילד נכון. 316 00:19:50,850 --> 00:19:55,130 זוהי אפוא האפמן קידוד, וזו אחת דרכים שאתה יכול ללכת על דחיסת מידע, 317 00:19:55,130 --> 00:19:57,880 וזה בהחלט אחד מקל ביותר ליישום 318 00:19:57,880 --> 00:20:00,830 בהקשר של, יניח, מבני הנתונים בשבוע שעבר, 319 00:20:00,830 --> 00:20:03,250 למרות שאפילו אלגוריתמים מתוחכמים יותר קיימים 320 00:20:03,250 --> 00:20:08,220 שיכול לעשות מוטציות אפילו מתוחכמות יותר של הנתונים שלך. 321 00:20:08,220 --> 00:20:11,640 כל שאלות ואז על עצים, עצים בינאריים, או דחיסה של טקסט? 322 00:20:11,640 --> 00:20:15,590 [תלמיד] האם יש עמימות, כמו אם [לא ברור] פיצול 01, 323 00:20:15,590 --> 00:20:19,160 אז 011 יהיו מעורפל, נכון? 324 00:20:19,160 --> 00:20:22,730 [לא ברור] >> שאלה טובה. עמימות. 325 00:20:22,730 --> 00:20:25,940 הרשה לי לסכם, על ידי פנייה לתמונה הזאת כאן. 326 00:20:25,940 --> 00:20:29,650 מאחר שהתווים אתה הדחיסה, את הייצוגים של, 327 00:20:29,650 --> 00:20:32,850 על פי הגדרה של אלגוריתם זה תמיד יישארו את העלים, 328 00:20:32,850 --> 00:20:41,870 יותר לא תוכל להשתמש באותו הדפוס של ביטים בטעות לקידומת של מכתבים מרובים. 329 00:20:41,870 --> 00:20:46,740 אז במילים אחרות, אתה מודאג, זה נשמע כמו, עמימות הנובעת 330 00:20:46,740 --> 00:20:51,580 לפי 001 יכול להיות ההתחלה של B או C או ההתחלה של משהו כזה. 331 00:20:51,580 --> 00:20:56,780 אבל זה לא יכול להיות מקרה, בגלל הודעה שכל האותיות האלפבית אנחנו קידוד 332 00:20:56,780 --> 00:20:58,290 הם על העלים. 333 00:20:58,290 --> 00:21:01,910 >> העמימות יכולה לנבוע רק, כמו במקרה של קוד מורס, 334 00:21:01,910 --> 00:21:06,770 אם, למשל, C היה איפשהו לאורך הדרך מהשורש עד B. 335 00:21:06,770 --> 00:21:12,290 [תלמיד] ימני. אז במקרה כזה, אומר יש 2 עלים. >> יגיד יש - יגיד את זה שוב. 336 00:21:12,290 --> 00:21:18,760 [תלמיד] יגיד יש 2 עלים, F ו-G, ואז G - >> בסדר. אבל זה לא יכול. 337 00:21:18,760 --> 00:21:23,230 עצמו לא היה יכול לי F עלים ו-G, כי מכתבים אלה F ו-G 338 00:21:23,230 --> 00:21:27,560 היינו משאיר את עצמם להיות במקום בצד השמאל של B או זכותו של א ' 339 00:21:27,560 --> 00:21:28,900 אז בהגדרה, הם חייבים להיות בעלים. 340 00:21:28,900 --> 00:21:32,940 אחרת, אתה בדיוק נכון, יש לנו לא פתר את הבעיה שניצבת בפני קוד מורס. 341 00:21:32,940 --> 00:21:38,150 שאלה טובה. שאלות אחרות? בסדר. 342 00:21:38,150 --> 00:21:42,050 רעיון זה של ביטים, מתברר שהיינו לנו כוח לכל אורך הדרך שאנחנו כבר לא בשימוש בפועל 343 00:21:42,050 --> 00:21:44,200 כשזה הגיע למניפולצית 0s ו 1s אלה. 344 00:21:44,200 --> 00:21:46,600 שאלנו על זה באחת מהסדרות הבעייתיות הראשונות: 345 00:21:46,600 --> 00:21:52,340 כלומר, איך אתה הולך על המרת אותיות רישיות לאותיות קטנות או להיפך? 346 00:21:52,340 --> 00:21:55,460 או, באופן קונקרטי יותר, אחד מpsets הראשון הללו בקש 347 00:21:55,460 --> 00:22:01,090 כמה חתיכות אתה באמת נכנסת צריך להעיף כדי לשנות לאותיות קטנות או להיפך? 348 00:22:01,090 --> 00:22:05,580 הנה תזכורת קצרה על מה 65 ו 97 נראים כמו בינארי. 349 00:22:05,580 --> 00:22:08,060 וגם אם שאלה שקצת דהתה בזיכרון שלך, 350 00:22:08,060 --> 00:22:11,290 אתה יכול לראות כאן שוב שכמה ביטים צריכים להיות התהפך 351 00:22:11,290 --> 00:22:15,810 כדי לשנות את ההון לאותיות קטנות? רק אחד. 352 00:22:15,810 --> 00:22:19,650 >> הם נבדלים רק במיקום אחד, קצת השלישי מהשמאל. 353 00:22:19,650 --> 00:22:24,240 בעוד שיש לו 010, קטן יש 011. 354 00:22:24,240 --> 00:22:26,250 אז איכשהו, אנחנו צריכים רק כדי להיות מסוגלים להעיף את החלק הזה, 355 00:22:26,250 --> 00:22:29,410 ואז אנחנו יכולים לנצל או אותיות קטנות. 356 00:22:29,410 --> 00:22:32,720 אנחנו עשינו את זה בעבר על ידי שימוש בפועל אם תנאים 357 00:22:32,720 --> 00:22:35,930 ובדיקה אם האות היא בין הון וההון Z, 358 00:22:35,930 --> 00:22:41,480 אז יציאות כמו - + 26 או משהו כזה. 359 00:22:41,480 --> 00:22:46,130 אתה כנראה עשית שינוי חשבון לאותיות האלפבית. 360 00:22:46,130 --> 00:22:49,270 אבל מה אם היינו יכול פשוט לדפדף קצת בודד? 361 00:22:49,270 --> 00:22:59,080 איך אתה יכול ללכת על לקיחה שווה של ייט אחד של ביטים, כך 8 סיביים כמו 01000001 01100001 ו? 362 00:22:59,080 --> 00:23:03,170 אם היה לך דפוסים אלה של ביטים, איך אנחנו יכולים ללכת על שינוי רק אחד מהם? 363 00:23:03,170 --> 00:23:07,610 מה אם אנחנו מציגים בצהוב כאן דפוס של ביטים אחרים? 364 00:23:07,610 --> 00:23:13,420 אם אני עושה את 0s השרוך ​​הצהוב השלם למעט בכלל שאני רוצה לשנות 365 00:23:13,420 --> 00:23:17,900 ולאחר מכן אני מציג את מפעיל חדש המכונה מפעיל סיבי האופרטור - 366 00:23:17,900 --> 00:23:21,210 סיבי האופרטור במובן זה שהיא פועל על ביטים בודדים, 367 00:23:21,210 --> 00:23:25,360 לא בכל בתים או ארבעה בתים בבת אחת. 368 00:23:25,360 --> 00:23:31,170 סרגל זה אנכי יש בצהוב עולה כי מה אם תיקחו את הייצוג של הון 369 00:23:31,170 --> 00:23:37,060 וסיבי האופרטור או זה עם הרצף של ביטים הצהובים? 370 00:23:37,060 --> 00:23:41,300 במילים אחרות, חושב בחזרה לדיון של ביטויים בוליאניים בסריטות שלנו ולאחר מכן בג 371 00:23:41,300 --> 00:23:47,520 >> עושה וליאני או אומר שזה יהיה נכון, או שהדבר הראשון שחייב להיות נכון 372 00:23:47,520 --> 00:23:50,700 או הדבר השני חייב להיות אמיתי או ששניהם צריכים להיות אמיתי, 373 00:23:50,700 --> 00:23:53,270 ואז הפלט המתקבל הוא שהיא אמיתית. 374 00:23:53,270 --> 00:24:00,230 במקרה זה כאן, על מה אנחנו מקבלים אם ניקח 0 "או" אד עם 0? שקר או שקר? 375 00:24:00,230 --> 00:24:04,280 עדיין אין זה אמיתי, ולכן קטן נשאר כצפוי. 376 00:24:04,280 --> 00:24:07,540 מה אם במקום שאנו עושים 1 או 0? 377 00:24:07,540 --> 00:24:12,640 זה עכשיו נשאר 1, אבל שים לב למה שעומד להתרחש כאן. 378 00:24:12,640 --> 00:24:18,630 אם נתחיל בבירה ואנחנו ממשיכים "או" ביטים הבודדים שלה כמו שאנחנו עושים כאן, 379 00:24:18,630 --> 00:24:25,180 0 או 1 הצהוב נותנים לנו את מה שירד לכאן? זה נותן לנו 1. 380 00:24:25,180 --> 00:24:35,120 למעשה, יניח שאנו לא יודעים מה הגרסה של האותיות הגדולה קטן הייתה בפועל. 381 00:24:35,120 --> 00:24:38,270 בואו נלך לעשות את זה. תן לי להזיז את זה בחזרה לכאן. 382 00:24:38,270 --> 00:24:42,340 בואו נעשה זאת שוב. 0 או 0 נותנים לי 0. 383 00:24:42,340 --> 00:24:45,020 1 או 0 נותן לי 1. 384 00:24:45,020 --> 00:24:48,020 0 או 1 נותן לי 1. 385 00:24:48,020 --> 00:24:52,880 0 או 0 נותנים לי 0. הבא בתור היא 0, הבא הוא 0, הבא הוא 0. 386 00:24:52,880 --> 00:24:55,660 1 או 0 נותן לי 1. 387 00:24:55,660 --> 00:24:59,140 ולכן גם אם אנו לא יודעים מראש מה אותיות קטנות היה, 388 00:24:59,140 --> 00:25:04,770 פשוט על ידי "או" ing עם דפוס זה של ביטים שאנחנו כבר הוצגנו כאן בצהוב, 389 00:25:04,770 --> 00:25:09,400 אתה יכול אותיות קטנה הון על ידי flipping את הקטע הזה. 390 00:25:09,400 --> 00:25:11,580 אנחנו משתמשים בכך לפני שבועות ביטוי: רפרף קצת. 391 00:25:11,580 --> 00:25:13,710 איך אתה בעצם עושה את זה באמצעות תכנות? 392 00:25:13,710 --> 00:25:16,390 אתה משתמש במה שנקרא מסכה, רצף של ביטים, בדרך 393 00:25:16,390 --> 00:25:19,980 כי במקרה זה פשוט קורה כל כך להיראות כמו המספר הזה כאן, 394 00:25:19,980 --> 00:25:22,980 ואז אתה "או" את זה ביחד באמצעות מפעיל C חדש זה, 395 00:25:22,980 --> 00:25:29,940 לא | |, אתה משתמש באחת | והיית ממש מקבל תשובה זה כאן כי למה? 396 00:25:29,940 --> 00:25:35,120 זה מקום 1s, 2s מקום, 16s 4s, 8s, 32s. 397 00:25:35,120 --> 00:25:42,280 אז מתברר שאם אתה לוקח את אות גדולה וסיבי האופרטור או אותו עם 32 השלמים, 398 00:25:42,280 --> 00:25:47,520 בגלל 32 מספרים השלמים, כאשר אתה מסתכל על זה כביטים, נראה כך, 399 00:25:47,520 --> 00:25:50,860 זה אומר שאתה יכול להעיף קצת שאתה באמת רוצה. 400 00:25:50,860 --> 00:25:52,630 ובאופן דומה - ואנחנו מסתכלים על קוד ברגע - 401 00:25:52,630 --> 00:25:54,210 אניח שאנחנו רוצים ללכת לכיוון השני. 402 00:25:54,210 --> 00:25:58,210 >> איך אתה הולך מאותיות קטנה לבירה? באיזה קטע זה צריך להשתנות? 403 00:25:58,210 --> 00:25:59,820 זה אותו אחד. 404 00:25:59,820 --> 00:26:03,970 אנחנו רוצים לשנות את זה קצת שלישי מ1 עד 0. 405 00:26:03,970 --> 00:26:06,310 ואיך ניתן ללכת על עושה את זה? 406 00:26:06,310 --> 00:26:10,130 איך לכבות קצת? עם מה דפוס של ביטים יכולנו לכבות קצת? 407 00:26:11,580 --> 00:26:14,070 מה אם מיון של מרחב זה המסכה? 408 00:26:14,070 --> 00:26:17,350 בעוד שבעבר, עשה 0s המסכה הצהובה השלם 409 00:26:17,350 --> 00:26:19,930 פרט לביט אחד שאנחנו רוצים להפעיל, 410 00:26:19,930 --> 00:26:25,580 מה אם הפעם, אנו עושים את כל המסכה 1s למעט קצת שאנחנו רוצים לכבות 411 00:26:25,580 --> 00:26:28,330 ולאחר מכן להשתמש במה מפעיל? 412 00:26:28,330 --> 00:26:30,560 מה אם "ו" דברים? בואו נעיף מבט. 413 00:26:30,560 --> 00:26:34,880 אם עכשיו להעיף לזה, תניח ששוב אני יוצר מסכה זה כל 1s 414 00:26:34,880 --> 00:26:37,650 מלבד בכלל שאני רוצה לכבות 415 00:26:37,650 --> 00:26:43,860 ואז, במקום "או" המספרים הלבנים עד למעלה עם מספרים הצהובים כאן למטה, 416 00:26:43,860 --> 00:26:46,940 מה אם אני במקום "וגם" אותם יחד? זה נקרא סיבי האופרטור ו. 417 00:26:46,940 --> 00:26:49,450 מבחינה הגיונית, זה אותו הדבר כמו בוליאני ו. 418 00:26:49,450 --> 00:26:55,160 זה נותן לי 0 & 1 הם 0. אז שקר ואמת הוא שקר. 419 00:26:55,160 --> 00:26:58,160 אמת לאמיתה היא נכונה. 420 00:26:58,160 --> 00:27:04,020 והנה קסם: אמת ושקר הוא שקר עכשיו, אז אנחנו כבר כיבינו את הקטע הזה. 421 00:27:04,020 --> 00:27:06,560 ועכשיו שאר הסיפור הוא קצת פשוט. 422 00:27:06,560 --> 00:27:11,970 כי שאר המסכה הוא 1s, זה לא משנה מה המספרים הם בלבן. 423 00:27:11,970 --> 00:27:15,580 כאשר אתה "ו" משהו עם אמיתי, אתה לא הולך לשנות את הערך שלו. 424 00:27:15,580 --> 00:27:20,200 אם זה נכון, הוא יישאר נכון. אם זה היה נכון, הוא יישאר שקר. 425 00:27:20,200 --> 00:27:23,190 >> אבל הקסם קורה כאשר אתה לוקח משהו שהיה נכון 426 00:27:23,190 --> 00:27:25,430 ואז אתה "ו" אותו עם שקר. 427 00:27:25,430 --> 00:27:30,030 יש לזה אפקט של כיבוי קצת ש. 428 00:27:30,030 --> 00:27:31,980 אז לא ברור מספיק לשם. 429 00:27:31,980 --> 00:27:35,390 בואו באמת מסתכלים על קוד מסוים, שבאמת עשוי להיראות אפילו יותר מסתורי, 430 00:27:35,390 --> 00:27:38,220 אבל בואו נסתכל כאן בtolower. 431 00:27:38,220 --> 00:27:45,880 אם אני מסתכל על tolower, הולך מהון לאותיות קטנות, 432 00:27:45,880 --> 00:27:47,730 בואו נראים כיצד תוכל ליישם תכנית זו. 433 00:27:47,730 --> 00:27:51,280 הנה ראשי, וזה לא לוקח שום טיעוני שורת פקודה. 434 00:27:51,280 --> 00:27:55,980 הריני מצהיר ג אופי למכתב שהמשתמש עומד להקליד פנימה 435 00:27:55,980 --> 00:28:00,690 אז אני משתמש עשה מוכר תוך לולאה רק לוודא שהמשתמש בהחלט נותן לי הון 436 00:28:00,690 --> 00:28:05,010 או B או C. .. Z, ולכן הם נותנים לי משהו בין וז' 437 00:28:05,010 --> 00:28:08,580 ועכשיו מה אני עושה פה? 438 00:28:08,580 --> 00:28:14,870 אני "או" זה עם ing 0x20, אבל זה בעצם אותו הדבר כמו - 439 00:28:14,870 --> 00:28:19,500 ואנחנו נחזור לזה ברגע - 32. 440 00:28:19,500 --> 00:28:24,830 אז שוב, 32 הם זה דפוס של ביטים כאן. למה אנחנו יודעים את זה? 441 00:28:24,830 --> 00:28:26,320 רק ייזכר שבוע 0. 442 00:28:26,320 --> 00:28:31,010 זה מקום 1s, 2s המקום, 4s, 8s, 16s, 32s המקום. 443 00:28:31,010 --> 00:28:33,470 אז מספר צהוב זה קורה להיות 32. 444 00:28:33,470 --> 00:28:40,570 אז אני יכול לקחת את מכתב כמו char כאן, סיבי האופרטור "או" אותו עם פשוטו כמשמעו, את המספר 32, 445 00:28:40,570 --> 00:28:45,250 ומה יוצא לי בחזרה? הגרסה הקטנה של char. 446 00:28:45,250 --> 00:28:48,830 לפני רגע, אם כי, אני בטאתי זאת בסימון בסיס אחר. 447 00:28:48,830 --> 00:28:51,370 מה זה מייצג? >> [תלמיד] הקסדצימאלי. 448 00:28:51,370 --> 00:28:53,050 [מלאן] זה קורה לייצג הקסדצימלי. 449 00:28:53,050 --> 00:28:55,170 אנחנו לא דברנו על הקסדצימלי כל כך הרבה, 450 00:28:55,170 --> 00:28:57,330 אבל זה בעצם נוח במקרים כאלה. 451 00:28:57,330 --> 00:29:01,730 >> למרות שזה נראה יותר מורכב ולמרות שזה נראה כמו 20 ולא 32, 452 00:29:01,730 --> 00:29:06,240 מתברר שהקסדצימלי הוא למעשה סימון סופר נוח 453 00:29:06,240 --> 00:29:10,810 כי בהקסדצימלי כל ספרה לאחר 0x - וזה לא אומר כלום; 454 00:29:10,810 --> 00:29:13,960 זה רק אנושית שאומר אמנה כאן מגיע מספר הקסדצימלי - 455 00:29:13,960 --> 00:29:18,590 כל אחד מאלה ספרות, 2 ואז 0, בעצמם יכולים להיות מיוצגים 456 00:29:18,590 --> 00:29:20,800 עם בדיוק 4 ביטים. 457 00:29:20,800 --> 00:29:27,840 אז אם אנחנו עושים את זה, תן לי לפתוח את עורך טקסט כאן - מוזר השלמה אוטומטית - 458 00:29:27,840 --> 00:29:35,940 אם אנחנו עושים עורך טקסט קטן כאן, 0x20 מספר המשמעות כאן הן 4 ביטים, הנה עוד 4 חתיכות. 459 00:29:35,940 --> 00:29:38,050 בואו נעשה את 4 ביטים הימניים ביותר הראשון. 460 00:29:38,050 --> 00:29:44,690 0 כאשר מיוצג עם 4 חתיכות הן מה? סופר קל. פשוט כל 0s. 461 00:29:44,690 --> 00:29:46,780 אז 4 חתיכות כ0s. 462 00:29:46,780 --> 00:29:53,510 איך אתה מייצג 2? זה היה זמן מאז שעשינו את זה, אבל זה 0100. 463 00:29:53,510 --> 00:29:57,310 אז זה מקום 1s, זה מקום 2s, ואז זה לא משנה מה המקומות אחרים. 464 00:29:57,310 --> 00:30:00,610 במילים אחרות, בהקסדצימלי אפשר לומר 0x20, 465 00:30:00,610 --> 00:30:04,340 אבל אם אתה חושב אז על מה הוא 2 וכיצד הוא מיוצג בינארית, 466 00:30:04,340 --> 00:30:07,130 מה הם 0 וכיצד הוא מיוצג בינארית, 467 00:30:07,130 --> 00:30:10,440 את התשובות לשאלות האלה הן זה וזה, בהתאמה. 468 00:30:10,440 --> 00:30:14,380 אז 0x20 קורים לייצג את הדפוס הזה של 8 סיביים, 469 00:30:14,380 --> 00:30:16,880 וזה בדיוק המסכה שאנחנו רוצים. 470 00:30:16,880 --> 00:30:20,140 אז זה לרגע רק תרגיל אינטלקטואלי, 471 00:30:20,140 --> 00:30:24,520 אבל המציאות היא בקוד זה בדרך כלל נפוץ יותר לכתוב קבועים כמו זה 472 00:30:24,520 --> 00:30:28,360 בקסדצימלי כי אז המתכנת יכול בקלות יחסית, 473 00:30:28,360 --> 00:30:32,560 גם אם זה דורש קצת נייר ועיפרון, להבין מה דפוס שביטים הוא 474 00:30:32,560 --> 00:30:35,960 כי אתה לא יכול פשוט להביע 0s ו 1s בדרך כלל בקוד. 475 00:30:35,960 --> 00:30:38,540 אתה לא יכול ללכת 00010 וכן הלאה. 476 00:30:38,540 --> 00:30:42,380 >> אתה צריך לבחור את הסימונים עשרוניים או הקסדצימאלי או אוקטלי או אחרים. 477 00:30:42,380 --> 00:30:47,540 רוב האנשים נוטים לבחור הקסדצימלי פשוט כך שכל ספרה מייצגת 4 ביטים 478 00:30:47,540 --> 00:30:49,320 ואתה יכול לעשות את מתמטיקה מהירה זה. 479 00:30:49,320 --> 00:30:54,990 ואני אניף את היד שלי בtoupper, שזה כמעט אותו הדבר, זה נראה כמעט זהה. 480 00:30:54,990 --> 00:31:01,900 Toupper קורה לא להשתמש או מפעיל אלא הבחור הזה וdf. 481 00:31:01,900 --> 00:31:09,300 מה df מייצג? df? מישהו? >> [תלמיד] 255. 482 00:31:09,300 --> 00:31:12,780 255? לא 255. זה יהיה FF. 483 00:31:12,780 --> 00:31:15,210 נשאיר את זה כתרגיל קטן. 484 00:31:15,210 --> 00:31:23,460 אבל אם אתה עובר מ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ואז מה בא אחרי 9? 485 00:31:23,460 --> 00:31:26,510 אנחנו סוג של מספרות אחרי נקודה עשרוניות, אבל בהקסדצימלי מה בא אחרי 9? 486 00:31:26,510 --> 00:31:29,510 [תלמיד]. >> אז, ב, ג, ד. 487 00:31:29,510 --> 00:31:33,470 אתה יכול להבין משם מה דפוס של ביטי ד מייצג למעשה. 488 00:31:33,470 --> 00:31:38,850 ואם תעשו את החשבון, נראה שהמסכה אתה בסופו לחזור היא זהה לזו. 489 00:31:38,850 --> 00:31:45,580 זה f, כל 1s, וזה ד. אז df מייצג מסכה ש. בסדר. 490 00:31:45,580 --> 00:31:50,980 ולבסוף, לא לעשות דברי קול סופר, סופר טכני, 491 00:31:50,980 --> 00:31:53,840 אבל אניח שאנחנו רוצים לכתוב תכנית שעושה את זה. 492 00:31:53,840 --> 00:31:58,960 תן לי ללכת קדימה ולעשות בינארי, שהיא תכנית בקובץ בשם binary.c. 493 00:31:58,960 --> 00:32:02,050 ועכשיו תן לי לרוץ בינארי ולתת לי מספר שלם שאינם שלילי. 494 00:32:02,050 --> 00:32:03,960 בואו נתחיל קל והקלד 0. 495 00:32:03,960 --> 00:32:09,010 זה עכשיו הוא תכנית שמדפיסה את מספר שלם בייצוג בינארי שלה. 496 00:32:09,010 --> 00:32:13,470 אז אם אני משחק במשחק הזה שוב ולהקליד רק 1, אני צריך לקבל ייצוג 32-bit של 1. 497 00:32:13,470 --> 00:32:15,490 אם אני עושה את זה שוב עם 2, אני צריך לקבל את זה. 498 00:32:15,490 --> 00:32:19,310 אם אני עושה 7, אני צריך לקבל כמה 1s בסוף וכן הלאה. 499 00:32:19,310 --> 00:32:22,740 מתברר שאני מזכיר זאת משום שעם פעילות סיבית האופרטור 500 00:32:22,740 --> 00:32:25,490 אתה באמת יכול לעשות דבר אחד אחר גם כן. 501 00:32:25,490 --> 00:32:29,130 באפשרותך ליצור המסיכות האלה באופן דינמי. 502 00:32:29,130 --> 00:32:32,800 תסתכל על הדוגמא האחרונה הזה הכרוך בפעולות סיביות האופרטור. 503 00:32:32,800 --> 00:32:35,490 הנה החלק הראשון של הקוד, מנחה את המשתמש למספר, 504 00:32:35,490 --> 00:32:38,130 והוא מתעקש שאתה נותן לי מספר שלם שאינם שלילי. 505 00:32:38,130 --> 00:32:39,780 אז זה סוג של חומר בית הספר ישן. 506 00:32:39,780 --> 00:32:41,980 אבל הנה משהו שגם די מעניין. 507 00:32:41,980 --> 00:32:44,910 >> איך אני הולך על הדפסת מספר בינארי? 508 00:32:44,910 --> 00:32:48,970 אני לחזר ראשון ממה למה? 509 00:32:48,970 --> 00:32:52,270 מה הגודל של int בדרך כלל, לפחות במכשיר? >> [תלמיד] 4. 510 00:32:52,270 --> 00:32:57,130 זה 4. אז 4 * 8 הוא 32 - 1 הוא 31. 511 00:32:57,130 --> 00:33:02,590 אז אם אני מתחיל לספור מיום 31, שמייצג, מתברר, 512 00:33:02,590 --> 00:33:07,630 רק מושגית, קצת 31 או קצת סדר הגבוה ביותר, שהוא הבחור הזה כאן, 513 00:33:07,630 --> 00:33:09,650 בעוד שזה הולך להיות 0 סיביים. 514 00:33:09,650 --> 00:33:12,850 אז זה קצת 01 קצת ... 31. 515 00:33:12,850 --> 00:33:14,950 אז מה הקוד הזה עושה? 516 00:33:14,950 --> 00:33:20,140 שים לב זה ללולאה, למרות שזה נראה מסתורי, רק iterating מ 31 עד 0. זה הכל. 517 00:33:20,140 --> 00:33:24,530 אז עכשיו חלק המעניין חייב להיות ב5 שורות אלה כאן. 518 00:33:24,530 --> 00:33:28,110 שימו לב שבשורה הריני מצהיר מסכה משתנית בשם 519 00:33:28,110 --> 00:33:30,790 כדי להיות עקבי עם הסיפור של המספרים הצהובים האלה שלנו. 520 00:33:30,790 --> 00:33:32,200 ואז מה זה עושה? 521 00:33:32,200 --> 00:33:35,720 זהו עוד מפעיל סיבי האופרטור שלא ראה לפני כן, סביר להניח. 522 00:33:35,720 --> 00:33:38,300 זה מפעיל משמרת שמאל. 523 00:33:38,300 --> 00:33:40,060 מפעיל זה עושה את זה. 524 00:33:40,060 --> 00:33:44,920 כאן הוא המספר 1, ואם אתה עושה אותי השאיר במשמרות, משמרת שמאל, 525 00:33:44,920 --> 00:33:49,260 מה אתה חושב שיש לו את ההשפעה שעושה ל1 פרט? 526 00:33:49,260 --> 00:33:51,290 פשוטו כמשמעו, עובר מעליו. 527 00:33:51,290 --> 00:33:57,540 אז אם המספר 1 הוא מה יש לך בצד השמאל ואתה מתחיל על ידי אתחול אני עד 31, 528 00:33:57,540 --> 00:34:03,490 מה שהולך לעשות? זה הולך לקחת מספר 1 זה ולהעביר אותו 31 מקומות לכאן. 529 00:34:03,490 --> 00:34:06,210 וכי ודאי שאין ספרות אחרת שעומדים מאחוריו, 530 00:34:06,210 --> 00:34:10,350 אלה יהיו ברירת המחדל להיות מוחלפים עם 0s. 531 00:34:10,350 --> 00:34:15,120 אז אתה תתחיל עם המספר 1, שכמובן נראה כך - 532 00:34:15,120 --> 00:34:18,659 ונתן לי לצייר את זה כאן במרכז. 533 00:34:18,659 --> 00:34:22,139 ואז כפי שאתה תעביר את החפצים מהשמאל, הבחור הזה למעשה הולך בדרך זו. 534 00:34:22,139 --> 00:34:24,659 אבל ברגע שאתה עושה את זה, 0 מתמלא פנימה 535 00:34:24,659 --> 00:34:28,360 אם להעביר אותו בפעם שנייה, זה הולך בדרך זו ואחרת 0 מתמלאת פנימה 536 00:34:28,360 --> 00:34:31,000 >> אתה לעבור את זה שוב ואז 0 אחר מתמלא פנימה 537 00:34:31,000 --> 00:34:37,900 אז אם אתה עושה את הדבר הזה של 1 << i 31 מקומות, אתה בסופו של דבר מקבל מסיכה 538 00:34:37,900 --> 00:34:42,550 שהם 32 תווים ארוכים, 1 השמאלי ביותר שבם הוא 1, 539 00:34:42,550 --> 00:34:45,199 כל שאר שהם 0. 540 00:34:45,199 --> 00:34:50,880 ומתברר, כהערת אגב, הסטת מספר לשמאל כזה 541 00:34:50,880 --> 00:34:53,530 גם במקרה, ולעתים בנוחות, 542 00:34:53,530 --> 00:34:57,520 יש השפעה של מה שעושה למספר זה? >> [תלמיד] הכפלתו. 543 00:34:57,520 --> 00:35:00,980 הכפלה זה כי כל אחת מהעמודות - מקום 1s, 2s המקום, מקום 4s, 544 00:35:00,980 --> 00:35:05,030 מקום 8s, מקום 16s - פזור בכל ההכפלה כמו שאתה הולך לצד השמאל. 545 00:35:05,030 --> 00:35:09,500 או לייתר דיוק, כשזז 1s אתה הולך בסופו של הכפלת ערכו של המספר. 546 00:35:09,500 --> 00:35:12,070 אתה יכול בסופו של דבר עושה תמורות מעניינות של ספרות 547 00:35:12,070 --> 00:35:15,640 על ידי העברה כל מה שמעל בדרך זו על ידי חזק של 2. 548 00:35:15,640 --> 00:35:17,150 אז איך זה עובד? 549 00:35:17,150 --> 00:35:22,580 אז זה נותן לי מסכה זה כל 0s למעט 1 בדיוק במקום שאני רוצה את זה, 550 00:35:22,580 --> 00:35:27,920 ולאחר מכן בביטוי זה, אשר נגנב מtoupper.c, 551 00:35:27,920 --> 00:35:31,770 אומר פשוט לקחת את מספר n שמשתמש הקליד ב, 552 00:35:31,770 --> 00:35:34,730 "ו" זה עם זה מסכה, ומה אתה הולך לקבל? 553 00:35:34,730 --> 00:35:39,200 אתה הולך לקבל 1 אם יש 1 שבמיקום מסכות, 554 00:35:39,200 --> 00:35:41,570 או שאתה הולך לקבל 0 אם אין. 555 00:35:41,570 --> 00:35:44,370 ולכן כל התכנית הזאת זה בצורה יעילה היא שיש לו לולאה, 556 00:35:44,370 --> 00:35:48,340 וזה יוצר מסיכה עם 1 כאן, אז 1 לכאן, אז 1 לכאן, 557 00:35:48,340 --> 00:35:52,950 והוא משתמש בטריק הזה סיבי האופרטור ולומר הוא שיש 1 ביט בקלט של המשתמש כאן? 558 00:35:52,950 --> 00:35:59,220 >> האם יש 1 ביט בקלט של המשתמש כאן? ואם כן, פשוטו כמשמעו, להדפיס 1, אחר להדפיס 0. 559 00:35:59,220 --> 00:36:03,780 אנחנו עושים את זה עם ints רק בגלל שזה למה שאנחנו עושים 32 סיביים במקום 8, 560 00:36:03,780 --> 00:36:06,900 אבל מה שהצגנו אז זה סיבי האופרטור AND, OR סיבי האופרטור הזה, 561 00:36:06,900 --> 00:36:10,450 ומפעיל זה שמאל משמרת, שהם לא לעתים קרובות מאוד מועילים, 562 00:36:10,450 --> 00:36:12,230 אבל מסתבר שהם יכולים להיות. 563 00:36:12,230 --> 00:36:16,560 למעשה, אם היית מייצג משהו כמו מערך של Booleans 564 00:36:16,560 --> 00:36:21,260 רק כדי לייצג אמת או שקר, תניח שאתה רוצה לעקוב אחר האם או לא 565 00:36:21,260 --> 00:36:24,630 חדר מלא של 300 סטודנטים הוא הווה, 566 00:36:24,630 --> 00:36:29,420 אתה יכול להצהיר על מערך בגודל 300 מהסוג bool כך שאתה מקבל 300 bools, 567 00:36:29,420 --> 00:36:33,090 ואתה יכול להגדיר כל לנכון אם מישהו כאן ושקר אחר. 568 00:36:33,090 --> 00:36:37,550 למה הוא ייצוג שבמבנה הנתונים יעילים? 569 00:36:39,370 --> 00:36:44,800 מה רע בעיצוב של מבנה נתונים, מערך של 300 bools? 570 00:36:46,190 --> 00:36:49,600 מה הוא bool, למעשה, מתחת למכסת המנוע? 571 00:36:49,600 --> 00:36:52,310 גם זה משהו שלא יכול להיות מוכר. 572 00:36:52,310 --> 00:36:53,720 מתברר שאין bool. 573 00:36:53,720 --> 00:36:56,620 זכור שאנחנו איכשהו נוצרנו שעם קובץ cs50.h, 574 00:36:56,620 --> 00:36:58,630 אשר עצמו כולל bool הסטנדרטי. 575 00:36:58,630 --> 00:37:00,930 C היא סוג של טמטום, אם כי, כשזה מגיע לbool. 576 00:37:00,930 --> 00:37:04,880 היא משתמשת 8 סיבית לייצג כל bool, שהוא לחלוטין בזבזני 577 00:37:04,880 --> 00:37:09,040 כי ברור, כמה חתיכות אתה צריך לייצג bool? רק 1. 578 00:37:09,040 --> 00:37:13,190 אז מתברר שאם עכשיו יש לך את היכולת במפעילים סיביים האופרטור 579 00:37:13,190 --> 00:37:17,760 כדי לתפעל פיסות בודדות אפילו בchar, אפילו בבית אחד, 580 00:37:17,760 --> 00:37:21,380 מתברר שאפשר להקטין את הזיכרון הנדרש כדי לייצג משהו טיפשי 581 00:37:21,380 --> 00:37:25,490 כמו שמבנה נתוני הנוכחות המנוסח בפקטור של 8. 582 00:37:25,490 --> 00:37:29,820 במקום להשתמש בשמונת ביטים לייצג אמת או שקר, אתה יכול, פשוטו כמשמעו, להשתמש באחד 583 00:37:29,820 --> 00:37:34,500 באמצעות בית אחד לכל שמונה תלמידים בכיתה 584 00:37:34,500 --> 00:37:41,990 וtoggling 0-1 פיסות בודדות על ידי שימוש בסוגים אלה של תרגילים ברמה הנמוכה. 585 00:37:43,850 --> 00:37:49,460 זה באמת לשים קץ לאנרגיה. האם יש שאלות כלשהן לגבי פעילות סיבית האופרטור? 586 00:37:49,460 --> 00:37:52,710 >> כן. >> [תלמיד] האם יש מפעיל בלעדי או? 587 00:37:52,710 --> 00:37:56,440 כן. יש מפעיל בלעדי או שנראה כמו זה, ^, סמל הגזר, 588 00:37:56,440 --> 00:38:02,070 מה שאומר רק הדבר הראשון או הדבר השני יכול להיות 1 עבור הפלט להיות 1. 589 00:38:02,070 --> 00:38:07,750 יש גם לא, ~, שיאפשר לך להפוך 0 עד לכן 1 או להיפך. 590 00:38:07,750 --> 00:38:11,600 ויש גם מפעיל זכות משמרת, >>, שהוא היפוכו של זה שראינו. 591 00:38:11,600 --> 00:38:13,850 בסדר. בואו ניקח את הדברים עכשיו לרמה גבוהה יותר. 592 00:38:13,850 --> 00:38:16,770 התחלנו בלדבר על טקסט ולאחר מכן לדחוס אותו 593 00:38:16,770 --> 00:38:19,650 ומייצג את הטקסט עם מספרים פחות ביטים; 594 00:38:19,650 --> 00:38:22,890 דברנו קצת על איך אנחנו יכולים להתחיל עכשיו מניפולצית דברים ברמה סיבית האופרטור. 595 00:38:22,890 --> 00:38:26,640 עכשיו בואו להתקרב בחזרה 10,000 רגל לייצוג 596 00:38:26,640 --> 00:38:29,250 דברים יותר מורכבים, כמו גרפיקה. 597 00:38:29,250 --> 00:38:32,950 כאן יש לנו דגל של גרמניה, הנה יש לנו אחת מצרפת. 598 00:38:32,950 --> 00:38:36,350 אלה יכולים להיות מיוצגים בפורמטים של קבצים, היית יודעים - GIF, למשל. 599 00:38:36,350 --> 00:38:40,030 אם אי פעם ראה תמונה באינטרנט שמסתיים ב. Gif, 600 00:38:40,030 --> 00:38:43,000 זו תבנית מחלף גרפיקה. 601 00:38:43,000 --> 00:38:47,530 שני הדגלים האלה כאן סוג של להשאיל את עצמם לדחיסה 602 00:38:47,530 --> 00:38:52,050 למה אולי סיבה ברורה? >> [תגובת תלמיד לא נשמעה] 603 00:38:52,050 --> 00:38:53,440 יש הרבה חזרות, נכון? 604 00:38:53,440 --> 00:38:57,270 על מנת לשלוח הדגל של גרמניה, לחשוב על זה כתמונה על המסך 605 00:38:57,270 --> 00:38:59,030 חזרה בימי Scratch. 606 00:38:59,030 --> 00:39:02,380 אתם אולי זוכרים שיש פיקסלים בודדים או נקודות שמרכיבות את תמונה. 607 00:39:02,380 --> 00:39:06,650 >> יש כל שורה של נקודות שחורות ועוד שורה השלמה של נקודות שחורות. 608 00:39:06,650 --> 00:39:10,110 יש חבורה של שורות של נקודות שחורות שלא יכל לראות אם אנחנו באמת ראייה, 609 00:39:10,110 --> 00:39:13,370 הרבה אוהבים כשהתמקדנו בפניו של רוב בפוטושופ. 610 00:39:13,370 --> 00:39:15,500 ברגע שיש לנו יותר ויותר עמוקים ועמוק יותר לתוך התמונה, 611 00:39:15,500 --> 00:39:19,990 אתה התחלת לראות pixelation, כל הריבועים שמרכיבים את עיינותיו במקרה זה. 612 00:39:19,990 --> 00:39:24,130 עסקה גם כאן. אם שטסנו לא מעט, היית רואה נקודות בודדות. 613 00:39:24,130 --> 00:39:27,110 ובכן, זה סוג של בזבוז של ביטים. 614 00:39:27,110 --> 00:39:32,120 אם שלישי של הדגל הוא שחור ושלישי של הדגל הוא צהוב וכן הלאה, 615 00:39:32,120 --> 00:39:34,860 למה אנחנו לא יכולים איכשהו לדחוס את הדגל הזה? 616 00:39:34,860 --> 00:39:39,560 ואפילו הדגל הצרפתי יכול להיות דחוס למרות שהדפוס הוא קצת שונה. 617 00:39:39,560 --> 00:39:44,120 מתברר תבנית קובץ GIF היא פורמט דחיסה ללא אובדן, 618 00:39:44,120 --> 00:39:48,420 מה שאומר שאתה יכול לקחת את תמונה כמו הדגל הגרמני כאן, 619 00:39:48,420 --> 00:39:53,540 אתה יכול לזרוק הרבה הביטים שלה, מבלי להתפשר על איכות. 620 00:39:53,540 --> 00:39:55,340 זאת בניגוד למשהו כמו תמונות JPEG, 621 00:39:55,340 --> 00:39:57,050 עם שרובנו כנראה יותר מוכרים. 622 00:39:57,050 --> 00:39:59,000 פייסבוק תמונות ופליקר תמונות וכמו 623 00:39:59,000 --> 00:40:02,200 כמעט תמיד נשמרים כתמונות JPEG כאשר הם נטענים, 624 00:40:02,200 --> 00:40:08,100 אבל תמונות JPEG היא lossy - פורמט שבו אתה זורק ביטים - lossy 625 00:40:08,100 --> 00:40:10,430 אבל אתה גם לזרוק איכות. 626 00:40:10,430 --> 00:40:13,890 ולכן אם אתה לדחוס תמונות עם Photoshop או להעלות אותם לפייסבוק 627 00:40:13,890 --> 00:40:15,580 או לקחת אותם בטלפון ממש מחורבן, 628 00:40:15,580 --> 00:40:19,510 אתה יודע שהתמונה מתחילה להיות מאוד מוכתם ומגורען, 629 00:40:19,510 --> 00:40:22,290 וזה בגלל שזה להיות דחוס על ידי המחשב או הטלפון 630 00:40:22,290 --> 00:40:24,550 פשוטו כמשמעו, על ידי זריקת מידע משם. 631 00:40:24,550 --> 00:40:28,500 אבל GIF הוא מדהים בכך שהוא יכול להשתמש בפחות סיבי מזה אולי כברירת מחדל 632 00:40:28,500 --> 00:40:30,750 מבלי לאבד את כל מידע. 633 00:40:30,750 --> 00:40:32,410 >> וזה בעצם עושה זאת באופן בא. 634 00:40:32,410 --> 00:40:38,740 במקום חנות בקבצים כמו BMP היית RGB משולש לשחור, שחור, שחור, שחור, 635 00:40:38,740 --> 00:40:42,570 שחור, שחור, שחור, שחור, שחור, שחור, שחור, שחור וכן הלאה, 636 00:40:42,570 --> 00:40:45,640 ולא, בפורמט GIF הולך להגיד, "שחור" 637 00:40:45,640 --> 00:40:48,330 ולאחר מכן, "חזור 100 פעמים", או משהו כזה. 638 00:40:48,330 --> 00:40:52,280 "שחור, חוזר 100 פעמים, שחורות, חזור 100 פעמים ..." 639 00:40:52,280 --> 00:40:54,530 "צהוב, לחזור 100 פעם." 640 00:40:54,530 --> 00:40:57,200 וכך זוכר, בעצם, הפיקסל השמאלי ביותר 641 00:40:57,200 --> 00:41:02,160 ולאחר מכן מקודד איכשהו הרעיון של חזרה פיקסל זה שוב ושוב. 642 00:41:02,160 --> 00:41:06,110 אז GIFs אז יכול לדחוס את עצמם בלי לאבד את כל מידע. 643 00:41:06,110 --> 00:41:09,510 אבל אם הייתי צריך לנחש, אם זה האלגוריתם שGIFs שימוש, 644 00:41:09,510 --> 00:41:13,180 איזה מהדגלים האלה, למרות שהם נראים זהים בגודל, 645 00:41:13,180 --> 00:41:19,620 הולך להיות קטן יותר כאשר נשמר בדיסק כקובץ GIF? >> [תלמיד] גרמניה. 646 00:41:19,620 --> 00:41:21,660 גרמניה הולכת להיות קטן יותר? למה? 647 00:41:21,660 --> 00:41:26,620 [סטודנטים] מכיוון שאתה חוזר עליו פעמים רבות, רבות אופקי 648 00:41:26,620 --> 00:41:29,010 ואז אתה חוזר בפעם אחרת. >> בדיוק. 649 00:41:29,010 --> 00:41:32,020 כי אנשים פשוט סוג של שהמציאו GIF החליטו באופן שרירותי 650 00:41:32,020 --> 00:41:36,040 שההחזרה תהיה למנף בצורה אופקית ולא רוחבי. 651 00:41:36,040 --> 00:41:40,900 יש הרבה יותר חזרות רוחביות כאן בדגל הגרמני מאשר בדגל הצרפתי. 652 00:41:40,900 --> 00:41:44,430 אז אם אנחנו בעצם פותחים את תיקייה בכונן הקשיח שלי, כי יש GIFs אלה, 653 00:41:44,430 --> 00:41:51,920 אתה ממש יכול לראות שהדגל הגרמני כאן הוא 2 ק"ג ואחד צרפתי הוא 4 ק"ג. 654 00:41:51,920 --> 00:41:54,080 זה קורה להיות צירוף מקרים, כי אחד הוא פעמים אחרות, 655 00:41:54,080 --> 00:41:57,960 אבל זה למעשה מקרה שהדגל הצרפתי הוא הרבה יותר גדול. 656 00:41:57,960 --> 00:42:01,250 >> למרות שאנחנו מדברים כאן על גרפיקה, אותם הרעיונות יכולים לחול על 657 00:42:01,250 --> 00:42:05,150 לא דברים כמו דגלים אלא תמונות שהם קצת יותר מורכבים. 658 00:42:05,150 --> 00:42:08,170 אם אתה לוקח את תמונה של תפוח, בטוח שיש הרבה כפילות שם, 659 00:42:08,170 --> 00:42:11,040 ולכן אנחנו יכולים איכשהו זוכרים שהרקע של ברירת המחדל הוא כחול 660 00:42:11,040 --> 00:42:13,230 ולא, כמו בתמונה הימנית מרמזת, 661 00:42:13,230 --> 00:42:16,830 צריך לזכור את צבעו של כל פיקסל בודד בתמונה זו. 662 00:42:16,830 --> 00:42:21,060 אז אנחנו יכולים לזרוק חתיכות משם מבלי לאבד מידע. 663 00:42:21,060 --> 00:42:23,340 התפוח עדיין נראה בדיוק אותו הדבר. 664 00:42:23,340 --> 00:42:27,510 בדוגמה זו כאן, ייתכן שתראה את מה שקורה בסרט. 665 00:42:27,510 --> 00:42:31,970 אלה מייצגים את סלילי סרטים ישנים תיכונים לפיה בתמונה העליונה יש 666 00:42:31,970 --> 00:42:36,900 יש לך נהיגת קרווני עבר בית ועץ. 667 00:42:36,900 --> 00:42:42,130 וכמו שאן מניעה העבר משמאל לימין, מה שכמובן לא משתנה? 668 00:42:42,130 --> 00:42:45,320 הבית הוא לא הולך לשום מקום, והעץ לא הולך לשום מקום. 669 00:42:45,320 --> 00:42:47,700 הדבר היחיד שזז הוא ואן במקרה זה. 670 00:42:47,700 --> 00:42:51,650 אז כרקע ללא שינוי מרמז, מה אתה יכול לעשות בסרטים 671 00:42:51,650 --> 00:42:56,530 הוא דומה פשוט משליך את המידע שאינו משתנה בין מסגרות. 672 00:42:56,530 --> 00:42:58,900 זה ידוע בדרך כלל דחיסת interframe 673 00:42:58,900 --> 00:43:02,120 שלפיו אם המסגרת הזאת נראית כמעט זהה לזה, 674 00:43:02,120 --> 00:43:05,390 בואו לא נטרח אחסון בדיסק כלשהו של המידע הזהה 675 00:43:05,390 --> 00:43:09,250 במסגרות אלה ביניים, בואו ננצל את מסגרות מפתח רק פעם בכמה זמן 676 00:43:09,250 --> 00:43:13,420 כי בעצם לאחסן מידע שredundantly בדיוק כמו שפיות קטנה לבדוק. 677 00:43:13,420 --> 00:43:18,620 >> לעומת זאת, גישה אחרת לדחיסת וידאו היא בדוגמה שנייה ונמוכה זה כאן, 678 00:43:18,620 --> 00:43:23,970 שם במקום חנות 30 מסגרות, למה שלא פשוט לאחסן 15 פריימים בשניים במקום זה? 679 00:43:23,970 --> 00:43:27,070 במקום סוג של הסרט זורם להפליא, בצורה מושלמת, 680 00:43:27,070 --> 00:43:30,060 זה עלול להיראות כאילו הוא מגמגם קצת, בית ספר קטן וזקן, 681 00:43:30,060 --> 00:43:37,190 אך ההשפעה נטו תהיה להשתמש ביטים הרבה פחות מאחר עלול להיות נחוץ. 682 00:43:37,190 --> 00:43:39,240 אז איפה זה משאיר אותנו אז? 683 00:43:39,240 --> 00:43:41,700 זה היה קצת בצד על איפה עוד אתה יכול ללכת עם דחיסה. 684 00:43:41,700 --> 00:43:45,140 למידע נוסף על זה, לקחת שיעור כמו CS175 כאן. 685 00:43:45,140 --> 00:43:46,990 הנה דוגמה נוספת בתוך וידאו. 686 00:43:46,990 --> 00:43:49,190 אם הדבורה היא דבר היחיד שנע, 687 00:43:49,190 --> 00:43:51,790 אתה באמת יכול לזרוק מידע במסגרות ביניים אלה 688 00:43:51,790 --> 00:43:55,260 בגלל הפרח והשמים ועלים אינם משתנים. 689 00:43:55,260 --> 00:43:57,960 אבל בואו עכשיו לשקול דבר אחד אחרון. 690 00:43:57,960 --> 00:44:03,890 ב 5 הדקות הבאות אנחנו משאירים מאחורי C לנצח בהרצאה? כן. לא בpsets, אם כי. 691 00:44:03,890 --> 00:44:10,210 הסיפור אחרון על C ואז אנחנו מגיעים לדברים מאוד סקסיים 692 00:44:10,210 --> 00:44:13,870 מעורב HTML ואינטרנט ולחזר הא. בסדר. 693 00:44:13,870 --> 00:44:16,050 הנה אנחנו מתחילים. זה המוטיבציה. 694 00:44:16,050 --> 00:44:20,020 מתברר כל הזמן הזה כאשר אנחנו כבר בכתיבת תוכניות שרצים קלאנג. 695 00:44:20,020 --> 00:44:23,890 וקלאנג, שאמרנו מאז השבוע הראשון פחות או יותר, לוקח את קוד מקור 696 00:44:23,890 --> 00:44:25,740 וממיר אותו לקוד יעד. 697 00:44:25,740 --> 00:44:28,540 זה לוקח C וממיר אותו ל0s ו 1s. 698 00:44:28,540 --> 00:44:32,150 אני כבר שוכב לך סוג של כמה שבועות, כי זה לא ממש פשוט כמו זה. 699 00:44:32,150 --> 00:44:36,750 >> יש בזה הרבה יותר קורה מתחת למכסת המנוע בעת הפעלת תכנית כמו קלאנג. 700 00:44:36,750 --> 00:44:39,560 למעשה, התהליך של הידור תכנית יכול באמת לסכם, 701 00:44:39,560 --> 00:44:42,210 כפי שזכור לכם מהסרטון של רוב על מהדרים, 702 00:44:42,210 --> 00:44:47,580 ל 4 השלבים הבאים: טרום עיבוד, עריכה עצם, הרכבה, וקישור. 703 00:44:47,580 --> 00:44:51,950 אבל אנחנו בכיתה ורוב האנשים בעולם בדרך כלל לסכם את כל השלבים הבאים 704 00:44:51,950 --> 00:44:54,410 כפשוט "הידור". 705 00:44:54,410 --> 00:44:58,070 אבל אם אנחנו מתחילים עם קוד מקור כזה, זוכר את זה הוא אולי תכנית C הפשוטה 706 00:44:58,070 --> 00:45:03,530 אנחנו כבר כתבנו עד כה, זוכרים שכשחברנו אותו בסופו של מצב כזה. 707 00:45:03,530 --> 00:45:07,310 אבל יש בעצם שלב ביניים, והצעדים האלה הם כדלקמן. 708 00:45:07,310 --> 00:45:10,750 ראשית יש את הדבר הזה בחלקו העליון של זה ורוב התוכניות שלנו, 709 00:45:10,750 --> 00:45:13,550 # כולל 710 00:45:13,550 --> 00:45:17,210 מה # אינה כולל תעשה לנו? 711 00:45:17,210 --> 00:45:24,150 זה די הרבה עותקים ומשחות את תוכן stdio.h לתוך הקובץ שלי כך שלמה? 712 00:45:24,150 --> 00:45:27,220 למה אכפת לי את התוכן של stdio.h? מה יש בעניין? 713 00:45:27,220 --> 00:45:32,310 הכרזתו של printf, אב הטיפוס שלה, כך שהמהדר מכן יודע למה אני מתכוון 714 00:45:32,310 --> 00:45:34,900 כשאני מזכיר בפונקציה זו printf. 715 00:45:34,900 --> 00:45:39,390 אז שלב 1 בקומפילציה היא מראש עיבוד, לפיה תכנית כמו קלאנג 716 00:45:39,390 --> 00:45:43,450 או איזו תכנית שעוזרים קלאנג מגיע עם למעלה קוראה את הקוד שלך למטה, 717 00:45:43,450 --> 00:45:47,740 משמאל לימין, וכל פעם שהוא רואה סימן # אחרי מילת מפתח כמו כולל, 718 00:45:47,740 --> 00:45:53,980 היא מבצעת פעולה ש, העתקה והדבקה במקרה stdio.h זה לתוך הקובץ שלך. 719 00:45:53,980 --> 00:45:55,510 זה שלב 1. 720 00:45:55,510 --> 00:45:59,620 אז יש לך קובץ C הרבה יותר גדול בגלל העותק הענק, העבודה להדביק זה פשוט קרה. 721 00:45:59,620 --> 00:46:01,710 >> 2 צעד כעת הידור. 722 00:46:01,710 --> 00:46:04,880 אבל מתברר הקומפילציה לוקחת קוד מקור שנראה כך 723 00:46:04,880 --> 00:46:08,160 והופך אותו למשהו שנראה כמו זה, 724 00:46:08,160 --> 00:46:12,560 אשר למי שמכיר נקרא? >> [תלמיד] עצרת. שפת אסיפה. >> 725 00:46:12,560 --> 00:46:16,700 זה באמת משהו אם אתה לוקח CS61 תוכל לצלול לתוך בפירוט רב יותר. 726 00:46:16,700 --> 00:46:22,380 זה פשוט רחוק בערך כמו שאתה יכול לקבל את עצמך לכתיבת 0s ו 1s 727 00:46:22,380 --> 00:46:25,850 אבל לכתוב דברים באופן כזה שעדיין עושה לפחות קצת היגיון. 728 00:46:25,850 --> 00:46:30,760 אלו הן הוראות מכונית, ואם אנחנו למטה כדי לגלול את הפונקציה העיקרית כאן, 729 00:46:30,760 --> 00:46:35,470 שם לב שיש הוראת דחיפה זו, העבר את ההוראה, לחסר הוראה, 730 00:46:35,470 --> 00:46:38,550 קורא הוראה, וכן הלאה. 731 00:46:38,550 --> 00:46:42,930 כשאתה שומע שהמחשב שלך יש אינטל בפנים, 732 00:46:42,930 --> 00:46:46,180 יש לך מעבד אינטל ב-Mac או במחשב האישי שלך, מה זה אומר? 733 00:46:46,180 --> 00:46:51,200 מעבד מגיע מובנה על ידי חברות כמו אינטל הבנת הוראות מסוימות. 734 00:46:51,200 --> 00:46:55,770 אין להם מושג מה פונקציות כמו החלפה הן או עיקרי הוא כשלעצמה, 735 00:46:55,770 --> 00:47:00,060 אבל הם יודעים מה הוראות מאוד ברמה נמוכה כמו חיבור, חיסור, לדחוף, 736 00:47:00,060 --> 00:47:02,430 לזוז, להתקשר, וכן הלאה. 737 00:47:02,430 --> 00:47:06,170 לכן, כאשר אתה לקמפל קוד C לשפת הרכבה, 738 00:47:06,170 --> 00:47:11,820 קוד המשתמש שלך מאוד ידידותי למראה הופך למשהו שנראה כמו זה, 739 00:47:11,820 --> 00:47:21,670 כי ממש מזיז בתים או 4 בתים מסביב ביחידות קטנות כאלה בתוך ומחוץ למעבד. 740 00:47:21,670 --> 00:47:26,820 אבל לבסוף, כאשר קלאנג מוכן לקחת ייצוג זה של התכנית שלך 741 00:47:26,820 --> 00:47:30,940 ל0s ו 1s, אז הצעד נקרא הרכבה קורה, 742 00:47:30,940 --> 00:47:33,850 ושוב זה קורה בכל הרף עין בעת ​​הפעלת קלאנג. 743 00:47:33,850 --> 00:47:39,300 אנחנו מתחילים כאן, זה פלטי קבצים כמו זה, ואז זה הופך אותו ל0s ו 1s אלה. 744 00:47:39,300 --> 00:47:42,000 אם אתה רוצה לחזור בשלב כלשהו וממש לראות את זה בפעולה ו, 745 00:47:42,000 --> 00:47:48,220 אם אני הולך לhello1.c-ספר הזה הוא אחד מהתוכניות מאוד הראשונות שבדקנו - 746 00:47:48,220 --> 00:47:53,710 בדרך כלל היינו זה לקמפל עם hello1.c קלאנג וזה ייתן לנו a.out. 747 00:47:53,710 --> 00:47:59,890 אם לעומת זאת אתם במקום לתת לו את הדגל-S, מה שתקבל הוא hello1.s 748 00:47:59,890 --> 00:48:02,750 ואתה בעצם רואה את השפה אסמבלי. 749 00:48:02,750 --> 00:48:05,750 >> אני עושה את זה לתכנית קצרה מאוד, אבל אם אתה לחזור למירוץ 750 00:48:05,750 --> 00:48:08,740 או לשחזר או כל תכנית שכתבת ורק מתוך סקרנות 751 00:48:08,740 --> 00:48:13,240 רוצה לראות מה זה באמת נראה כמו, מה בעצם שהוכנס למעבד, 752 00:48:13,240 --> 00:48:15,700 אתה יכול להשתמש בדגל ש- S עם קלאנג. 753 00:48:15,700 --> 00:48:17,770 אבל אז לבסוף, יש עדיין תפס אותך אחד. 754 00:48:17,770 --> 00:48:21,810 הנה 0s ו 1s שמייצג יישום שלום, העולם שלי. 755 00:48:21,810 --> 00:48:25,530 אבל אני השתמשתי בפונקציה של מישהו אחר בתכנית שלי. 756 00:48:25,530 --> 00:48:28,710 אז למרות שהתהליך היה אני לוקח hello.c, 757 00:48:28,710 --> 00:48:34,280 היא מקבלת מלוקטת לתוך קוד הרכבה, ולאחר מכן הוא מקבל התאסף לתוך 0s ו 1s, 758 00:48:34,280 --> 00:48:37,460 רק 0s ו 1s שoutputted בנקודה זו בזמן 759 00:48:37,460 --> 00:48:40,270 הם אלה הנובעים מהקוד שלי. 760 00:48:40,270 --> 00:48:44,400 אבל מי שכתב printf, הם חברו את הקוד שלהם לפני 20 שנים 761 00:48:44,400 --> 00:48:47,000 ועכשיו זה מותקן במקום כלשהו על המכשיר, 762 00:48:47,000 --> 00:48:51,610 לכן אנחנו קצת צריכים להתמזג 0s ו 1s או שלה עם שלי 0s ו 1s, 763 00:48:51,610 --> 00:48:56,160 וזה מביא אותנו לצעד 4 והאחרון של הידור, הידוע כקישור. 764 00:48:56,160 --> 00:48:58,680 אז בצד השמאל יש לנו את אותו תמונה המדויקת כמו קודם: 765 00:48:58,680 --> 00:49:02,580 hello.c הופך קוד הרכבה הופך 0s ו 1s. 766 00:49:02,580 --> 00:49:05,960 אבל זוכר שהייתי ספריית הקלט / פלט הסטנדרטית בקוד שלי, 767 00:49:05,960 --> 00:49:10,350 וזה אומר שאי שם במחשב יש קובץ שנקרא stdio.c 768 00:49:10,350 --> 00:49:13,980 או לפחות גרסת הידורם, כי מישהו לפני כמה שנים 769 00:49:13,980 --> 00:49:18,530 הידור stdio.c לתוך קוד הרכבה ואז כל חבורה של 0s ו 1s. 770 00:49:18,530 --> 00:49:21,130 זה מה שנקרא סטטית או דינמי ספרייה. 771 00:49:21,130 --> 00:49:23,350 זה חלק הקובץ יושב איפשהו במכשיר. 772 00:49:23,350 --> 00:49:28,710 >> אבל לבסוף, אני חייב לקחת 0s ו 1s שלי ושל אותו האדם 0s ו 1s 773 00:49:28,710 --> 00:49:32,760 ואיכשהו לקשר אותם יחד, ממש לשלב את כל אלה 0s ו 1s 774 00:49:32,760 --> 00:49:37,900 לתוך קובץ אחד בשם a.out או hello1 או מה שקראתי לי התכנית 775 00:49:37,900 --> 00:49:43,320 כך שהתוצאה הסופית יש את כל 1s ו 0s שצריך מרכיב את התכנית שלי. 776 00:49:43,320 --> 00:49:45,660 אז כל הזמן הזה זה הסמסטר שבו אתה כבר משתמש קלאנג 777 00:49:45,660 --> 00:49:48,750 ועוד יותר לאחרונה פועל לעשות כדי להפעיל קלאנג, 778 00:49:48,750 --> 00:49:53,580 כל הצעדים האלה כבר קורים באופן מיידי, אלא סוג של זהירות רבה. 779 00:49:53,580 --> 00:49:57,830 ואז אם אתה ממשיך במדעי מחשב, כלומר CS61, 780 00:49:57,830 --> 00:50:00,850 זו השכבה שתוכל להמשיך לקלף את שם 781 00:50:00,850 --> 00:50:06,980 מדבר על יעילות, השלכות בטחוניות, וכמו בפרטים ברמה הנמוכים אלה. 782 00:50:06,980 --> 00:50:09,220 אבל עם זה, אנחנו עומדים לצאת C מאחור. 783 00:50:09,220 --> 00:50:11,420 בואו נלך קדימה, לקחת ההפסקה שלנו 5-הרגע, 784 00:50:11,420 --> 00:50:14,190 וכשאנחנו חוזרים: האינטרנט. 785 00:50:17,280 --> 00:50:19,170 בסדר. אנחנו נחזור. 786 00:50:19,170 --> 00:50:23,590 עכשיו אנחנו מתחילים את המראה שלנו לא רק בHTML כי, כפי שתראה, 787 00:50:23,590 --> 00:50:26,050 HTML עצמו הוא בעצם די פשוט 788 00:50:26,050 --> 00:50:29,270 אבל באמת בתכנות האינטרנט באופן כללי יותר, רישות באופן כללי יותר, 789 00:50:29,270 --> 00:50:31,770 ואיך כל הטכנולוגיות הללו באים ביחד 790 00:50:31,770 --> 00:50:35,400 כדי לאפשר לנו ליצור תוכניות הרבה יותר מתוחכמות על גבי האינטרנט 791 00:50:35,400 --> 00:50:38,690 מ עד כה שהצלחנו לחלונות שחורים ולבנים האלה. 792 00:50:38,690 --> 00:50:42,140 אכן, בנקודה זו בסמסטר למרות שאנחנו נבלה יחסית פחות זמן 793 00:50:42,140 --> 00:50:46,200 ב-PHP, HTML, CSS, JavaScript, SQL ועוד, 794 00:50:46,200 --> 00:50:48,480 רוב התלמידים עושים בסופו של דבר עושים פרויקט גמר שמבוסס אינטרנט 795 00:50:48,480 --> 00:50:51,230 משום שכפי שתראה, עכשיו יש לך הרקע ב-C 796 00:50:51,230 --> 00:50:54,450 הוא מאוד רלוונטי לשפות ברמה גבוהה יותר אלה. 797 00:50:54,450 --> 00:50:56,800 >> וכמו שאתה מתחיל לחשוב על פרויקט הגמר שלך, 798 00:50:56,800 --> 00:50:59,940 אשר, בדומה להגדרת בעיה 0, שבו אתה עודדת 799 00:50:59,940 --> 00:51:02,160 לעשות כל הדבר הכי מעניין אותך בהתחלה, 800 00:51:02,160 --> 00:51:05,790 פרויקט הגמר הוא ההזדמנות שלכם לקחת את הידע וההבנה החדש שלך עם C 801 00:51:05,790 --> 00:51:09,850 או PHP או JavaScript או רוצה לצאת לסיבוב 802 00:51:09,850 --> 00:51:12,330 וליצור פיסה מאוד משלך של תוכנה עבור העולם כדי לראות. 803 00:51:12,330 --> 00:51:17,770 ולזרעך עם רעיונות, יודע שאתה יכול הראש כאן, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 בכל שנה, אנו לבקש רעיונות מסגל וצוות וקבוצות סטודנטים בקמפוס 805 00:51:21,800 --> 00:51:27,330 רק כדי להגיש את רעיונותיהם לדברים מעניינים שאפשר לפתור באמצעות מחשבים, 806 00:51:27,330 --> 00:51:29,860 באמצעות אתרי אינטרנט, באמצעות תוכנה. 807 00:51:29,860 --> 00:51:32,360 אז אם אתה נאבק כדי לבוא עם רעיון משלך, 808 00:51:32,360 --> 00:51:35,790 בכל האמצעים לגלול בין רעיונות לשם משנה זו ואחרונה. 809 00:51:35,790 --> 00:51:39,990 זה בסדר גמור כדי להתמודד עם פרויקט שכבר התמודד בעבר. 810 00:51:39,990 --> 00:51:44,540 אנחנו ראינו הרבה יישומים עבור לראות את המצב של כביסה בקמפוס, 811 00:51:44,540 --> 00:51:47,000 יישומים רבים לניווט בתפריט חדר האוכל, 812 00:51:47,000 --> 00:51:49,540 יישומים רבים לניווט בקטלוג כמובן וכדומה. 813 00:51:49,540 --> 00:51:53,680 ואכן, בהרצאה ובעתיד סמינרים עתידיים, 814 00:51:53,680 --> 00:51:57,750 אנו להכיר לך כמה APIs זמין לציבור, הן מהבחינה מסחרית זמין 815 00:51:57,750 --> 00:52:02,520 כמו גם זמין מכאן CS50 בקמפוס, כך שיש לך גישה לנתונים 816 00:52:02,520 --> 00:52:04,910 ואז יכול לעשות דברים מעניינים עם זה. 817 00:52:04,910 --> 00:52:09,380 אז נוסף על פרויקט גמר בכמה ימים, כאשר אנחנו משחררים את המפרט, 818 00:52:09,380 --> 00:52:12,990 אך לעת עתה, יודע שאתה יכול לעבוד לבד או עם חבר או שניים 819 00:52:12,990 --> 00:52:16,010 ברוב כל פרויקט לעניין אותך. 820 00:52:16,010 --> 00:52:18,080 האינטרנט. 821 00:52:18,080 --> 00:52:22,300 אתה הולך קדימה ולשלוף את המחשב הנייד שלך, אתה הולך לfacebook.com בפעם הראשונה, 822 00:52:22,300 --> 00:52:27,020 שלא התחברתי אליו לאחרונה, ולחץ על Enter. אז מה בדיוק קורה? 823 00:52:27,020 --> 00:52:30,150 >> כאשר תקישו Enter במחשב שלך, חבורה שלמה של צעדים 824 00:52:30,150 --> 00:52:32,600 תתחיל במעין קסם קורה. 825 00:52:32,600 --> 00:52:35,960 אז אתה כאן בשרת שמאל, האינטרנט כמו פייסבוק הוא כאן מהימין, 826 00:52:35,960 --> 00:52:42,500 ואיכשהו אתה משתמש בשפה זו נקראת HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP הוא לא שפת תכנות. זה יותר של פרוטוקול. 828 00:52:46,770 --> 00:52:52,310 זהו סט של מוסכמות שדפדפני אינטרנט ושרתי אינטרנט להשתמש בעת תקשורת פנימיות. 829 00:52:52,310 --> 00:52:54,360 ומה שזה אומר הוא כדלקמן. 830 00:52:54,360 --> 00:52:56,790 ממש כמו בעולם האמיתי, יש לנו אמנות אלה 831 00:52:56,790 --> 00:53:00,140 שם אם אתה פוגש אדם כלשהו בפעם הראשונה, אם לא אכפת לך לרצות אותי כאן, 832 00:53:00,140 --> 00:53:03,980 אני יכול לבוא אליך, אומר, "היי, קורא לי דוד". >> היי, דוד. השם שלי הוא סמי. 833 00:53:03,980 --> 00:53:05,770 "היי, דוד. השמי הוא סמי." 834 00:53:05,770 --> 00:53:08,310 אז עכשיו יש לנו רק עוסקים בסוג זה של פרוטוקול אדם מטופש 835 00:53:08,310 --> 00:53:12,200 היכן אני יוזם את הפרוטוקול, סמי הגיב, 836 00:53:12,200 --> 00:53:15,060 אנחנו כבר לחצנו ידות, והעסקה הושלמה. 837 00:53:15,060 --> 00:53:18,260 HTTP הוא דומה מאוד ברוחו. 838 00:53:18,260 --> 00:53:23,350 כאשר בקשות דפדפן האינטרנט שלך www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 מה הדפדפן שלך באמת עושה הוא מושיט את ידו, כביכול, 840 00:53:27,020 --> 00:53:29,960 לשרת והיא שולחת אותה הודעה. 841 00:53:29,960 --> 00:53:34,220 והמסר שהוא בדרך כלל משהו כמו לקבל - מה אתם רוצים להשיג? - 842 00:53:34,220 --> 00:53:38,740 תשיג לי את דף הבית, שהוא כונה בדרך כלל על ידי חתך יחיד בסוף הכתובה URL. 843 00:53:38,740 --> 00:53:43,790 ורק שתדע באיזו שפה אני מדבר, אני הדפדפן אני הולך לספר לך 844 00:53:43,790 --> 00:53:46,930 שאני מדבר HTTP גרסת 1.1, 845 00:53:46,930 --> 00:53:51,980 וגם למען סדר טוב, אני הולך להגיד לך שמארח שאני רוצה בדף הבית של 846 00:53:51,980 --> 00:53:54,120 הוא facebook.com. 847 00:53:54,120 --> 00:53:57,730 בדרך כלל, דפדפן אינטרנט, ללא ידיעתך, האנושי, 848 00:53:57,730 --> 00:54:03,350 שולח את המסר הזה אל האינטרנט כאשר אתה פשוט להקליד www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> הזן, בדפדפן שלך. 850 00:54:05,370 --> 00:54:07,300 ומה עם פייסבוק להגיב? 851 00:54:07,300 --> 00:54:12,540 הוא מגיב עם כמה פרטים נסתרים בעלי מראה דומה אבל גם הרבה יותר. 852 00:54:12,540 --> 00:54:14,310 בואו תלכו קדימה לדף הבית של פייסבוק כאן. 853 00:54:14,310 --> 00:54:17,480 זהו המסך שרובנו כנראה לא תראו אם אתה נשאר מחובר כל הזמן, 854 00:54:17,480 --> 00:54:19,830 אבל זה אכן דף הבית שלהם. 855 00:54:19,830 --> 00:54:24,150 אם אנחנו עושים את זה בכרום, שים לב שאתה יכול למשוך את תפריטי הקשר הקטנים האלה. 856 00:54:24,150 --> 00:54:26,980 משתמש ב-Chrome, בין אם ב-Mac OS, חלונות, לינוקס, או כמו, 857 00:54:26,980 --> 00:54:31,840 אם אתה או בקרה לחץ על קליק שמאלי, אתה יכול בדרך כלל למשוך את תפריט שנראה כמו זה, 858 00:54:31,840 --> 00:54:35,870 שם כמה אפשרויות מחכות, שאחד מהם הוא מקור דף. 859 00:54:35,870 --> 00:54:39,920 אתה יכול גם בדרך כלל להגיע לדברים אלו על ידי מעבר לתפריט התצוגה ולחטט. 860 00:54:39,920 --> 00:54:42,750 למשל, הנה תחת תצוגה, מפתחים הוא אותו הדבר. 861 00:54:42,750 --> 00:54:45,780 אני הולך קדימה ולהסתכל על מקור דף. 862 00:54:45,780 --> 00:54:50,800 מה שתראה הוא HTML שמארק כתב לייצג facebook.com. 863 00:54:50,800 --> 00:54:55,910 זה בלגן שלם כאן, אבל אנחנו נראה שזה הופך מעט יותר לפני זמן רב. 864 00:54:55,910 --> 00:54:59,840 אבל יש כמה דפוסים כאן. בואו לגלול למטה לי דברים כאלה. 865 00:54:59,840 --> 00:55:05,730 זה קשה לאדם לקרוא, אבל שם לב שיש את הדפוס הזה של סוגריים הזוויתיים 866 00:55:05,730 --> 00:55:10,360 עם מילות מפתח כמו אפשרות, מילות מפתח כגון ערך, כמה מחרוזות מצוטטות. 867 00:55:10,360 --> 00:55:15,660 זה המקום בו, בעת שנרשמת בפעם הראשונה, צוינה מה שנת הלידה שלך היא. 868 00:55:15,660 --> 00:55:19,020 זה תפריט נפתח של שנתי לידה מקודד איכשהו כאן 869 00:55:19,020 --> 00:55:23,870 בשפה זו נקראת HTML, שפת סימון HyperText. 870 00:55:23,870 --> 00:55:27,730 במילים אחרות, כאשר הדפדפן מבקש דף אינטרנט, 871 00:55:27,730 --> 00:55:30,610 הוא מדבר הכנס הזה שנקרא HTTP. 872 00:55:30,610 --> 00:55:35,170 אבל מה facebook.com להגיב לבקשה שעם? 873 00:55:35,170 --> 00:55:38,260 >> הוא מגיב עם חלק מהמסרים המסתוריים האלה, כפי שנראים ברגע. 874 00:55:38,260 --> 00:55:43,760 אבל יותר מהתגובה שלו הוא בצורה של HTML, שפת סימון HyperText. 875 00:55:43,760 --> 00:55:47,170 זה השפה שהיא בעצם דף אינטרנט שכתוב. 876 00:55:47,170 --> 00:55:52,030 ומה דפדפן אינטרנט הוא באמת אז, עם קבלתו של משהו שנראה כמו זה, 877 00:55:52,030 --> 00:55:57,120 קורא אותו מלמעלה למטה, מהשמאל לימין, וכל פעם שהוא רואה אחת מהסוגריים הזוויתיים הללו 878 00:55:57,120 --> 00:56:03,370 אחרי מילת מפתח כמו אפשרות, הוא מציג ששפת הסימון בצורה המתאימה. 879 00:56:03,370 --> 00:56:06,820 במקרה זה, זה יהיה להציג תפריט נפתח של שנים. 880 00:56:06,820 --> 00:56:09,240 אבל שוב, זה הוא בלגן שלם להסתכל. 881 00:56:09,240 --> 00:56:16,630 אין זה משום שהמפתחים של פייסבוק מניפסט 0 עבור 5 עבור סגנון, למשל. 882 00:56:16,630 --> 00:56:20,190 זה בגלל שרוב הקוד שהם כותבים הוא, למעשה, כתוב יפים, 883 00:56:20,190 --> 00:56:22,450 כן ציין, יפה מסוכסך, וכמו, 884 00:56:22,450 --> 00:56:26,080 אבל קורס של מכונות, מחשבים, דפדפנים באמת לא אכפת לי 885 00:56:26,080 --> 00:56:27,890 אם הקוד שלך הוא מנוסח היטב. 886 00:56:27,890 --> 00:56:33,100 ולמעשה, זה לגמרי בזבזן להכות על המקש TAB כל הפעמים האלה 887 00:56:33,100 --> 00:56:37,650 ולשים את ההערות לאורך כל הקוד שלך ולבחור שמות משתנים באמת תיאוריים 888 00:56:37,650 --> 00:56:42,340 כי אם הדפדפן לא אכפת לי, כל מה שאתה עושה בסופו של היום הוא מבזבז בתים. 889 00:56:42,340 --> 00:56:46,660 >> אז מתברר מה שרוב האתרים עושים זה למרות שאת קוד המקור לfacebook.com, 890 00:56:46,660 --> 00:56:49,550 לcs50.net וכל אתרים אחרים אלה באינטרנט 891 00:56:49,550 --> 00:56:53,730 בדרך כלל כתובים היטב וגם הגיב יפה ומסוכסך וכדומה, 892 00:56:53,730 --> 00:56:59,270 בדרך כלל לפני שהאתר הוא לשים על גבי האינטרנט, קוד minified, 893 00:56:59,270 --> 00:57:02,970 לפי HTML ו-CSS - משהו אחר שבקרוב יראו - 894 00:57:02,970 --> 00:57:05,960 קוד JavaScript שבקרוב יראו דחוס, 895 00:57:05,960 --> 00:57:09,250 לפי שמות משתנים ארוכים יהפכו X ו-Y ו-Z, 896 00:57:09,250 --> 00:57:13,900 וכל שהרווחים שעושים הכל נראה כל כך קריא כל זורק שם, 897 00:57:13,900 --> 00:57:17,700 כי אם תחשוב על זה ככה, פייסבוק מקבל מליארד עמוד פוגע יום - 898 00:57:17,700 --> 00:57:21,670 משהו מטורף כזה - אז מה אם רק כדי להיות מתכנת אנאלי 899 00:57:21,670 --> 00:57:26,660 פגע במרחב זמן פס אחד הנוסף רק כדי לשנן כמה שורת הקוד אי פעם כל כך הרבה יותר? 900 00:57:26,660 --> 00:57:29,500 מה המשמעות אם פייסבוק שומר שרווחים 901 00:57:29,500 --> 00:57:32,880 בכל הבתים שהם שולחים חזרה לאנשים באינטרנט? 902 00:57:32,880 --> 00:57:36,400 להכות על מקש הרווח פעם אחת נותן לך שני בתים נוספים בקובץ שלך. 903 00:57:36,400 --> 00:57:39,730 ואם מליארד בני אדם ולאחר מכן להמשיך להוריד את דף הבית באותו יום, 904 00:57:39,730 --> 00:57:42,060 כמה נתונים נוספים שמועבר על גבי האינטרנט? 905 00:57:42,060 --> 00:57:45,200 ג'יגה בלי שום סיבה טובה. 906 00:57:45,200 --> 00:57:48,510 ומובן מאליו, להרבה אתרים זה לא עניין כה מדרגים, 907 00:57:48,510 --> 00:57:51,030 אבל לפייסבוק, לגוגל, לכמה מהאתרים הפופולריים ביותר 908 00:57:51,030 --> 00:57:54,860 יש תמריץ גדול מבחינה כלכלית לעשות את הקוד שלך נראה כמו בלגן 909 00:57:54,860 --> 00:57:58,980 כך שאתה משתמש בכמה שיותר בתים בנוסף לאז לדחוס אותו 910 00:57:58,980 --> 00:58:01,500 באמצעות משהו כמו zip, אלגוריתם שנקרא gzip, 911 00:58:01,500 --> 00:58:04,250 שהדפדפן עושה עבורך באופן אוטומטי. אבל זה נורא. 912 00:58:04,250 --> 00:58:08,060 אנחנו אף פעם לא נלמד משהו על אתרים של אנשים אחרים וכיצד לעצב דפי אינטרנט 913 00:58:08,060 --> 00:58:09,680 אם יש לנו להסתכל על זה ככה. 914 00:58:09,680 --> 00:58:13,620 >> אז למרבה המזל, דפדפנים כמו כרום ואקספלורר ופיירפוקס בימים אלה 915 00:58:13,620 --> 00:58:16,450 מגיע בדרך כלל עם כלי פיתוח מוכללים. 916 00:58:16,450 --> 00:58:21,730 למעשה, אם אני יורד כאן לבדוק אלמנט או אם אני הולך להצגה, מפתחים, 917 00:58:21,730 --> 00:58:25,220 וללכת לכלי פיתוח באופן מפורש, 918 00:58:25,220 --> 00:58:27,640 חלון זה בחלק התחתון של המסך שלי עכשיו צץ. 919 00:58:27,640 --> 00:58:31,230 זה קצת מפחיד בהתחלה כי יש הרבה כרטיסיות לא מוכרות כאן, 920 00:58:31,230 --> 00:58:34,510 אבל אם אני לוחץ על אלמנטים כל הדרך בצד השמאל למטה, 921 00:58:34,510 --> 00:58:38,810 הכרום הוא ללא ספק די חכם. הוא יודע כיצד לפרש את כל הקוד הזה. 922 00:58:38,810 --> 00:58:42,320 ואז מה הכרום עושה זה מנקה את כל HTML של פייסבוק. 923 00:58:42,320 --> 00:58:45,680 למרות שאין רווחים יש, אין כניסה לשם, 924 00:58:45,680 --> 00:58:51,120 עכשיו שם לב שאני יכול להתחיל לנווט בדף אינטרנט זה עוד יותר היררכי. 925 00:58:51,120 --> 00:58:56,910 מתברר שכל דף אינטרנט כתוב בשפה הנקראת HTML5 צריך להתחיל עם זה, 926 00:58:56,910 --> 00:59:03,980 הצהרת DOCTYPE זה, אם אפשר לומר כך: 927 00:59:03,980 --> 00:59:07,840 זה סוג של שיש בהיר ואפור, אבל זה הקו הראשון של קוד בקובץ זה, 928 00:59:07,840 --> 00:59:12,080 וזה רק אומר לדפדפן, "היי, כאן מגיע חלק של HTML5. הנה בא דף אינטרנט". 929 00:59:12,080 --> 00:59:18,490 הסוגר הפתוח הראשון מעבר לכך במקרה זה דבר, תג HTML פתוח סוגר 930 00:59:18,490 --> 00:59:22,320 ואז אם אני צולל עמוק יותר - החיצים האלה הם לגמרי חסרי משמעות; 931 00:59:22,320 --> 00:59:25,140 הם רק לצורך ההצגה, שהם לא ממש בקובץ - 932 00:59:25,140 --> 00:59:30,300 שם לב שבתוך של תג HTML של פייסבוק, כל דבר שמתחיל בסוגר פתוח 933 00:59:30,300 --> 00:59:32,910 ואז יש מילה נקראת תג. 934 00:59:32,910 --> 00:59:38,610 אז בתוך תג HTML הוא כנראה תג ותג בראש גוף. 935 00:59:38,610 --> 00:59:41,930 בתוך תג הראש כרגע הוא כל בלגן לפייסבוק 936 00:59:41,930 --> 00:59:45,620 כי יש להם הרבה של מטה ודברים אחרים לשיווק ופרסום. 937 00:59:45,620 --> 00:59:50,600 >> אבל אם אנחנו לגלול מטה, מטה, מטה, מטה, בואו נראים איפה זה. הנה הוא. 938 00:59:50,600 --> 00:59:52,210 זה אחד הוא לפחות מוכר קצת. 939 00:59:52,210 --> 00:59:55,990 הכותרת של דף הבית של פייסבוק, אם אי פעם להסתכל בכרטיסייה בשורת הכותרת שלך, 940 00:59:55,990 --> 00:59:59,060 הוא ברוכים הבאים לפייסבוק - התחבר, רשם או למידע נוסף. 941 00:59:59,060 --> 01:00:01,110 זה מה שהיית רואה בשורת הכותרת של הכרום, 942 01:00:01,110 --> 01:00:03,100 וככה זה מיוצג בקוד. 943 01:00:03,100 --> 01:00:08,090 אם נתעלמתי מכל דבר אחר בראש, רוב ממעיו של דף אינטרנט נמצאים בגוף, 944 01:00:08,090 --> 01:00:10,940 ומתברר שהקוד של פייסבוק עומד להיראות יותר מורכב 945 01:00:10,940 --> 01:00:14,540 מרוב הדברים שאנחנו נכתוב תחילה רק בגלל שבנינו במשך השנים, 946 01:00:14,540 --> 01:00:17,260 אבל יש המון תגי הסקריפט, קוד JavaScript, 947 01:00:17,260 --> 01:00:18,870 זה הופך את אתר האינטרנט אינטרקטיווי מאוד: 948 01:00:18,870 --> 01:00:22,330 לראות עדכוני סטטוס באופן מיידי תוך שימוש בשפות כמו JavaScript. 949 01:00:22,330 --> 01:00:25,270 יש משהו שנקרא div, אשר הוא חלוקה של דף. 950 01:00:25,270 --> 01:00:27,940 אבל לפני שנגיע לאותו פרט, בואו ננסה להקטין את התצוגה 951 01:00:27,940 --> 01:00:31,920 ולהסתכל על גרסה פשוטה יותר של פייסבוק 1.0, אם אפשר לומר כך. 952 01:00:31,920 --> 01:00:34,740 הנה, עולם השלום של דפי אינטרנט. 953 01:00:34,740 --> 01:00:37,370 יש שהכרזת DOCTYPE בחלקו העליון 954 01:00:37,370 --> 01:00:40,280 וזה קצת שונה מכל דבר אחר. 955 01:00:40,280 --> 01:00:46,130 שום דבר אחר שאנחנו כותבים בדף אינטרנט עומד להתחיל עם 01:00:48,880 ופרט למשהו שנקרא הערות ב-HTML. 957 01:00:48,880 --> 01:00:53,000 אבל על פי רוב, כל הדבר בדף אינטרנט הוא סוגר, מילת מפתח סוגר פתוח, קרוב. 958 01:00:53,000 --> 01:00:56,220 >> במקרה זה תוכל לראות פשוט ביותר של דפי אינטרנט אפשריים. 959 01:00:56,220 --> 01:01:00,260 תג HTML מכיל תג ראש והוא מכיל תג גוף, 960 01:01:00,260 --> 01:01:04,580 אבל שם לב שיש את הרעיון הזה של התחלה והפסקת תגים. 961 01:01:04,580 --> 01:01:11,360 זה תג ההתחלה עבור HTML, זה תג הסגירה או תג סיום. 962 01:01:11,360 --> 01:01:15,400 שים לב שהם סוג של ניגודים במובן זה שתג הקרוב או תג סיום 963 01:01:15,400 --> 01:01:20,030 יש זה קו נטוי הפנימי של עצמו. 964 01:01:20,030 --> 01:01:23,540 בינתיים, יש תג פתוח בראש כאן ותג ראש קרוב לכאן. 965 01:01:23,540 --> 01:01:26,880 >> יש כותרת פתוחה ותג כותרת קרוב כאן. 966 01:01:26,880 --> 01:01:29,850 העובדה ששמתי את התואר על קו אחד, שרירותי. 967 01:01:29,850 --> 01:01:33,760 זה פשוט נראה כמו משהו שיתאים יפה בשורה אחת, ולכן לא טרח להכות Enter כמה פעמים. 968 01:01:33,760 --> 01:01:38,200 בינתיים, הגוף שעשיתי כניסה רק כדי להיות תמיד כל כך ברור. 969 01:01:38,200 --> 01:01:41,050 שים לב ש-HTML הוא שפה די מטומטמת. 970 01:01:41,050 --> 01:01:43,410 למעשה, כבר ביום לפני שהיו עורכי WYSIWYG 971 01:01:43,410 --> 01:01:46,770 ו-Microsoft Word שבו אתה יכול לומר, "הפוך מודגש, נטוי לעשות זה" 972 01:01:46,770 --> 01:01:50,850 היית בעצם להקליד פקודות קטנות במסות לפני 20 + שנים 973 01:01:50,850 --> 01:01:55,740 לפי שהיית אומר, "יתחיל עם הטקסט הזה מודגש. פסק לבצע את הטקסט הזה מודגש." 974 01:01:55,740 --> 01:01:59,010 "תתחיל עם הדגשת טקסט זה. פסק לבצע הדגשת הטקסט הזה." 975 01:01:59,010 --> 01:02:01,850 >> זה מה שHTML או כל שפת סימון הוא. 976 01:02:01,850 --> 01:02:05,530 התגית ראשונה זה אומרת, "היי, דפדפן. הנה מגיע קצת HTML." 977 01:02:05,530 --> 01:02:09,880 התג הבא אומר, "היי, דפדפן. הנה בא ראש, הכותרת של דף האינטרנט שלי." 978 01:02:09,880 --> 01:02:11,650 "היי, דפדפן. הנה מגיע את התואר". 979 01:02:11,650 --> 01:02:15,880 ואז לכאן, "היי, דפדפן. זהו זה על התואר". 980 01:02:15,880 --> 01:02:20,000 אז ככה הדפדפן יודע כבר לא להציג יותר תווים משלום, העולם 981 01:02:20,000 --> 01:02:21,860 בשורת הכותרת. 982 01:02:21,860 --> 01:02:23,640 בינתיים, זה אומר, "זהו זה לראש". 983 01:02:23,640 --> 01:02:28,340 זה אומר, "הנה בא הגוף הנה הגוף האמיתי." - פשוטו כמשמעו, את מילות שלום, עולם. 984 01:02:28,340 --> 01:02:33,190 וזה אומר כאן, "זהו זה לגוף. זהו זה עבור ה-HTML." 985 01:02:33,190 --> 01:02:34,640 אז דפדפנים הם די מטומטמים. 986 01:02:34,640 --> 01:02:39,920 הם פשוט לקרוא את החומר הזה מלמעלה למטה, משמאל לימין, ולעשות בדיוק מה שאומרים להם לעשות. 987 01:02:39,920 --> 01:02:41,860 בואו בעצם לעשות דוגמה קטנה כאן. 988 01:02:41,860 --> 01:02:46,240 תן לי לפתוח לי את הפשוטה של ​​תוכניות ב-Mac שלי כאן, כלומר TextEdit. 989 01:02:46,240 --> 01:02:48,220 ב-Windows אתה יכול להשתמש Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 אבל זה כל מה שאתה צריך כדי להתחיל להרוויח דפי אינטרנט. 991 01:02:50,520 --> 01:02:53,730 אני הולך קדימה ופשוט להעתיק ולהדביק קוד זה בקובץ זה. 992 01:02:53,730 --> 01:02:57,210 אני הולך קדימה ולשמור אותו על שולחן העבודה שלי, 993 01:02:57,210 --> 01:03:01,220 ואני הולך לשמור את זה כhello.html, 994 01:03:01,220 --> 01:03:03,840 ועכשיו הקובץ בשם hello.html. 995 01:03:03,840 --> 01:03:05,690 הנה הוא על שולחן העבודה שלי. 996 01:03:05,690 --> 01:03:11,130 תן לי עכשיו להיכנס לדפדפן וגרור את הקובץ לתוך הדפדפן. 997 01:03:11,130 --> 01:03:14,060 והנה, הגיע לעמוד האינטרנט הראשון שלי. 998 01:03:14,060 --> 01:03:17,340 שים לב שהכותרת של הכרטיסייה היא שלום, עולם כלתג הכותרת, 999 01:03:17,340 --> 01:03:20,040 ושים לב כי הלו, העולם הוא הגוף של דף האינטרנט שלי, 1000 01:03:20,040 --> 01:03:22,190 ולחזר-הו, אני באינטרנט. 1001 01:03:22,190 --> 01:03:24,700 >> אני לא ממש, ממש, כי קובץ זה הוא לא באינטרנט. 1002 01:03:24,700 --> 01:03:28,330 זה קורה להיות בכונן הקשיח המקומי שלי שבמסלול מסוים. 1003 01:03:28,330 --> 01:03:32,720 אבל הרעיון הוא אותו. כולנו צריכים כרגע הוא שרת אינטרנט שאליו כדי להעלות אותו. 1004 01:03:32,720 --> 01:03:37,410 אבל קודם בואו בעצם להציג קצת יותר מורכב ויותר מסוגנן קטנה. 1005 01:03:37,410 --> 01:03:39,890 זה הוא דף פשוט, אם משעמם, אינטרנט. 1006 01:03:39,890 --> 01:03:41,990 מסתבר שיש סוגים אחרים של תגים שאנחנו יכולים להשתמש בו. 1007 01:03:41,990 --> 01:03:45,530 למשל, כאן בצהוב שהצגתי 2 תגים חדשים. 1008 01:03:45,530 --> 01:03:49,630 אנחנו לא נשחק יותר עם אלה היום, אבל שמנו לב שתג הקישור 1009 01:03:49,630 --> 01:03:52,520 איכשהו נראה שונה מכל דבר אחר. 1010 01:03:52,520 --> 01:03:55,370 תג הקישור לוקח את מה שנקרא תכונות, 1011 01:03:55,370 --> 01:03:59,770 ותכונה היא משהו שמשנה את התנהגותו של תג. 1012 01:03:59,770 --> 01:04:03,840 במקרה זה זו אינה הבחירה הטובה ביותר של שמות, לקשר, כי זה סוג של משמעות, 1013 01:04:03,840 --> 01:04:11,590 אבל תג קישור זה אומר, בעצם, כולל קובץ בשם styles.css הפנימי של דף האינטרנט שלי. 1014 01:04:11,590 --> 01:04:15,400 אתה יכול לחשוב על זה כמקביל ל-C # כולל של הוראה. 1015 01:04:15,400 --> 01:04:19,650 Styles.css מתייחס לשפות אחרות לחלוטין, שלא ישחקו איתה היום, 1016 01:04:19,650 --> 01:04:23,790 אבל זה לאסתטיקה: גודל גופנים, צבעים, ריפוד, כניסה, שולים, 1017 01:04:23,790 --> 01:04:26,040 וכל זה סוג של פירוט אסתטיקה. 1018 01:04:26,040 --> 01:04:28,820 בינתיים, תג התסריט הוא דומה מבחינה פונקציונלית, 1019 01:04:28,820 --> 01:04:33,140 אבל לא כולל CSS, שפה שהיא כוללת שפה אחרת, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 אז במילים אחרות, עם 2 תגים אלה אני סופו של דבר להיות מסוגל לכתוב את דף האינטרנט שלי 1021 01:04:37,810 --> 01:04:41,490 אלא גם למשוך בקוד שאני או מישהו אחר כתבתי 1022 01:04:41,490 --> 01:04:44,350 כדי שנוכל לעמוד על כתפיהם של אנשים אחרים, אנחנו יכולים לתרגל עיצוב טוב, 1023 01:04:44,350 --> 01:04:46,120 הפקטורינג את הקוד משותף. 1024 01:04:46,120 --> 01:04:49,090 אם יש לי 10 עמודי אינטרנט שונים, זה אומר שחלק מהאסתטיקה שלי 1025 01:04:49,090 --> 01:04:52,490 יכול להיות בחוץ בחשבון, כמו # כולל, לקובץ נפרד. 1026 01:04:52,490 --> 01:04:54,420 אז אנחנו בדרך. 1027 01:04:54,420 --> 01:04:57,180 אבל בואו באמת לעשות משהו יותר מעניין עם הקובץ הזה ראשון. 1028 01:04:57,180 --> 01:05:01,110 >> שוב, זה רק TextEdit. אני לא מבחינה טכנית באינטרנט, אבל אנחנו נגיע לשם. 1029 01:05:01,110 --> 01:05:04,910 אני רוצה לעשות שלום, עולם קצת יותר נועז ממה שהיא. 1030 01:05:04,910 --> 01:05:10,890 אז שלום, בואו נגיד באופן שרירותי לנועז. 1031 01:05:10,890 --> 01:05:15,910 שוב, הסיפור הוא אותו: שלום, פסיק, להתחיל לעשות את זה מודגש, 1032 01:05:15,910 --> 01:05:19,730 אז העולם מקבל מודפס באותיות מודגשות, וזה אומר להפסיק את ההדפסה זו מופיעה באופן מודגש. 1033 01:05:19,730 --> 01:05:24,020 תן לי ללכת קדימה ולשמור את הקובץ שלי, לחזור לכרום, אני להתקרב רק כדי שנוכל לראות את זה יותר טוב, 1034 01:05:24,020 --> 01:05:27,870 ולטעון מחדש, ותראה שהעולם הוא עכשיו באופן מודגש. 1035 01:05:27,870 --> 01:05:31,810 האינטרנט הוא על כל קישורים, אז בואו נלך ותעשה את זה: 1036 01:05:31,810 --> 01:05:38,550 האתר האהוב עליי הוא, יניח, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 שמור, טען. אוקיי. יש כאן שני בעיות כרגע מלבד הכיעור של האתר. 1038 01:05:43,810 --> 01:05:47,310 1, אני די בטוח שאני מכה הזן כאן. וכך עשיתי. 1039 01:05:47,310 --> 01:05:51,590 אני מכה לא רק זן, גם אני מסוכסך, לתרגל את מה שהיינו מטיף על סגנון, 1040 01:05:51,590 --> 01:05:54,930 אבל שלי הוא ממש ליד העולם. 1041 01:05:54,930 --> 01:05:58,410 אז למה זה? דפדפנים לעשות רק את מה שאתה אומר להם לעשות. 1042 01:05:58,410 --> 01:06:04,010 לא ספרתי לי הדפדפן, "קווי הפסקה כאן. הכנס פסק לשבור כאן." 1043 01:06:04,010 --> 01:06:07,820 אז הדפדפן, זה לא משנה אם אני מכה חזרה 30 פעמים, 1044 01:06:07,820 --> 01:06:10,820 זה עדיין הולך לשים את זכותי לצד העולם. 1045 01:06:10,820 --> 01:06:15,930 מה שאני באמת צריך לעשות כאן היא אומר משהו כמו
, להוסיף מעבר שורה. 1046 01:06:15,930 --> 01:06:17,940 >> ולמעשה, מעבר שורה הוא סוג של דבר מוזר 1047 01:06:17,940 --> 01:06:21,650 כי אתה לא באמת יכול להתחיל לנוע לקו אחר, ואז לעשות משהו, 1048 01:06:21,650 --> 01:06:25,380 ולאחר מכן להפסיק לנוע לשורה חדשה. זה סוג של פעולה אטומית. 1049 01:06:25,380 --> 01:06:28,140 או שאתה עושה את זה או שלא. אתה מקיש Enter או שאתה לא. 1050 01:06:28,140 --> 01:06:33,390 אז br הוא קצת תג אחר, ולכן אני זקוק למיון של שניהם הפתוחים ולסגור אותו 1051 01:06:33,390 --> 01:06:35,230 בבת אחת. 1052 01:06:35,230 --> 01:06:37,500 התחביר שהוא זה. 1053 01:06:37,500 --> 01:06:41,760 מבחינה טכנית, אתה יכול לעשות משהו כזה בגרסות מסוימות של ה-HTML, 1054 01:06:41,760 --> 01:06:45,600 אבל זה רק טיפשים משום שאין שום סיבה להתחיל ולהפסיק משהו 1055 01:06:45,600 --> 01:06:48,420 אם אתה יכול לעשות את זה במקום כולם בבת אחת. 1056 01:06:48,420 --> 01:06:52,310 מבין HTML5 שאינו דורש בקפדנות לוכסן זה, 1057 01:06:52,310 --> 01:06:55,410 כך תוכל לראות ספרי לימוד ומשאבים מקוונים שאין לו, 1058 01:06:55,410 --> 01:06:59,780 אבל למען הסדר טוב בואו להתאמן הסימטריה שראינו עד כה. 1059 01:06:59,780 --> 01:07:02,870 משמעות הדבר הוא כי התג הוא גם נפתח ונסגר. 1060 01:07:02,870 --> 01:07:05,220 אז עכשיו בואו להציל אותי את התיק שלי, לחזור לכאן. 1061 01:07:05,220 --> 01:07:10,240 אוקיי, אז זה מתחיל להיראות טוב יותר, מלבד האינטרנט שאני יודע הוא סוג של לחיצה, 1062 01:07:10,240 --> 01:07:13,610 ועדיין youtube כאן לא נראה שיוביל לשום דבר. 1063 01:07:13,610 --> 01:07:17,560 זאת משום שלמרות שזה נראה כמו קישור, הדפדפן לא יודע שכשלעצמה, 1064 01:07:17,560 --> 01:07:20,670 אז יש לי לומר לדפדפן שמדובר בקישור. 1065 01:07:20,670 --> 01:07:22,620 >> הדרך לעשות זאת היא להשתמש בתג עוגן: 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 ולתת לי להזיז את זה לשורה חדשה, רק כדי שזה קצת יותר קריא, 1069 01:07:38,490 --> 01:07:40,060 ואני לכווץ את גודל הגופן. 1070 01:07:40,060 --> 01:07:43,890 האם אני עושה זאת? לא, יש שם הולך להיות זו הדיכוטומיה. 1071 01:07:43,890 --> 01:07:46,760 תג זה, התג העוגן, אכן ייקח את תכונה, 1072 01:07:46,760 --> 01:07:52,900 אשר משנה את ההתנהגות שלה, ואת הערך של תכונה זו היא כנראה כתובת האתר של YouTube. 1073 01:07:52,900 --> 01:07:56,380 אבל שים לב לדיכוטומיה הוא שרק בגלל זה את כתובת האתר שאתה הולך, 1074 01:07:56,380 --> 01:08:01,020 זה לא אומר שצריך להיות המילה שאתה מדגיש ועושה קישור. 1075 01:08:01,020 --> 01:08:03,960 אלא, שיכול להיות משהו כזה. 1076 01:08:03,960 --> 01:08:10,870 אז אני חייב לומר שאפסיק לעשות את המילה הזאת היפר באמצעות תג העוגן הקרוב. 1077 01:08:10,870 --> 01:08:12,650 שים לב שאני לא עושה את זה. 1078 01:08:12,650 --> 01:08:15,890 1, זה יהיה סתם בזבוז הזמן של כולם וזה לא הכרחי. 1079 01:08:15,890 --> 01:08:19,290 >> כדי לסגור תג, אתה מזכיר את שמו של התג היחיד שוב. 1080 01:08:19,290 --> 01:08:21,800 את לא מזכיר את כל התכונות. 1081 01:08:21,800 --> 01:08:26,189 אז בואו נחסוך את זה, לחזור. אוקיי, וזהו, עכשיו הוא כחול ומקושר. 1082 01:08:26,189 --> 01:08:29,430 אם אני לוחץ עליו, אני ממש לעשות ללכת ל-YouTube. 1083 01:08:29,430 --> 01:08:32,529 אז למרות שדף האינטרנט שלי הוא לא באינטרנט, זה לפחות HTML, 1084 01:08:32,529 --> 01:08:37,930 ואם יניח לאינטרנט להתעדכן, הייתי למעשה בסופו כאן בyoutube.com. 1085 01:08:37,930 --> 01:08:40,670 ואני יכול לחזור והנה דף האינטרנט שלי. אבל שם לב לכך. 1086 01:08:40,670 --> 01:08:43,120 אם אי פעם קבלת דואר זבל או התקפת פישינג, 1087 01:08:43,120 --> 01:08:45,850 עכשיו יש לך את היכולת אחרי חמש דקות בלבד כדי לעשות את אותו הדבר. 1088 01:08:45,850 --> 01:08:50,920 אנחנו יכולים ללכת לכאן ולעשות משהו כמו www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 או מה האתר הוא הרפרף, ואז אתה יכול להגיד לאמת את חשבון PayPal שלך. 1090 01:08:59,319 --> 01:09:04,840 [שחוק] ועכשיו זה הולך לצאת לbadguy.com, שאני לא מתכוון ללחוץ על 1091 01:09:04,840 --> 01:09:08,000 משום שאין לי מושג לאן זה מוביל. [שחוק] 1092 01:09:08,000 --> 01:09:10,859 >> אבל עכשיו יש לנו את היכולת באמת יגיע לשם. 1093 01:09:10,859 --> 01:09:12,640 אז אנחנו באמת רק מתחילים לגרד את פני השטח. 1094 01:09:12,640 --> 01:09:15,830 אנחנו לא תכנות כשלעצמה; אנחנו כותבים שפת סימון. 1095 01:09:15,830 --> 01:09:18,569 אבל ברגע שאנחנו משלימים את אוצר המילים שלנו ב-HTML, 1096 01:09:18,569 --> 01:09:21,520 אנחנו נציג את PHP, שפת תכנות בפועל 1097 01:09:21,520 --> 01:09:26,859 שיאפשר לנו לייצר HTML באופן אוטומטי, להפיק CSS באופן אוטומטי, 1098 01:09:26,859 --> 01:09:29,430 כדי שנוכל להתחיל ביום רביעי ליישום, אומר, 1099 01:09:29,430 --> 01:09:31,700 מנוע החיפוש שלנו ועוד. 1100 01:09:31,700 --> 01:09:34,770 אבל גם על זה בכמה ימים. ניראה אותך אז. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]