>> SPEAKER: ОК, така че, няма да повярвам, но миналата седмица, в понеделник, в Pierce, I
е долу в мазето.
Аз никога не отидете на Пиърс.
И аз никога няма да се върна отново, защото Оставих нещата си сам,
около пет минути и някой открадна моя компютър и моя
телефон от раницата си.
Което означава, че мога да го върна, и след по-малко от седмица по-късно
тя има откраднати отново.
>> И тогава тя се възбуждаше -
Find My iPhone продължава да бъде безполезно.
Така че аз продължавам да се насърчи да не го използвам.
Оказа се по веднъж, и то е в MIT, като петнайсетминута по-късно, и лицето
нарича този телефонен номер, който показа в регистъра на повикванията ми AT & T.
>> Така че аз влязох в интернет, наречен този телефон номер, и отиде право до този
секретар на испански.
И аз не съм чувал за него, тъй като.
Така че аз трябваше да получите нов компютър и телефон.
Знам.
Да.
Но, ако вие искате да чип, за да ми компютър фонд след това, ето защо
Помолих те тук.
Шегувам се.
Но това е наистина тъжно и травматични.
>> Но всичко е обратно сега, и затова р-настроите 8 отне толкова дълго, защото
Аз не разполагате с компютър.
И някой го е откраднал.
И аз емайл, питам, ако те ще ви клас р-настроите 8.
Но те казаха не.
И аз бях като, мога да имам обратно на моя компютър?
И те са като, не.
Шегувам се.
>> OK.
Това е нашата крайна точка, а аз имам няколко - имаме само три
неща на дневен ред.
Ние ще говорим малко за водача на Q.
След това отиваме да прекарат 15 минути на хладно демо.
След това ние ще кажем всичко чао един към друг.
Ти наистина не се нуждаят вашите компютри или химикалка или хартия, за да си водите бележки, или
следват заедно.
Така че предполагам, че ако имате вашия компютър , а след това сте на Facebook.
Просто казвам.
Освен ако не сте попълване на Q водач, който е на първо място.
>> Ръководството Q е отворен.
Вие сте имали имейл за това.
След като всички Q неща на е подадено най- края на годината, аз получите всички
Q коментари в резултатите от всички който реши да ми даде обратна връзка.
И така, когато отидете в Q -
Аз не знам, ако можете да направите това, Jeff, защото сте студент и разширение.
Но когато отидете в Q, ако не сте го и преди, когато вдигнете
учител, който е David Malan.
Трябва да го направя.
>> И тогава можете да вземете TFS.
И вие можете да вземете колкото се може повече TFS, колкото искате.
Но там са 60 от нас.
Не е нужно да вземем всички.
Можете просто да вземете мен, или просто изберете няколко други хора, ако искате, да
им даде обратна връзка, както добре.
И тогава можете да получите резултати на всички тези различни оси, и след това можете да оставите
тях обратна връзка.
>> И тогава, като месец по-късно, Ще получите всичко, което обратна връзка.
И точно като обратна връзка сте били ми дава през семестъра, аз
прочетете всичко това.
И това е наистина полезно, и това помага ми да порасна като учител и като
индивид.
Така че, моля, отделете малко време, за да го направя.
Ние само ще бъде тук за около 30 минути.
Така че, ако искате, в края на това, да отнеме пет минути, а просто да попълните
на Q, защото той не взема повече време от това.
Това би било прекрасно, и вие също получите вашите класове върна по-бързо, ако
попълните Q.
>> Така че повечето от вас са направили това преди -
или не, около половината от вас са направили това преди.
Но ако сте новак, това е какво е това.
Това ще бъде една и съща за всички класове.
Направи го.
Това отнема пет минути.
Но също така, ако го направя малко сериозно, това не е най-лошото нещо,
в света, защото аз със сигурност го вземат на сериозно.
>> Така че, ако ме оставите усмивка на лицето, Ще оценявам това.
Но аз също бих се радвал, ако можете ме остави повече от една усмивка на лицето.
Но това е до вас.
Не мога да ви кажа - или като голям усмивка се изправи, с капитал D. Това ще
да бъде дори по-добре.
>> Добре, това е всичко, което имам за Q. Ако имате някакви въпроси, можете да поискате
мен, но доста очевидно.
Само, моля, попълнете я.
Аз наистина ще го оценявам, и това означава много за мен.
>> ОК, това е, което ние ще прекарат 15минути преживяваш.
Отивам да ви покажа някои код.
Мисля, че това е наистина готино, и това ме накара повече
развълнуван по компютърни науки.
Така че аз се надявам, че ще направи една и съща за всички вас.
>> Ние ще се отвори - и всичко това код аз ще ви изпратя по-късно.
Но ние просто ще се отвори -
Аз съм в моя терминал -
ние ще отворим тази програма наречен [? MySum. ?]
>> Всеки ли може да прочете това, или трябва да направи по-голям?
Може ли някой да ми каже какво този код, ще направя, когато го стартирате, или какво е това
програма ще направя, когато го стартирате?
>> [? Ави,?] Какво мислите то се случва да правя?
Finish дъвчене.
Вие не трябва да се говори с устата си отворена.
>> ПУБЛИКАТА: Има ли го вземе един куп аргументи, да намерят сума от връщането им
сума, а след това да го отпечатате?
Или го взема в два аргумента, и След това го прави [недоловим].
И тогава се отпечатва каквото резултатите са.
>> SPEAKER: Close, наистина близо.
Някой иска ли да добавите към [? какво Ави?] каза?
Имате ли нужда да се даде тази програма никакви аргументи от командния ред?
>> Публиката: Не.
>> SPEAKER: Не.
Какво се случва, ако не му се даде никакви аргументи от командния ред?
Просто напишете точка наклонена черта MySum.
>> ПУБЛИКАТА: 1 плюс 2 е равно на 3.
>> SPEAKER: 1 плюс 2 е равно на 3.
И това ще отпечата това.
Това е точно така.
Вие ще видите, че на печат е Линията в долния край.
Тя ще разпечатате а, б, и след това сумата от а и б.
И аз предполагам, че се предполага, че сума работи правилно.
Добро предположение.
>> Добре, и какво ще стане, ако той даде това, което аргумент?
[? Manu? ?]
>> ПУБЛИКАТА: Ще добавите каквото първият аргумент е да б.
Или до 2, съжалявам.
>> SPEAKER: Точно така, до 2.
Някой знае ли какво strtol прави?
Това е основно atoi.
Atoi всъщност е фантазия версия на -
или опростена версия на strtol.
Но това всъщност използва strtol.
И открих, че навън, защото исках нещо като atoi, и след това, когато аз
е atoi, чета тук.
И открих "това поведение е същото като "strtol.
Така че това е основно за atoi всички намерения и цели.
И виждаш ли, че дори да използвате за нищожна и 10.
>> Това всъщност ви позволява да правите низ, и да го превърне в номер, и изберете
каква база искате да го направя инча
Така че това е база 10 точно тук.
Можех да направя база две за десетична запетая, база 16 за шестнадесетичен вид.
Това е много готино.
Но Дълга история Накратко, това са нужни двама номера и ги сумира.
>> Така че нека да го стартирате.
И вие също така ще забележите, има някои неща -
така че имам Makefile точно тук, и Ако отворите, че нагоре, някои неща
вие ще забележите, са различни.
По-специално, този аргумент точно тук, най-вероятно
Не съм виждал това преди.
Като цяло, ние се съберат неща с пробив на нула, нула.
Dash нула, нула, означава, не правете всяко оптимизации, компилатор.
Не се опитвайте и да направи нищо фантазия, или направи всичко тече по-бързо, или да получите
отървете от променливи, които са необходими.
Да не се оптимизира този код на всички,
>> Питам за трето ниво оптимизация.
Така че аз искам да направя компилатор много оптимизации.
Можете да промените, че в Makefile, когато разполагате с такъв код, ако искате
, за да видите различни неща.
Което ние ще ви покажем в секунда.
Така че ние тече ми една сума плюс две плюс три.
Някой да ми даде два аргумента.
>> ПУБЛИКАТА: 4 и 5.
>> SPEAKER: 4 и 5.
Благодаря.
Страхотно, тя работи.
Какви са някои други добри аргументи да се опита, да се уверите, това работи?
Някой?
>> Публика: 0.
>> SPEAKER: 0 и?
>> ПУБЛИКАТА: Negative 3.
>> SPEAKER: Тя работи.
Но тези, които са добър избор.
ОК, така че нека се върнем тук.
Това е mysum.c.
Ще забележите, че има и нещо наречен sumfunction.c.
И това казва, о, има нещо, определени в sumfunction.c.
Аз не включват този файл тук защото не е нужно да.
Но аз го свържете в, когато се съберат, което сте забелязали.
>> Нека да се придвижите нагоре.
Видяхме, когато ние компилиран mysum, нали там, ние свързани в двоичен от
sumfunction.o.
И аз не се нуждаят от заглавния файл защото, разбира се, там е
декларация функция.
Така рязко включва обикновено само поставя в декларация на функция.
Тук съм просто да го пуснат направо в кода.
И така, аз трябва да направите е да поставите връзка в двоичен, което аз правя.
>> Някакви предположения за това, което е в sumfunction.c?
Какво код съм написал в sumfunction.c?
>> ПУБЛИКАТА: [недоловим].
>> SPEAKER: Някакви предположения?
Да?
>> Публика: Мисля, определя някои [недоловим].
>> SPEAKER: Да.
Така че аз пиша Int сума Int а.
Пиша тази линия, а след това имам отворен къдрава скоба, затворен къдрава скоба.
Какво мислиш, че аз пиша вътре в тези фигурни скоби, вътре в тази функция?
Да?
>> ПУБЛИКАТА: Върни се равнява на.
>> Процесор: Това е наистина добро предположение.
Кой мисли, [? Manu?] Е прав?
Той казва върне плюс б.
ОК, не всички.
[? Akshar,?]
и да правите, също?
Сигурен ли си?
OK.
Какво?
>> Публика: Ти го написан грешно.
>> SPEAKER: Не, не съм.
Да, просто се шегувам.
Прав си.
Това е точно това, което казва.
Това е връщане на плюс б.
Това прави много смисъл.
>> ОК, нека се върнем тук.
Виждаме как в заглавието -
че е от типа връщане.
Не забравяйте, че сме виждали, че един ден, на тип на функцията се върне, но отива
преди името на функцията Int.
Ето, аз съм писал вътр.
Какво мислите, че ще се случи, ако в този функция, аз не пиша ПНА, но
Аз пиша грозен?
Разликата, разбира се, е, че неподписан представлява само положителни
числа, и могат да бъдат Int положителен или отрицателен.
>> Така че аз съм се променил връщането тип на тази функция.
Този код не съвпада с това завръщане напишете тук.
Какво мислиш, че ще се случи когато се съберат?
Трябва да ми крещи.
Не крещи.
>> Ами, когато стартирате програмата?
Да го направим преди 0 отрицателна 3, или отрицателен 1.
Той продължава да работи, въпреки че аз казвам, това е връщане неподписано цяло число.
Очевидно това не е връщане неподписано цяло число.
Това е връщане на подписан цяло число.
Това е връщане отрицателен 1.
Добре, това е странно.
>> Какво ще кажете, ако аз отида в тук и да направим това?
Така че аз съм се променил всичко от вътр да неподписан.
Това може да отнеме само грозен числа.
Но ние все още мисля, че ще бягаш?
>> Публика: Да.
>> SPEAKER: Това ще го направя.
Това е лудост.
И ние минаваме по ясно определен цяло число, което може да премине две подписан
число, тя продължава да работи.
>> ОК, някакви идеи за това защо тя все още работи, или това, което се случва?
Да, Джеф.
>> ПУБЛИКАТА: Той има нещо общо с оптимизацията, че
осветена.
>> SPEAKER: Не.
Ние може да се промени за оптимизиране, тя все още ще работи.
Мога да го направя за вас, но -
>> ПУБЛИКАТА: Ще взема думата си за него.
>> SPEAKER: Да.
Ако отворите Makefile точно тук, Промених оптимизацията.
Така че можете да направите пробив на нула, нула.
Тя ще продължи да работи.
Други мисли?
>> Вие, момчета, всички се очаква да работят, така че защо се очаква тя да работи?
Не?
Silence.
OK.
Трябва да чакам седем секунди, защото аз зададох въпрос.
>> Така че готино нещо за C, и сте вероятно изпитвали досега - вие
не може да има, това би могло да е за първи път.
Но както всички знаете, когато пиша нещо в C, това не спасява като
този на компютъра.
Той е записан като нули и единици.
Той отива от C код за сглобяване код.
>> Някой да е виждал монтаж код и преди, се е машинен код, монтаж?
Ние ще разгледаме в секунда.
Той отива от C код за сглобяване код.
И вие знаете етапите на компилация.
Трябвало е да запомните, че за една викторина, и след това да го напишат на викторина нула.
Повечето хора са се объркали.
Мисля, че вие ​​го прикован.
>> Но, вие сте най-добрият раздела за викторини, между другото.
Което е страхотно.
Той няма да те нарани.
Не се притеснявам.
Но това е наистина страхотно.
Добра работа.
>> Така той отива на асемблер, и След това той отива нули и единици.
И тези, и нулите са записани на компютър, и това е, което записва в
на a.out, или в този случай, изпълнимия файл.
И компютърът работи нули и единици.
Нали така?
Научихме това преди.
>> Така готино нещо е, че този грозен идея, идеята за типа Ф И грозен,
и така нататък, и така нататък, това е тук в езика C.
Тези, които съществуват.
Но видове не съществуват от нули и единици.
Видове дори не наистина съществуват нивото на асемблер.
Така че това е нещо, което съществува в C свят, но не съществува в компютъра
свят или процесор свят.
Това е някаква абстракция, че C език е включена, за да направим нашата
живее лесно.
>> Така че в края на деня, не мога да пиша много и различни неща тук, и го
не прави разлика.
Тъй, че съществува само в света на C.
Тя не съществува в нули и единици свят.
И нашата програма за изпълнение в тези и нули света.
Така че все още не е ясно изгорял ума си.
Но аз мисля, че е готино.
Да, Джеф.
>> ПУБЛИКАТА: Така че, ако вместо прави Int, нали Чар.
И ти беше -
>> SPEAKER: Да го направим в сек.
>> ПУБЛИКАТА: Защото тогава вие получавате грозен става от 128 до отрицателен
127 или от 0 до 255.
>> SPEAKER: Така че Чар е проблематично.
Някой знае ли защо Чар ще бъде проблематично, и би действително
промени нещата в тези и нулира свят?
>> ПУБЛИКАТА: Поради размера на Чар.
>> SPEAKER: Размер на Чар е 1.
Така неподписан е 4 байта.
Така Чар ще прецакаш нещата.
Но това, което е 4 байта това е свързани с пепел?
Или, което добавя една допълнителна -
можете да сложите по един символ след Чар.
>> ПУБЛИКАТА: Char звезда.
>> SPEAKER: Char звезда има четири байта.
Така че нека да направим нещо това е знак звезда.
>> Така че това вероятно ще работи, но ние сме ще направя нещо, дори
луд от това.
По мое мнение, по-луд.
>> Сега съм написал една функция, която връща указател и отнема
показалеца и неподписан стойност - ние ще промените това обратно към INT, така че ние не сме
като твърде много промени наведнъж.
И това е един набор нарича, индекси в масива и връща
адрес.
Виждали сме тези оператори преди.
Това, което мислиш, че това ще да се направи, в замяна, когато го пуснете?
Какво мислиш, че ще направя?
Някакви предположения?
>> ПУБЛИКАТА: Segfault.
>> SPEAKER: Какво?
Segfault?
Това е добро предположение.
Том казва едно и също нещо.
Всякакви други предположения?
>> Кой си мисли, че това ще направи същото нещо?
Кой си мисли, че ще ходи да segfault?
Той прави същото нещо.
Извинете.
>> Но, разбира се, ще се постави в едно и две.
И тези, които са едновременно валидни, нали?
Нека да видим, можем да отидем към второ място на масив.
Но какво, ако ние направихме б отрицателно число?
Това е вероятно по-добро предположение за нещо segfaulting.
Той все още работи.
>> OK, това сега е лудост.
Това е функция на еднакво валидна сума.
Това прави същото нещо точно като завръщане а и б.
Някой може ли да обясни защо това е добра обобщим функция, или защо това работи?
Какво се случва тук?
Защо това се направи точно същото нещо като нашата функция старата сума?
[? Akshar,?]
какво става?
>> ПУБЛИКАТА: Защото, когато имате А това е един адрес, за да
паметта местоположение -
И когато това стане амперсанд, тя отива на този адрес памет.
И когато отидеш да б, ти си вид движещи се стъпки от този адрес от паметта,
вие връщате това.
Значи вие сте всъщност, в действителност, добавяне на и б [недоловим].
Къде са стандартни операции на тази замяна?
Подобно, къде скобите паднат?
Е завръщането на адреса на а преди или след [недоловим]?
>> SPEAKER: Ще индекс в б -
или индекс в - и тогава върне адрес.
ОК, така че е всеки да разбере какво [? Akshar?]
каза, и обясни, защо това работи?
Не го направих, за първи път някой обясни това с мен.
Бихте ли някой като картина да се обясни това?
Отиваме да се направи снимка, с не маркери, това е страхотно.
Намерени някои.
>> Така че ние имаме масив, който е серия кутии.
Първият е индекс 0, индекс 1, 2, 3, 4, точка, точка, точка.
Типичен масив.
И в допълнение към които имат индекси, всички те имат памет адреси.
Така че нека да даде този адрес памет 13, 14, 15, 16, 17, и така нататък.
Всички са тук досега.
>> Така че е адрес.
Името на масив, показалка се записва там.
Това е показалеца, това е място в паметта, началото на масива.
Така че, ако това беше масива, а ще бъде на стойност 13.
И, разбира се, ние можем да дадем на всяка стойност, което искаме.
Char звезда, ние можем да дадем на всеки памет адрес, което искаме.
Ние можем да го даде 0, можем да го даде отрицателна 1 - отрицателен 1 не съществува,
, така че е вероятно проблематично, но си видял, че тя все още работи.
Така че ние можем да дадем на всяко число, което искаме, всеки адрес на паметта, което искаме.
>> Тогава, вътр б казва, OK, отидете на този номер на стъпки в масива.
Така че, ако б е равно на 2, и се равнява на 13, ние сме на адрес памет 13.
И да отидем две стъпки в, и затова сме тук.
И амперсант означава връщане адреса на това място.
И адреса е, разбира се, 15.
Така получаваме 13 плюс 2, или плюс б, който е с 15.
>> Въпросът е, че -
Съжалявам.
Ли това, че се изяснят нещата защо това работи?
>> ПУБЛИКАТА: Защо ще работи ще -
така че можете да имате масив и отидете на отрицателен индекс?
>> SPEAKER: Точно така.
Така че ние направихме отрицателни числа, Така че това е -
това прави смисъл обаче, първо, [? Ави,?]
за вас?
>> Публика: Да, аз съм просто [Недоловим], но -
>> SPEAKER: Да, това ще върне 15.
Ако е 13, и б е 2, това ще се върне 15.
>> ПУБЛИКАТА: Така нула индексирането не се превърне в проблем, нали?
Тъй като сте се движат от 0.
>> SPEAKER: Точно така.
Значи да се движи - така че, ако б е 0, вие не бихте се движат навсякъде.
А ти току-що се върна на адрес -
ако б беше 0, това е по същество връщане на този адрес на.
Минавайки през Чар звезда и връщане на адрес на е просто връща,
по същество.
>> ОК, въпросът е защо отрицателни числа работят?
И това е наистина готино нещо за това, тъй като това трябва segfault.
И би segfault ако ние Направих нещо подобно.
Да речем, вътр.
Така че този код изглежда идентичен и трябва да се държат по същия начин.
По същество, х е променлива за боклук, и така че това трябва да се държат по същия начин.
>> Нека да направим това -
Опа -
в звезда.
ОК, ние сме вече получават грешки, тук, защото тя вече няма да се сърди
при мен, защото вече знае какво идва.
По-специално, вторият.
Адрес на чипове памет, свързана с локална променлива.
>> По същество, аз не отивам да съставят това, и след това аз ще направя, за да отмените
това, което току-що направих.
Но тъй като ние никога не сме всъщност достъп до това, което е в паметта
място, това няма да segfault.
Ние никога не сме всъщност търсите в това, което е Във второто поле или това, което е във всяка кутия
на този масив.
Ние сме само казвам, тук е адресът на нещо, което търсим и
върнете този адрес.
Ние никога не сме действително навлиза в масив да погледнем на това място.
И тъй като ние никога не докосвайте паметта, ние не се получи в беда.
Ние не се получи segfault.
>> Ако ние се опитахме да, отново, докоснете, че памет, докоснете какъв е А или Б -
или скоба б, и ако приемем, а е 0 и -
ако е 0, дори, че ще бъде доста лошо, защото ние не можем да отидем
надолу по целия път там.
Ако А и В се както 0, и ние се опитахме да докосвайте какво беше там, тогава ние ще
получите в беда.
Но ако ние не пипай това, което е там, ние просто се върнете на адреса, той е
всъщност няма да segfault защото тя ви позволява да извършвате тези операции.
Той получава само ядосана, и получава супер ядосан, когато се опитате и докоснете
действителната памет и връщане, което е на това място на паметта.
>> Това прави ли смисъл?
Това е просто една луда част от C. Така че, имаме едно повече от тях.
>> Кой мисли, че това е готино?
Повече хора.
Това е добре.
ОК, това е последният ни един.
И бих искал да ми кажете дали или не мислите, че това се случва
да направи същото нещо точно.
>> Имам тези написано някъде.
Аз не съм ги запомнят.
>> Да видим, 8, б 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4.
Така че това е един масив, сега, не е функция.
И това е един масив, защото имаме квадрат скоби, не фигурни скоби.
И това е масив от какъв вид?
Всеки, хмм?
>> ПУБЛИКАТА: Техните шестнадесетични числа?
>> SPEAKER: Но това, което е от типа C?
Те всички имат шестнадесетични числа.
Какъв е типът C?
Той ви казва.
>> ПУБЛИКАТА: Това е грозен символа.
>> SPEAKER: Право, неподписани символа.
И две шестнадесетични числа е един байт.
Това са 1, 2, 3, 4, 5, 6, 7, 8, 9 байта.
Това е набор от 9 байта.
>> ОК, най-вероятно вече знаете, Отговорът на този въпрос.
Но, това, което мислите, че ще се случи, когато аз тичам това?
Аз казвам, отново, в mysum.c, Чакам функция
че отнема две числа.
И аз казвам, че вместо сума е набор от символи.
Какво ще се случи, когато Аз тичам. / Mysum и направи?
>> Ами, на първо място, повечето от вас вероятно ще съгласявате, че грим - О, не, просто се шегувам.
Какво съм направил погрешно?
Uh о.
Това трябва да бъде фигурни скоби.
Това е начина, по който се инициализира масив.
Моя грешка.
>> Така че ние вече видяхме преди, че видовете са абстракция на C-ниво, а не
компютърно ниво абстракция.
Така че повечето от вас вероятно го очаква да правят, или се предполага, че тя ще направи.
Но това, когато аз тичам. / Mysum?
Какво ще се случи?
Някакви предположения?
>> ПУБЛИКАТА: Това ще разпечатате дума.
>> SPEAKER: Това ще разпечатате дума.
Каква дума?
>> ПУБЛИКАТА: [недоловим].
>> SPEAKER: Всякакви други предположения?
OK, разпечатате една фраза.
Вие може да има всяка фраза.
Това ще бъде вашата страна.
Всеки, който има различно предположение?
Анна, какво е вашето предположение?
>> ПУБЛИКАТА: Ще разпечатате -
две букви, или [недоловим] едно писмо.
>> SPEAKER: Един писмо.
>> ПУБЛИКАТА: Мога ли да разчитам как много [недоловим]?
>> SPEAKER: Nine.
Е, аз отивам да го стартирате.
Той прави същото нещо точно.
Тя добавя две числа заедно.
Е, нека да мине на два аргумента.
Тя не взема аргументи.
Така че аз не знам къде би могло вероятно да получите тези аргументи.
Но нека да мине на 100 и 0.
И той добавя 100 и 0.
Това е лудост.
Мисля, че да.
>> Отрицателна 4, който работи също.
Можете да направите всичко, което искате.
Това е функция за еднакво валидни сума.
Това е функция сума.
Но, не, ти казваш, че е масив от байтове.
Така че това, което се случва тук?
>> Така че, отново, нека се върнем към тази идея че ние казахме в самото начало.
Отиваш от код C-ниво, за сглобяване език, на нули и единици.
Това е в шестнадесетичен вид.
Но това е наистина само Много от единици и нули.
Това е 72 единици и нули, нали?
72 нули и единици.
9 байта.
Всеки байт има 8 бита.
Всеки бит е един или нула.
Така 72 такива или нули.
Току-що ги написана като този - вместо да го пишете като много
нули и единици.
>> Но това ще се премине от C-ниво език, за сглобяване
език, за код.
И това ще се отпечата в код, Някъде тези 72 нули и единици
че аз съм писал тук.
Така някъде в това -
нека да отидете тук -
някъде в mysum, програмата има са тези 72 нули и единици, които съм
писмен и тя каза да пиша.
>> Сега, някакви предположения за това, което тези 72 нули и единици означават?
>> ПУБЛИКАТА: Вероятно същото нещо като върне плюс б.
>> SPEAKER: Вероятно същото нещо като върне плюс б.
Нека да се провери това.
Нека да разбера как съм направил това.
>> Така че, ако се върнем тук, казвам ви да стартирате тази команда, objdump-S
sumfunction.o.
Да отидем да го стартирате. objdump -
Об, самосвали.
По принцип тя може да ми даде каквото и да искате да видите.
Той може да ми даде на асемблер.
Той може да ми даде на нули и единици.
Той има един тон на знамена.
Това е едно отиваме да се използва за сега.
Dot -
както виждате в слайдовете -
тире капитал S казва, разнообразявам, изходния код -
тази линия е от C - с монтажа код и с нули и единици.
И ние отиваме да тече то на sumfunction.o.
Тъй като това ще бъде по-лесно да се види.
Отново - хмм?
>> Публика: Ти го написан грешно.
>> SPEAKER: Но аз всъщност ще да се изчисти за секунда.
Аз съм първият ще се отвори просто sumfuntion.o.
>> Публика: Ти го лимец първия път греши.
>> SPEAKER: Classic.
Sum -
че е трудно дума, все пак.
Вие ще бъдете изненадани.
ОК, така че това е sumfunction.o.
Не можех дори да ви кажа.
Има много нули, много ясно нули, а има и някои други
неща, които не е нули.
Но най-вече нули.
Изглежда сякаш има определени такива.
Затова е ясно, че това е трудно да се чете.
Това е двоичен език.
>> Нека сега да го отворите -
какво?
Какво съм аз греша?
Казах го кажа правилно?
ОК, това е неловко.
Аз се нуждаят от една секунда, за да разбера какво правя аз съм наред.
Това е една грешка.
Това е странно.
О, ето защо.
>> Отивам да се върнем към нашата първоначална един, за да можем да погледнем в
обектен код за това.
Защото там не е наистина ще да бъде нещо, когато ние просто сложи
единици и нули инча
Ето.
ОК, така че всеки може да види това.
Тази функция, както казах, изнеса линиите C -
изходен код линии -
с някои инструкции за монтаж.
>> Тук е нашият източник ред код.
Ето едно, тук е друг.
Тук е монтаж инструкция.
Това е, което изглеждат.
Инструкция за монтаж -
можете да научите повече от тях, ако приемате други класове CS, но те са
обикновено инструкция.
И тогава източник и дестинация.
>> И след това тук е двоичен код , което съответства монтаж
инструкция.
Така че, както виждате, тази функция сума, в края на деня, е три
инструкции за монтаж.
Само три.
Един MOV -
това m-о-о щандове за Move.
Добави щандове за Add.
И г-д-т щандове за връщане.
Така че един MOV, една добавка, едно завръщане.
И това, тук, са нулите и тези, които отговарят на този код.
>> Така че тези нули и единици, ако сте знам тези, можете просто да поставите
тези права инча
И след това ще свърши точно същата нещо.
Тъй като в края на деня, всички сте изпълняващата е една дълга поредица от
нули и единици.
И това е, което наистина е вашият код.
>> И причината -
нека погледнем в едно нещо.
Да имам отворена Makefile?
Така че, ако ние се върна непокрит нула, нула до тук -
Съжалявам, о капитал, капитал о нула, не е нула, нула.
И ние го направи, това би все още работят на един и същ.
Но сега можете да забележите, че има много повече инструкции за монтаж.
Това е така, защото, отново, аз попитах Компилаторът не да се направи някаква оптимизация.
>> Така че аз все още може да вземе всички от тях нули и единици, и да ги хвърлят в,
и че ще работи.
Току-що е оптимизациите, защото това е малко по-лесно, а след това,
да пиша този масив.
Но това ще работи също толкова добре.
>> ОК, ние ще направим едно последно нещо, защото мисля, че е най-яката част.
Въпреки, че всеки е ясно вече изгорял и безмълвен.
Нашите умове са взривени.
[Недоловим]
>> Така, те са от различен клас CS, което е супер интересно,
че взех -
CS61.
Аз силно ви препоръчваме да го вземе.
Но хладната част за този факт, че неща са само нули и единици,
са, че всичко е нули и единици.
>> Така че можете да вземете един файл, който има правилни нули и единици, които искате
някъде в нея, и да използват тази част от нули и единици като функция сума.
>> Какво искам да кажа с това?
Искам да кажа, можете да вземете един графичен файл, който има правилна серия нули и
такива, които печатат нещо навън към изображение.
И една програма може да интерпретира е изображение, но можете да го тълкува, ако
искате, като функция сума.
>> Така че, ако искаме да се отвори, за Например, този образ.
Да вървим, Hello Kitty.
Wonderful малко изображение.
В тук там е, че низ от нули и единици.
Тези 72 нули и единици съществуват в този образ.
>> Така че, това, което мога да направя, след това, е да напишете -
Трябва да си спомня къде са те.
Ще откриете, че в секунда.
Но ние правим -
позволете ми да разбера къде са те.
Един сек.
Нека да направим -
>> ПУБЛИКАТА: [недоловим].
>> SPEAKER: Благодаря.
Така че, ако ние се изпълни тази програма, която вместо да чете във файл, след това тя отива
този показател във файла.
И тогава, отново, точно като mysum, отнема две числа.
Ние можем да добавите номера точно същите, както правехме преди, което отива да
ви покажа как от факта, че в края на деня, всички тези неща са
нули и единици.
И това е само как избирате да ги тълкува.
>> И ако действително изглежда в този образ -
нека да увеличите малко.
Всеки ли може да го види?
Ще забележите, че точно тук, има някои странно петно.
Да вървим - това е оригиналното изображение.
Ще забележите, че тук, че няма петно.
Това е кодът за функцията на сума, е, че малко петно ​​точно там.
>> И всъщност, отново, ако се научите повече за това, вие ще разберете, че това
Hello Kitty, който има дори по-голяма размазване, има код, който може да поеме
компютър, ако той не е защитен подходящо.
Така че всъщност можете да стартирате тази.
Аз няма да го изпълните точно сега.
Но вие можете да стартирате тази Hello Kitty изображение, и тя може да
поеме вашия компютър.
>> Така че това е всичко, за демото.
Дали някой има някакви въпроси, коментари, притеснения?
Мисля, че тези неща е очарователно.
Това ме вдъхнови да научите повече.
Аз силно препоръчвам, ако сте заинтересувани изобщо на CS, говори с мен.
Въпреки, че аз съм по обществени науки Концентратор, аз съм CS, средно, така че
Аз все още се знае малко.
Но аз със сигурност знам какво класове трябва да вземете.
Мисля, че всичко това е много интересно, и аз ви насърчавам, разбира се, да
научите повече, ако сте заинтересувани.
>> ОК, аз имам едно последно нещо.
Извинете.
Някакви въпроси?
Аз не спрете да се изчака, ако някой имали някакви въпроси относно това.
>> Има ли някой щеше да бъде на CS концентратор?
Или да мисля за него?
Едно, две, три, четири.
One - само един.
Анна е единствената страна, която е повдигнат авторитетно.
ОК, това е готино.
Асам, какво смяташ да правиш?
>> ПУБЛИКАТА: [недоловим].
>> SPEAKER: Константин?
>> ПУБЛИКАТА: Physics.
>> SPEAKER: Уау, това беше бързо.
Вие имали лош опит в CS50?
[Недоловим], какво смяташ да правиш?
>> ПУБЛИКАТА: Нямам представа.
>> SPEAKER: Кърт?
>> ПУБЛИКАТА: Econ или CS.
>> SPEAKER: Econ или CS.
Том?
>> ПУБЛИКАТА: Правя Stat.
>> SPEAKER: Stat?
OK.
Какво си ти?
>> ПУБЛИКАТА: Me?
>> SPEAKER: Да.
>> ПУБЛИКАТА: Stat.
>> SPEAKER: Stat.
О, там ще отида.
Том, говорете с Алдън.
Емили, какво си ти?
>> ПУБЛИКАТА: Biomedical -
>> SPEAKER: Вие сте в този раздел?
>> Публиката: Не.
>> SPEAKER: OK, това е Емили.
Тя ми е приятелка.
Ясно е, че не е добре за един приятел, защото тя ми дава по-трудно време.
Можеш да бъдеш мил към мен пред на всички, мой ученик -
>> ПУБЛИКАТА: Правя си Q ръководство.
>> SPEAKER: Наистина ли?
Uh о.
ОК, ти си невероятна.
Обичам те толкова много.
О, момче.
>> Както и да е, аз снощи, като всичко -
Сигурен съм, че всеки изглежда наистина подчерта, точно сега.
Аз не знам, са първокурсник - са вие момчета се чувстват стресирани?
Аз се чувствам стресиран.
Тя беше като се прибера вкъщи за Деня на благодарността.
Ти си като, аз отивам да направи всички тези неща.
>> ПУБЛИКАТА: Това е толкова различно.
>> SPEAKER: Да, и да се върнеш.
Jeff, не се чувствам по този начин?
>> ПУБЛИКАТА: Аз просто мислех, че Бих направил малко.
>> SPEAKER: Добре, чудесно.
Така че аз се върна, и аз не съм направил нищо.
И всичко това е супер стресиращо.
И аз съм загрижен, искрено загрижени, за това дали или не съм
Ще довърша всичко, което трябва.
Но миналата нощ, не беше подчертано, Просто бях малко тъжен.
Така че съм написал в дневника си за това, което аз бях тъжен.
И аз бях тъжен за този раздел в този клас към своя край.
>> Така че аз просто ще прочетете за вас, момчета малко откъс от дневника си,
от снощи.
Мога ли да получа някои салфетки, някои тъкани от Том?
Не, аз ще се разплача.
Аз не плача.
Не, че не мога да плача, Аз просто не плачи.
Аз дори не знам дали ми сълза жлези работили - слъзните канали.
Аз не съм извикал по-дълго време.
>> ПУБЛИКАТА: [недоловим].
>> SPEAKER: Добре, благодаря.
OK, там е малко предисловие -
Има някои други части на дневника си влизане, защото се опитвам да журнал всеки
нощ преди да стигна до леглото.
Аз силно препоръчвам журнал.
Тя ви помага да обработим нещата, а също и бъде много благодарна за вашия ден.
И това го прави много по-лесно да се търси обратно на деня си и да осъзнаем, че
имаше много добра неща, които се случиха.
Дори ако се чувствате наистина подчерта, през нощта или наистина разстроен, или
наистина тъжна или уморена.
>> О, Боже мой.
Аз дори не знам дали това е записано, че добре, защото аз не го проверят.
Но ние ще го прочете.
Аз обикновено не четат моята списание, очевидно.
>> "Утре, аз ще науча последната ми CS50 раздел на годината.
Това е лудост, как лети бързо време.
И все пак, аз съм поразен от това колко различен ми опит в преподаването тази година беше
отколкото когато бях второкурсник.
Като за начало, аз определено знам материала по-добре.
Но не казвайте на моята първа кохорта на студентите, че.
По-важното, обаче, разбрах, че радостта, която идва от Постоянния
в предната част на стаята на това, което започва като непознати, но завършва като в
малко, Facebook приятели, е не е първа година случайност.
Вместо това, тя е от знаейки, че в някакъв малък начин, вие помагате
талантлив, внимателен, възхитителен, и страстни хора да научат малко повече
за компютърни науки.
>> Ти изместване че крушка просто малко в гнездото си, така че тя да е в състояние
да свети по-ярко, отколкото си, или те, могли да си представим в семестър старт.
Вие помагате превърне тези мръщи с главата надолу и да задават въпроси, които
осигуряване на подкрепа, но все пак позволи студентите да се явят на техните собствени.
>> Това със сигурност не е преувеличено да се се каже, че този раздел е любимата ми
част от седмицата.
Или дори, че съм се колебайте да се каже, че е всички, в 17:30 всяка седмица, знаейки
че това ще бъде твърде дълго докато не се срещнем отново.
>> И все пак, аз съм изключително благодарен на всеки, който ми даде тази
възможност да върне на другите.
За David, за неговата търпение и доверие.
За филмовата продукция и екипажа, за ме кара да изглежда малко по-уважаван.
И най-важното, на моите ученици, без когото щях да имам никаква причина да се
прекарат десет часа фигуриращ най-доброто начин да се привлече указатели, или да изложи на
маса на делфини, чрез JavaScript.
Както винаги, това е било благословия. "
>> Така че с това, благодаря ви момчета.
Ще се видим всички на панаира CS50, и на Hackathon, ако си там.
И ако имате някакви въпроси, аз ще се придържаме наоколо, докато там няма.
Но аз ви благодаря момчета за прекрасна година.
>> [APPLAUSE]
>> SPEAKER: Мога да плача.