SPEAKER: OK, jadi, Anda akan tidak percaya, tapi minggu lalu, Senin, di Pierce, saya turun di ruang bawah tanah. Aku tidak pernah pergi ke Pierce. Dan aku tak akan kembali lagi, karena Aku meninggalkan barang-barang saya sendiri untuk, seperti, lima menit dan seseorang mencuri komputer dan saya saya telepon dari ranselku. Yang berarti aku mendapatkannya kembali, dan maka kurang dari seminggu kemudian itu bisa dicuri lagi. Dan kemudian itu bisa dihidupkan - Find My iPhone terus untuk membantu. Jadi saya terus mendorong Anda tidak menggunakannya. Ternyata pada sekali, dan itu di MIT, seperti 15 menit kemudian, dan orang disebut nomor telepon ini yang menunjukkan di saya AT & T log panggilan. Jadi aku pergi online, disebut bahwa ponsel nomor, dan langsung pergi ke ini mesin penjawab di Spanyol. Dan saya belum pernah mendengar tentang hal itu sejak. Jadi saya harus mendapatkan baru komputer dan telepon. Aku tahu. Ya. Tapi jika kalian ingin chip untuk saya Dana komputer setelah ini, itu sebabnya Aku sudah meminta Anda di sini. Just kidding. Tapi itu benar-benar sedih dan trauma. Tapi itu semua kembali sekarang, dan itu sebabnya p-set 8 membutuhkan waktu sangat lama, karena Aku tidak punya komputer. Dan seseorang mencurinya. Dan aku email, menanyakan apakah mereka akan kelas p-set 8 Anda. Tapi mereka mengatakan tidak. Dan aku seperti, aku bisa komputer saya kembali? Dan mereka seperti, no. Just kidding. OK. Ini adalah bagian akhir kami, dan saya memiliki beberapa - kita hanya memiliki tiga hal dalam agenda. Kita akan berbicara sedikit tentang panduan Q. Kemudian kita akan menghabiskan 15 menit pada demo keren. Kemudian kita akan semua mengatakan selamat tinggal satu sama lain. Anda tidak benar-benar membutuhkan komputer Anda atau pena atau kertas untuk membuat catatan, atau ikuti bersama. Jadi saya berasumsi jika Anda memiliki komputer Anda up, maka Anda berada di Facebook. Hanya mengatakan. Kecuali Anda mengisi Q panduan, yang pertama. The Q panduan terbuka. Anda telah memiliki email tentang hal itu. Setelah semua hal Q diajukan di akhir tahun, saya mendapatkan semua Q komentar dalam skor dari semua orang yang memilih untuk memberikan umpan balik. Dan ketika Anda pergi di Q - Saya tidak tahu apakah Anda bisa melakukan hal ini, Jeff, karena kau dan mahasiswa ekstensi. Tapi ketika Anda pergi di Q, jika Anda belum melakukannya sebelumnya, Anda memilih Anda guru, yaitu David Malan. Anda harus melakukan dia. Dan kemudian Anda dapat memilih TF. Dan Anda dapat memilih sebanyak TF yang Anda inginkan. Tapi ada 60 dari kita. Anda tidak harus memilih orang. Anda hanya bisa memilih saya, atau hanya memilih beberapa orang lain, jika Anda ingin, untuk memberikan umpan balik juga. Dan kemudian Anda mendapatkan skor pada semua ini sumbu yang berbeda, dan kemudian Anda dapat meninggalkan mereka umpan balik. Dan kemudian, seperti sebulan kemudian, Aku akan mendapatkan semua umpan balik itu. Dan seperti umpan balik Anda sudah memberi saya sepanjang semester, saya membaca semua itu. Dan itu benar-benar membantu, dan membantu saya tumbuh sebagai seorang guru dan sebagai individual. Jadi, tolong, luangkan waktu untuk melakukannya. Kami hanya akan berada di sini untuk, seperti, 30 menit. Jadi jika Anda ingin, pada akhir ini, untuk mengambil lima menit, dan cukup mengisi Q, karena tidak mengambil setiap waktu lebih dari itu. Itu akan sangat menyenangkan, dan Anda juga mendapatkan nilai Anda kembali lebih cepat jika Anda mengisi Q. tersebut Jadi sebagian besar dari Anda telah melakukan itu sebelumnya - atau tidak, sekitar setengah dari Anda telah melakukan itu sebelumnya. Tapi jika Anda mahasiswa baru, itulah apa itu. Ini akan sama untuk semua kelas. Lakukan. Dibutuhkan lima menit. Tapi juga, jika Anda melakukannya dengan sedikit serius, itu bukan hal terburuk di dunia, karena aku pasti menganggapnya serius. Jadi jika kau tinggalkan aku wajah tersenyum, Saya akan menghargai itu. Tapi saya juga akan menghargai jika Anda meninggalkan saya lebih dari wajah tersenyum. Tapi itu terserah Anda. Saya tidak bisa memberitahu Anda - atau seperti smiley besar wajah, dengan modal D. Itu akan menjadi lebih baik. OK, hanya itu yang saya miliki untuk Q. Jika Anda memiliki pertanyaan, Anda dapat meminta saya, tapi cukup jelas. Hanya, silahkan, mengisinya. Saya akan sangat menghargai itu, dan itu berarti banyak bagi saya. OK, ini adalah apa yang kita akan menghabiskan 15 menit melalui. Aku akan menunjukkan kepada Anda beberapa kode. Saya pikir ini benar-benar keren, dan ini membuat saya lebih bersemangat dalam ilmu komputer. Jadi saya berharap ini akan melakukan sama untuk Anda semua. Kita akan membuka - dan semua ini kode saya akan mengirimkan kepada Anda nanti. Tapi kami hanya akan membuka - Aku di terminal saya - kita akan membuka program ini disebut [? MySum. ?] Dapatkah semua orang membaca itu, atau Aku harus membuatnya lebih besar? Ada yang bisa memberitahu saya apa kode ini akan lakukan ketika saya menjalankannya, atau apa ini Program akan lakukan ketika saya menjalankannya? [? Avi,?] Apa yang Anda pikirkan itu akan dilakukan? Finish mengunyah. Anda tidak harus berbicara dengan mulut Anda terbuka. AUDIENCE: Apakah itu mengambil sekelompok argumen, menemukan jumlah mereka kembali sum, dan kemudian mencetaknya? Atau dibutuhkan dalam dua argumen, dan maka tidak [Tak terdengar]. Dan kemudian ia akan mencetak apapun hasilnya. SPEAKER: Tutup, benar-benar dekat. Ada yang ingin Anda tambahkan ke [? apa Avi?] mengatakan? Apakah Anda perlu memberikan program ini argumen command-line? AUDIENCE: No SPEAKER: No Apa yang terjadi jika Anda tidak memberikan argumen command-line? Saya hanya menulis dot slash MySum. AUDIENCE: 1 ditambah 2 sama dengan 3. SPEAKER: 1 ditambah 2 sama dengan 3. Dan itu akan mencetak yang keluar. Itu tepat sekali. Anda akan melihat bahwa print f line di bagian bawah. Ini akan mencetak a, b, dan maka jumlah a dan b. Dan saya kira Anda menganggap bahwa sum bekerja dengan benar. Asumsi yang baik. OK, dan apa yang terjadi jika saya memberikan argumen apa? [? Manu? ?] AUDIENCE: Ini akan menambahkan apa pun argumen pertama adalah b. Atau 2, maaf. SPEAKER: Benar, 2. Apakah ada yang tahu apa yang strtol tidak? Ini pada dasarnya atoi. Atoi sebenarnya merupakan versi mewah - atau versi yang lebih sederhana dari strtol. Tapi itu benar-benar menggunakan strtol. Dan saya menemukan bahwa keluar karena saya ingin sesuatu seperti atoi, dan kemudian ketika saya tidak atoi, saya baca di sini. Dan aku menemukan "perilaku ini adalah sama dengan "strtol. Jadi pada dasarnya atoi untuk semua maksud dan tujuan. Dan Anda lihat saya bahkan menggunakan nol dan 10. Ini benar-benar memungkinkan Anda mengambil string, dan mengubahnya menjadi nomor, dan pilih apa dasar yang ingin Anda lakukan masuk Jadi ini adalah basis 10 di sini. Aku bisa melakukan dua basis untuk desimal, basis 16 untuk heksadesimal. Ini cukup keren. Tapi cerita panjang pendek, ini memakan waktu dua angka dan menambahkan mereka bersama-sama. Jadi mari kita menjalankannya. Dan Anda juga akan melihat, ada beberapa hal - jadi saya memiliki makefile di sini, dan jika Anda membuka bahwa sampai, beberapa hal Anda akan melihat berbeda. Secara khusus, argumen ini di sini, Anda mungkin belum melihat itu sebelumnya. Umumnya, kami menyusun hal-hal dengan dasbor nol, nol. Dash nol, nol, berarti tidak melakukan optimasi, compiler. Jangan mencoba dan membuat sesuatu yang mewah, atau membuat sesuatu berjalan lebih cepat, atau mendapatkan menyingkirkan variabel yang diperlukan. Jangan mengoptimalkan kode ini sama sekali, Aku meminta-tingkat ketiga optimasi. Jadi aku meminta compiler untuk melakukan banyak optimasi. Anda dapat mengubah bahwa dalam makefile ketika Anda memiliki kode ini, jika Anda ingin untuk melihat hal-hal yang berbeda. Yang kami akan menunjukkan dalam satu detik. Jadi kita menjalankan sum saya 1 ditambah 2 ditambah 3. Seseorang memberi saya dua argumen. AUDIENCE: 4 dan 5. SPEAKER: 4 dan 5. Terima kasih. Besar, ia bekerja. Apa beberapa argumen yang baik lainnya untuk mencoba, untuk memastikan hal ini bekerja? Siapa saja? AUDIENCE: 0. SPEAKER: 0 dan? AUDIENCE: Negatif 3. SPEAKER: Ia bekerja. Tetapi mereka adalah pilihan yang baik. OK, jadi mari kita kembali ke sini. Ini adalah mysum.c. Anda akan melihat ada juga sesuatu disebut sumfunction.c. Dan ini mengatakan, oh, ada sesuatu didefinisikan dalam sumfunction.c. Saya tidak menyertakan file ini di sini karena saya tidak perlu. Tapi aku link itu di ketika saya mengkompilasi, yang Anda perhatikan. Mari kita gulir ke atas. Kami melihat ketika kita dikompilasi MySum, hak di sana, kami terhubung dalam biner dari sumfunction.o. Dan aku tidak membutuhkan file header karena, tentu saja, ada deklarasi fungsi. Jadi tajam termasuk biasanya hanya menempatkan dalam deklarasi fungsi. Di sini saya baru saja menaruhnya langsung dalam kode. Dan jadi saya perlu melakukan Link dalam biner, yang saya lakukan. Setiap tebakan untuk apa yang di sumfunction.c? Apa kode saya sudah menulis di sumfunction.c? AUDIENCE: [Tak terdengar]. SPEAKER: Setiap tebakan? Ya? AUDIENCE: Saya pikir, mendefinisikan beberapa [Tak terdengar]. SPEAKER: Ya. Jadi saya menulis int sum int a. Saya menulis baris ini, dan kemudian aku harus terbuka penjepit keriting, ditutup penjepit keriting. Apa yang Anda pikir saya menulis di dalam mereka kurung kurawal, di dalam fungsi itu? Ya? AUDIENCE: Kembali sama dengan a. PROCESSOR: Itu tebakan benar-benar baik. Yang berpikir [? Manu?] Yang benar? Dikatakan kembali plus b. OK, tidak semua orang. [? Akshar,?] Anda lakukan, juga? Anda yakin? OK. Apa? AUDIENCE: Anda mengejanya salah. SPEAKER: Tidak, aku tidak. Ya, hanya bercanda. Kau benar. Itu persis apa yang dikatakannya. Ini kembali plus b. Itu membuat banyak akal. OK, mari kita kembali ke sini. Kita melihat bagaimana header - itu jenis kembali. Ingat, kita telah melihat hari itu satu, jenis fungsi kembali, tapi pergi sebelum nama fungsi int. Di sini, saya telah menulis int. Apa yang Anda pikir akan terjadi jika dalam hal ini fungsi, saya tidak menulis int, tapi Saya menulis unsigned? Bedanya, tentu saja, adalah bahwa unsigned hanya mewakili positif bilangan bulat, dan int dapat positif atau negatif. Jadi saya sudah berubah pengembalian jenis fungsi ini. Kode ini tidak cocok kembali ini disini. Apa yang Anda pikir akan terjadi ketika saya mengkompilasi? Anda harus berteriak padaku. Tidak ada teriakan. Bagaimana dengan ketika saya menjalankan program ini? Mari kita lakukan sebelum 0 negatif 3, atau negatif 1. Masih bekerja, meskipun saya katakan itu kembali integer unsigned. Jelas itu tidak kembali integer unsigned. Ini mengembalikan integer ditandatangani. Ini kembali negatif 1. OK, itu aneh. Bagaimana jika saya pergi di sini dan melakukan itu? Jadi saya sudah mengubah segalanya dari int ke unsigned. Hal ini hanya dapat mengambil unsigned integer. Tapi apakah kita masih berpikir itu akan dijalankan? AUDIENCE: Ya. SPEAKER: Ini akan. Itu gila. Dan kita lulus dalam jelas ditugaskan integer, kita dapat melewati dua ditandatangani integer, itu masih bekerja. OK, ide mengapa masih bekerja, atau apa yang terjadi? Ya, Jeff. AUDIENCE: Memiliki sesuatu untuk dilakukan dengan optimasi Anda bahwa Anda disorot. SPEAKER: No Kita bisa mengubah optimasi, masih akan bekerja. Aku bisa melakukannya untuk Anda, tetapi - AUDIENCE: Saya akan mengambil kata-kata Anda untuk itu. SPEAKER: Ya. Jika Anda membuka makefile di sini, Saya mengubah optimasi. Sehingga Anda dapat melakukan lari nol, nol. Ini akan tetap bekerja. Pikiran lain? Kalian semua diharapkan untuk bekerja, sehingga kenapa kau mengharapkan untuk bekerja? Tidak ada? Silence. OK. Saya harus menunggu tujuh detik, karena saya mengajukan pertanyaan. Jadi hal yang keren tentang C, dan Anda sudah mungkin alami sebelumnya - Anda mungkin tidak memiliki, kekuatan ini menjadi pertama kalinya. Tapi seperti yang Anda semua tahu, ketika saya menulis sesuatu di C, tidak menyimpan seperti ini pada komputer. Ini disimpan sebagai satu dan nol. It goes dari kode C ke kode assembly. Ada yang sudah melihat kode assembly sebelumnya, kode mesin assembly? Kita akan melihat dalam satu detik. It goes dari kode C ke kode assembly. Dan kalian tahu tahap kompilasi. Anda harus menghafal bahwa untuk kuis satu, dan kemudian menulis itu pada kuis nol. Kebanyakan orang punya salah. Saya pikir kalian dipaku itu. Tapi, kalian adalah bagian terbaik untuk kuis, by the way. Yang mengagumkan. Ini tidak akan menyakiti Anda. Jangan khawatir. Tapi itu benar-benar keren. Good job. Jadi pergi ke bahasa assembly, dan kemudian ia pergi ke satu dan nol. Dan satu dan nol yang disimpan pada komputer, dan itulah yang disimpan dalam a.out, atau dalam hal ini, file executable. Dan komputer berjalan satu dan nol. Benar? Kami telah belajar ini sebelumnya. Jadi hal yang keren adalah, ini unsigned ide, gagasan jenis int unsigned, et cetera, et cetera, itu di sini dalam bahasa C. Mereka ada. Tapi jenis tidak ada pada satu dan nol. Jenis bahkan tidak benar-benar ada di tingkat bahasa assembly. Jadi itu adalah sesuatu yang ada di C dunia tapi tidak ada di komputer dunia atau prosesor dunia. Itulah beberapa abstraksi bahwa C bahasa telah disertakan, untuk membuat kita hidup lebih mudah. Jadi pada akhir hari, aku bisa menulis banyak hal yang berbeda di sini, dan itu tidak membuat perbedaan. Karena itu hanya ada dalam dunia C. Itu tidak ada dalam satu dan nol dunia. Dan program kami mengeksekusi dalam satu dan nol dunia. Jadi pikiran Anda jelas tidak ditiup belum. Tapi saya pikir itu keren. Ya, Jeff. AUDIENCE: Jadi, jika bukan melakukan int, Anda melakukan arang. Dan kau - SPEAKER: Mari kita lakukan dalam detik. AUDIENCE: Karena maka Anda mendapatkan unsigned pergi dari negatif ke 128 127 atau 0 sampai 255. SPEAKER: Jadi char adalah bermasalah. Apakah ada yang tahu mengapa arang akan bermasalah, dan itu akan benar-benar mengubah hal-hal dalam yang dan membidik dunia? AUDIENCE: Karena ukuran char. SPEAKER: Ukuran char adalah 1. Jadi unsigned juga 4 byte. Jadi arang akan mengacaukan segalanya. Tapi apa adalah 4 byte yang terkait dengan char? Atau yang menambahkan satu tambahan - Anda dapat menempatkan satu karakter yang lebih setelah arang. AUDIENCE: Bintang Char. SPEAKER: Bintang Char memiliki 4 byte. Jadi mari kita lakukan sesuatu itu adalah bintang arang. Jadi ini mungkin akan bekerja, tapi kami akan melakukan sesuatu yang bahkan lebih gila dari ini. Menurut pendapat saya, gila. Sekarang saya telah menulis sebuah fungsi yang mengembalikan pointer, dan dibutuhkan pointer dan nilai unsigned - kita akan mengubah kembali ini untuk int jadi kami tidak membuat terlalu banyak perubahan sekaligus. Dan memiliki sebuah array disebut, indeks ke dalam array, dan kembali pada alamat. Kami telah melihat operator ini sebelumnya. Ini, apa yang Anda pikir ini akan yang harus dilakukan, sebagai balasannya, ketika saya menjalankannya? Apa yang Anda pikir itu akan dilakukan? Setiap tebakan? AUDIENCE: Segfault. SPEAKER: Apa? Segfault? Itu dugaan yang baik. Tom mengatakan hal yang sama. Setiap tebakan lain? Yang berpikir itu akan melakukan hal yang sama? Yang berpikir itu akan segfault? Ia melakukan hal yang sama. Maaf. Tapi, tentu saja, kita masukkan ke dalam 1 dan 2. Dan mereka berdua valid, kan? Mari kita lihat, kita bisa pergi ke Tempat kedua array. Tapi bagaimana kalau kita membuat b angka negatif? Itu mungkin menebak yang lebih baik untuk sesuatu segfault. Masih bekerja. OK, ini sekarang gila. Ini adalah fungsi sum sama valid. Ini melakukan hal yang persis sama sebagai pengembalian dan b. Ada yang bisa menjelaskan mengapa hal ini baik sebuah jumlah fungsi, atau mengapa ini bekerja? Apa yang terjadi di sini? Mengapa hal ini melakukan hal yang sama persis hal sebagai fungsi sum lama kita? [? Akshar,?] apa yang terjadi? AUDIENCE: Karena ketika Anda memiliki a itu alamat untuk memori lokasi - dan ketika Anda melakukan ampersand, itu pergi ke alamat memori. Dan ketika Anda pergi ke b, Anda jenis langkah-langkah dari alamat memori bergerak, Anda kembali itu. Jadi Anda benar-benar, pada kenyataannya, menambahkan a dan b [Tak terdengar]. Dimana operasi standar pada kembali itu? Seperti, di mana kurung jatuh? Apakah kembalinya alamat pada sebelum atau setelah [Tak terdengar]? SPEAKER: Ini akan indeks ke b - atau indeks ke - dan kemudian kembali alamat. OK, jadi tidak semua orang mengerti apa [? Akshar?] kata, dan menjelaskan, mengapa ini bekerja? Aku tidak, pertama kali seseorang menjelaskan hal ini kepada saya. Apakah ada yang seperti gambar untuk menjelaskan hal ini? Kita akan menggambar, dengan tidak ada penanda, itu bagus. Menemukan beberapa. Jadi kita memiliki sebuah array yang serangkaian kotak. Yang pertama adalah indeks 0, indeks 1, 2, 3, 4, dot, dot, dot. Sebuah array yang khas. Dan selain memiliki indeks, mereka semua memiliki alamat memori. Jadi mari kita memberikan alamat memori ini 13, 14, 15, 16, 17, dan sebagainya. Semua orang di sini sejauh ini. Jadi adalah alamat. Nama array, pointer disimpan di sana. Ini pointer, itu adalah lokasi memori, ke awal array. Jadi jika ini adalah array, akan menjadi nilai 13. Dan, tentu saja, kita dapat memberikan nilai apapun yang kita inginkan. Char membintangi, kita dapat memberikan setiap alamat memori yang kita inginkan. Kami dapat memberikan 0, kita dapat memberikan negatif 1 - 1 negatif tidak ada, sehingga mungkin bermasalah, tapi Anda melihat bahwa itu masih bekerja. Jadi kita bisa memberikan sejumlah yang kita inginkan, alamat memori apapun yang kita inginkan. Kemudian, int b berkata, OK, pergi nomor ini dari langkah ke dalam array. Jadi jika b sama dengan 2, dan sama dengan 13, kita berada di alamat memori 13. Dan kami pergi dua langkah di, dan jadi kita di sini. Dan ampersand berarti kembali alamat lokasi ini. Dan alamat adalah, tentu saja, 15. Jadi kita mendapatkan 13 ditambah 2, atau plus b, yaitu 15. Pertanyaannya adalah, meskipun - Maafkan aku. Apakah itu menjelaskan hal-hal mengapa ini bekerja? AUDIENCE: Mengapa itu akan berhasil pergi - sehingga Anda dapat memiliki sebuah array dan pergi ke indeks negatif? SPEAKER: Benar. Jadi kami melakukan angka negatif, jadi itu - apakah ini masuk akal meskipun, pertama, [? Avi,?] bagi Anda? AUDIENCE: Ya aku hanya [Tak terdengar], tapi - SPEAKER: Ya, ini akan kembali 15. Jika adalah 13, dan b adalah 2, ini akan kembali 15. AUDIENCE: Jadi nol pengindeksan tidak menjadi isu, kan? Karena Anda bergerak dari 0. SPEAKER: Benar. Jadi Anda bergerak - jadi jika b adalah 0, Anda tidak akan bergerak di mana saja. Dan Anda baru saja kembali alamat - jika b adalah 0, yang pada dasarnya kembali bahwa alamat. Melewati dalam char bintang dan mengembalikan alamat hanya mengembalikan, dasarnya. OK, pertanyaannya adalah mengapa angka negatif bekerja? Dan itu adalah hal yang benar-benar keren tentang ini, karena ini harus segfault. Dan itu akan segfault jika kita melakukan sesuatu seperti ini. Katakanlah, int. Jadi kode ini terlihat identik dan harus bersikap identik. Pada dasarnya, x adalah variabel sampah, dan jadi ini harus berperilaku identik. Mari kita membuat ini - oops - di bintang. OK, kita sudah mendapatkan kesalahan di sini, karena sudah akan marah padaku, karena sudah tahu apa yang akan terjadi. Secara khusus, yang kedua. Alamat memori ditumpuk terkait dengan variabel lokal. Pada dasarnya, saya tidak akan mengkompilasi ini, dan kemudian aku akan membatalkan lakukan apa yang baru saja kita lakukan. Tetapi karena kita tidak pernah benar-benar mengakses apa yang di memori lokasi, itu tidak akan segfault. Kami tidak pernah benar-benar melihat apa yang di kotak kedua atau apa yang ada di kotak manapun array ini. Kita hanya mengatakan, inilah alamat hal yang kita cari dan kembali alamat tersebut. Kita tidak pernah benar-benar pergi ke array untuk melihat lokasi tersebut. Dan karena kita tidak pernah menyentuh memori, kita tidak mendapat masalah. Kami tidak mendapatkan segfault. Jika kita mencoba, sekali lagi, menyentuh memori, sentuh apa yang pada a atau b - atau bracket b, dan dengan asumsi a adalah 0 dan - jika itu 0, bahkan, itu akan sangat buruk, karena kita tidak bisa pergi turun sepanjang perjalanan ke sana. Jika a dan b keduanya 0, dan kami mencoba untuk menyentuh apa yang ada di sana, maka kita akan mendapatkan dalam kesulitan. Tetapi jika kita tidak menyentuh apa yang ada, kami hanya mengembalikan alamat, itu adalah sebenarnya tidak akan segfault karena itu memungkinkan Anda melakukan operasi tersebut. Itu hanya akan marah padamu, dan mendapat super marah, ketika Anda mencoba dan menyentuh memori yang sebenarnya dan mengembalikan apa yang di lokasi memori. Apakah itu masuk akal? Itu hanya bagian gila C. Jadi, kami memiliki satu lagi dari ini. Siapa yang berpikir ini keren? Lebih banyak orang. Itu bagus. OK, ini adalah salah satu terakhir kami. Dan aku ingin kau katakan padaku apakah atau tidak Anda berpikir ini akan untuk melakukan hal yang persis sama. Saya ini tertulis di suatu tempat. Aku tidak mengingatnya. Mari kita lihat, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Jadi ini adalah sebuah array, sekarang, bukan fungsi. Dan itu sebuah array karena kita memiliki persegi kurung, kawat gigi tidak keriting. Dan itu sebuah array dari tipe apa? Siapapun, hmm? AUDIENCE: heksadesimal mereka? SPEAKER: Tapi apa jenis C? Mereka semua memiliki angka heksadesimal. Apa jenis C? Ini memberitahu Anda. AUDIENCE: Ini unsigned chars. SPEAKER: Benar, unsigned chars. Dan dua angka heksadesimal adalah salah satu byte. Jadi ini adalah 1, 2, 3, 4, 5, 6, 7, 8, 9 byte. Ini sebuah array dari 9 byte. OK, Anda mungkin sudah tahu jawaban atas pertanyaan ini. Tapi, apa yang Anda pikirkan akan terjadi ketika saya menjalankan ini? Saya katakan, sekali lagi, dalam mysum.c, Aku mengharapkan fungsi yang mengambil dua bilangan bulat. Dan aku malah mengatakan jumlah itu adalah array dari karakter. Apa yang akan terjadi bila Saya menjalankan. / MySum dan membuat? Yah, pertama, sebagian besar dari Anda mungkin akan setuju bahwa make - oh tidak, hanya bercanda. Apa yang saya lakukan salah? Uh oh. Yang harus kurung kurawal. Itulah cara Anda menginisialisasi sebuah array. Saya buruk. Jadi kita sudah melihat sebelumnya bahwa jenis adalah abstraksi C-tingkat, bukan komputer tingkat abstraksi. Jadi sebagian besar dari Anda mungkin diharapkan untuk membuat, atau dengan asumsi bahwa itu akan membuat. Tapi apa ketika saya menjalankan. / MySum? Apa yang akan terjadi? Setiap tebakan? AUDIENCE: Ini akan mencetak sebuah kata. SPEAKER: Ini akan mencetak sebuah kata. Kata Apa? AUDIENCE: [Tak terdengar]. SPEAKER: Setiap tebakan lain? OK, mencetak frase. Anda dapat memiliki frase apapun. Itu akan menjadi sisi Anda. Siapa saja yang memiliki menebak yang berbeda? Anna, apa tebakan Anda? AUDIENCE: Ini akan mencetak - dua surat, atau [Tak terdengar] satu huruf. SPEAKER: Satu surat. AUDIENCE: Dapatkah saya menghitung berapa banyak [Tak terdengar]? SPEAKER: Sembilan. Yah, aku akan menjalankannya. Itu hal yang persis sama. Ia menambahkan dua angka bersama. Nah, mari kita melewati dua argumen. Ini tidak mengambil argumen. Jadi saya tidak tahu di mana itu bisa mungkin mendapatkan argumen ini. Tapi mari kita lulus pada 100 dan 0. Dan itu menambah 100 dan 0. Itu gila. Saya kira begitu. Negatif 4, yang bekerja juga. Anda dapat melakukan apapun yang Anda inginkan. Ini adalah fungsi sum sama valid. Ini adalah fungsi penjumlahan. Tapi, tidak, kau mengatakan itu array byte. Jadi apa yang terjadi di sini? Jadi, sekali lagi, mari kita kembali ke ide ini bahwa kita mengatakan pada awal. Anda pergi dari kode C-tingkat, untuk perakitan bahasa, untuk satu dan nol. Ini adalah heksadesimal. Tapi ini benar-benar hanya banyak satu dan nol. Ini adalah 72 satu dan nol, kan? 72 satu dan nol. 9 byte. Setiap byte memiliki 8 bit. Setiap bit adalah satu atau nol. Jadi 72 orang atau nol. Saya baru saja menulis mereka seperti ini - daripada menulis keluar sebagai banyak satu dan nol. Tapi ini akan pergi dari C-level bahasa, untuk assembly bahasa, kode. Dan ini akan mencetak dalam kode, di suatu tempat, ini 72 satu dan nol yang saya tulis di sini. Jadi di suatu tempat di - mari kita pergi di sini - di suatu tempat di MySum, program, ada apakah ini 72 satu dan nol bahwa saya telah tertulis dan diberitahu untuk menulis. Sekarang, setiap tebakan untuk apa mereka 72 satu dan nol artinya? AUDIENCE: Mungkin sama hal sebagai kembali plus b. SPEAKER: Mungkin sama hal sebagai kembali plus b. Mari kita pastikan. Mari kita mencari tahu bagaimana saya melakukan ini. Jadi jika Anda pergi kembali ke sini, saya katakan untuk menjalankan perintah ini, objdump-S sumfunction.o. Mari kita menjalankannya. objdump - obj, dump. Pada dasarnya dapat memberikan apa pun yang saya ingin melihat. Hal ini dapat memberikan saya bahasa assembly. Hal ini dapat memberi saya satu dan nol. Ia memiliki ton bendera. Ini adalah salah satu kita akan digunakan untuk saat ini. Dot - seperti yang Anda lihat di slide - modal dasbor S mengatakan, Selingi, kode sumber - baris ini berasal dari C - dengan perakitan kode dan dengan satu dan nol. Dan kita akan menjalankan di sumfunction.o. Karena akan lebih mudah untuk melihat. Lagi - hmm? AUDIENCE: Anda mengejanya salah. SPEAKER: Tapi aku benar-benar akan untuk membersihkan itu untuk kedua. Saya pertama akan membuka hanya sumfuntion.o. AUDIENCE: Anda mengejanya salah pertama kalinya. SPEAKER: Classic. Sum - itu adalah kata keras, meskipun. Anda akan terkejut. OK, jadi ini adalah sumfunction.o. Aku bahkan tidak bisa memberitahu Anda. Ada banyak nol, jelas banyak dari nol, dan ada beberapa lainnya hal-hal yang tidak nol. Tapi sebagian besar nol. Sepertinya ada beberapa yang. Jadi jelas, ini sulit untuk dibaca. Itulah bahasa biner. Sekarang mari kita buka - apa? Apa yang saya lakukan salah? Apakah aku mengejanya dengan benar? OK, ini adalah aneh. Saya perlu satu detik untuk mencari apa yang saya lakukan salah. Itu salah satu kesalahan. Itu aneh. Oh, itu sebabnya. Aku akan kembali ke awal kami satu, sehingga kita dapat melihat kode obyek ini. Karena ada tidak benar-benar akan menjadi apa-apa ketika kita hanya menempatkan satu dan nol masuk Di sana kami pergi. OK, jadi semua orang bisa melihat ini. Fungsi ini, seperti yang saya katakan, mengeluarkan garis C - baris kode sumber - dengan beberapa petunjuk perakitan. Berikut ini adalah baris kode sumber kami. Berikut ini salah satu, di sini lain. Berikut adalah instruksi assembly. Itulah yang mereka terlihat seperti. Instruksi perakitan - Anda dapat mempelajari lebih dari ini jika Anda mengambil kelas CS lainnya, tapi mereka umumnya sebuah instruksi. Dan kemudian menjadi sumber dan tujuan. Dan kemudian di sini adalah kode biner yang sesuai dengan perakitan yang instruksi. Jadi seperti yang Anda lihat, fungsi jumlah ini, pada akhir hari, tiga petunjuk perakitan. Hanya tiga. Satu mov - ini m-o-v singkatan Move a. Tambahkan singkatan Add. Dan r-e-t singkatan Kembali. Jadi satu mov, satu add, satu kembali. Dan ini, di sini, adalah nol dan orang-orang yang sesuai dengan kode tersebut. Jadi mereka nol dan yang, jika Anda tahu mereka, Anda hanya dapat menempatkan mereka langsung masuk Dan kemudian akan melakukan hal yang persis sama. Karena, pada akhir hari, semua Anda mengeksekusi adalah serangkaian panjang nol dan satu. Dan itulah yang kode Anda sebenarnya. Dan alasan - mari kita lihat satu hal. Apakah saya memiliki makefile terbuka? Jadi jika kami kembali ke lari nol, nol di sini - Maaf, modal o, modal o nol, bukan nol, nol. Dan kami buat, itu akan masih bekerja sama. Tapi sekarang Anda melihat bahwa ada petunjuk perakitan yang lebih banyak. Itu karena, sekali lagi, saya meminta compiler tidak melakukan optimasi apapun. Jadi saya masih bisa mengambil semua ini nol dan yang, dan melemparkan mereka di, dan yang akan bekerja. Aku hanya melakukan optimasi, karena itu sedikit lebih mudah, maka, untuk menulis array. Tapi ini akan bekerja sama dengan baik. OK, kita akan melakukan satu hal terakhir, karena saya pikir adalah bagian paling keren. Meskipun semua orang jelas sudah ditiup dan berkata-kata. Pikiran kita ditiup. [Tak terdengar] Jadi, ini adalah dari kelas CS yang berbeda, yang super menarik, bahwa saya telah mengambil - CS61. Saya sangat mendorong Anda untuk mengambil. Tapi keren bagian tentang fakta ini, bahwa hal-hal yang hanya nol dan yang, adalah bahwa segala sesuatu adalah nol dan satu. Jadi Anda dapat mengambil file yang memiliki nol yang benar dan yang Anda inginkan di suatu tempat di dalamnya, dan menggunakan bagian nol dan satu sebagai fungsi sum. Apa yang saya maksud dengan itu? Aku berarti Anda dapat mengambil file gambar yang memiliki seri benar nol dan yang, yang mencetak sesuatu untuk gambar. Dan satu program mungkin menafsirkan adalah gambar, tetapi Anda dapat menafsirkannya, jika Anda inginkan, sebagai fungsi sum. Jadi jika kita ingin membuka, untuk Misalnya, gambar ini. Mari kita pergi, Hello Kitty. Indah gambar kecil. Di sini ada string yang nol dan satu. Mereka 72 nol dan yang ada di gambar ini. Jadi apa yang bisa saya lakukan, maka, adalah menulis - Aku harus ingat di mana mereka berada. Aku akan menemukan bahwa dalam satu detik. Tapi kita lakukan - biarkan aku mencari tahu di mana mereka berada. Satu detik. Mari kita lakukan - AUDIENCE: [Tak terdengar]. SPEAKER: Terima kasih. Jadi jika kita menjalankan program ini, yang bukannya membaca dalam sebuah file, kemudian ia pergi indeks ini dalam file. Dan kemudian, sekali lagi, sama seperti MySum, mengambil dua angka. Kita dapat menambahkan nomor persis sama seperti telah kita lakukan sebelumnya, yang pergi ke menunjukkan kepada Anda bagaimana fakta bahwa, di akhir hari, semua hal ini adalah nol dan satu. Dan itu hanya bagaimana Anda memilih untuk menafsirkannya. Dan jika Anda benar-benar melihat pada gambar ini - mari kita memperbesar sedikit. Dapatkah semua orang melihatnya? Anda akan melihat di sini, ada beberapa noda aneh. Mari kita pergi - ini adalah gambar asli. Anda akan melihat di sini tidak ada noda. Itu adalah kode untuk fungsi sum, adalah bahwa sedikit noda di sana. Dan sebenarnya, sekali lagi, jika Anda belajar lebih banyak tentang hal ini, Anda akan menyadari bahwa ini Hello Kitty, yang bahkan lebih besar noda, memiliki kode yang dapat mengambil alih komputer jika tidak dilindungi tepat. Jadi Anda benar-benar dapat menjalankan ini. Aku tidak akan menjalankannya sekarang. Tapi Anda bisa menjalankan ini Hello Kitty gambar, dan dapat mengambil alih komputer Anda. Jadi itu saja untuk demo. Apakah Ada yang punya pertanyaan, komentar, kekhawatiran? Saya pikir hal ini adalah menarik. Ini mengilhami saya untuk belajar lebih banyak. Saya sangat merekomendasikan, jika Anda tertarik sama sekali pada CS, bicara padaku. Meskipun aku Ilmu Sosial Concentrator, aku CS, sekunder, sehingga Aku masih tahu sedikit. Tapi aku pasti tahu apa kelas yang harus Anda ambil. Saya pikir itu semua benar-benar menarik, dan saya mendorong Anda, tentu, untuk mempelajari lebih lanjut jika Anda tertarik. OK, saya memiliki satu hal terakhir. Maaf. Ada pertanyaan? Aku tidak berhenti untuk menunggu jika ada yang memiliki pertanyaan tentang hal itu. Apakah ada orang akan CS Concentrator? Atau berpikir tentang hal itu? Satu, dua, tiga, empat. Satu - satunya. Anna adalah satu-satunya tangan yang mengangkat otoritatif. OK, itu keren. Assam, apa yang akan Anda lakukan? AUDIENCE: [Tak terdengar]. SPEAKER: Constantine? AUDIENCE: Fisika. SPEAKER: Whoa, itu cepat. Anda memiliki pengalaman buruk dalam CS50? [Tak terdengar], apa yang akan Anda lakukan? AUDIENCE: Saya tidak tahu. SPEAKER: Curt? AUDIENCE: Econ atau CS. SPEAKER: Econ atau CS. Tom? AUDIENCE: Aku melakukan Stat. SPEAKER: Stat? OK. Apa yang kamu? AUDIENCE: Me? SPEAKER: Ya. AUDIENCE: Stat. SPEAKER: Stat. Oh, di sana Anda pergi. Tom, berbicara dengan Alden. Emily, apa yang Anda? AUDIENCE: Biomedis - SPEAKER: Apakah Anda di bagian ini? AUDIENCE: No SPEAKER: OK, itu Emily. Dia teman saya. Jelas tidak baik dari teman, karena dia memberi saya waktu yang sulit. Anda bisa menjadi lebih baik untuk saya di depan semua orang, mahasiswa saya - AUDIENCE: Aku melakukan panduan Q Anda. SPEAKER: Benarkah? Uh oh. OK, kau menakjubkan. Aku sangat mencintaimu. Oh boy. Anyway, I, tadi malam, seperti segala sesuatu - Saya yakin semua orang tampaknya benar-benar menekankan sekarang. Saya tidak tahu, adalah mahasiswa - yang kalian merasa stres? Aku merasa stres. Rasanya seperti, Anda pulang untuk Thanksgiving. Kau seperti, aku akan melakukan semua hal ini. AUDIENCE: Ini sangat berbeda. SPEAKER: Ya, dan kau kembali. Jeff, Anda tidak merasa seperti itu? AUDIENCE: Saya hanya berpikir Saya akan melakukan sedikit. SPEAKER: OK, bagus. Jadi saya datang kembali, dan saya belum melakukan apa-apa. Dan itu semua super stres. Dan saya khawatir, benar-benar prihatin, tentang apakah atau tidak saya akan menyelesaikan segala sesuatu yang saya harus. Tapi tadi malam, saya tidak stres, Aku hanya sedikit sedih. Jadi saya menulis di jurnal saya tentang apa yang saya sedih tentang. Dan aku sedih tentang bagian ini di kelas ini akan segera berakhir. Jadi saya hanya akan membaca untuk kalian potongan kecil dari jurnal saya, dari tadi malam. Dapatkah saya mendapatkan beberapa serbet, beberapa jaringan dari Tom? Tidak, aku akan menangis. Aku tidak menangis. Bukan berarti Anda tidak bisa menangis, Aku hanya tidak menangis. Aku bahkan tidak tahu apakah air mata saya kelenjar bekerja - saluran air mata. Saya tak pernah menangis dalam waktu yang lama. AUDIENCE: [Tak terdengar]. SPEAKER: OK, terima kasih. OK, ada sedikit pengantar - ada beberapa bagian lain dari jurnal saya masuk, karena saya mencoba untuk jurnal setiap malam sebelum aku tidur. Saya sangat merekomendasikan journal. Ini membantu Anda memproses sesuatu, dan juga sangat menghargai hari Anda. Dan itu membuat lebih mudah untuk melihat kembali pada hari dan menyadari bahwa ada banyak yang baik hal-hal yang terjadi. Bahkan jika Anda merasa benar-benar stres pada malam hari atau benar-benar marah, atau benar-benar sedih atau lelah. Oh, my god. Aku bahkan tidak tahu apakah itu tertulis bahwa baik karena saya tidak mengoreksi. Tapi kita akan membacanya. Saya biasanya tidak membaca saya jurnal, jelas. "Besok, aku akan mengajarkan terakhir saya Bagian CS50 tahun. Ini gila bagaimana waktu cepat berlalu. Namun, saya dikejutkan oleh betapa berbedanya pengalaman saya mengajar tahun ini adalah dibanding ketika saya masih mahasiswa tahun kedua. Sebagai permulaan, saya pasti tahu materi yang lebih baik. Tapi jangan bilang kohort pertama saya siswa yang. Lebih penting lagi, bagaimanapun, saya menyadari bahwa sukacita yang berasal dari berdiri di depan ruang apa dimulai sebagai orang asing, tetapi berakhir sebagai, di Paling tidak, teman-teman Facebook, adalah bukan kebetulan tahun pertama. Sebaliknya, itu dari mengetahui bahwa, dalam beberapa cara kecil, Anda membantu berbakat, bijaksana, menyenangkan, dan orang yang penuh gairah belajar sedikit lebih tentang ilmu komputer. Kau pergeseran bahwa bola lampu hanya bit dalam soketnya, sehingga itu dapat untuk bersinar lebih terang dari yang Anda, atau mereka, bisa membayangkan di semester awal. Kau membantu mengubah mereka mengerutkan kening terbalik turun dan menanyakan pertanyaan yang memberikan dukungan, tapi masih memungkinkan siswa untuk berdiri sendiri. Ini tentu tidak berlebihan untuk mengatakan bahwa bagian ini adalah favorit saya bagian dari seminggu. Atau bahkan bahwa saya ragu untuk mengatakan, itu semua, di 5:30 PM setiap minggu, mengetahui bahwa itu akan terlalu lama sampai kita bertemu lagi. Namun, aku sangat berterima kasih kepada semua orang yang memberi saya ini kesempatan untuk memberikan kembali kepada orang lain. Untuk David, atas kesabaran dan kepercayaannya. Untuk kru film dan produksi, untuk membuat saya terlihat agak terhormat. Dan, yang paling penting, untuk murid-murid saya, tanpa mereka aku tidak punya alasan untuk menghabiskan waktu 10 jam mencari tahu yang terbaik cara untuk menarik pointer, atau lay out tabel lumba-lumba, melalui JavaScript. Seperti biasa, itu menjadi berkat. " Maka dengan itu, terima kasih guys. Aku akan melihat Anda semua di pameran CS50, dan hackathon, jika Anda berada di sana. Dan jika Anda memiliki pertanyaan, aku akan tetap sekitar sampai tidak ada lagi. Tapi aku berterima kasih kepada kalian untuk tahun yang indah. [Tepuk Tangan] SPEAKER: Aku akan menangis.