ENCEINTE: OK, donc, vous n'allez pas le croire, mais la semaine dernière, lundi, à Pierce, je était au sous-sol. Je ne vais jamais à Pierce. Et je ne vais jamais revenir, car J'ai laissé mes affaires à lui seul, comme, cinq minutes et quelqu'un volé mon ordinateur et mon téléphone de mon sac à dos. Ce qui veut dire que je suis de retour, et alors moins d'une semaine plus tard il a volé de nouveau. Et puis il s'est tourné - Localiser mon iPhone continue d'être inutile. Donc je continue à encourager vous ne l'utilisez pas. Il s'est à la fois, et il était en MIT, comme 15 minutes plus tard, et la personne appelé ce numéro de téléphone qui a montré dans mon AT & T journal des appels. Donc, je suis allé en ligne, appelé ce téléphone nombre, et il alla droit à ce répondeur en espagnol. Et je n'ai pas entendu parler de lui depuis. Donc, je devais obtenir un nouveau ordinateur et le téléphone. Je sais. Ouais. Mais si vous voulez les gars à puce pour mon fonds de l'ordinateur après cela, c'est pourquoi Je vous ai demandé de venir. Je plaisante. Mais qui était vraiment triste et traumatisant. Mais tout cela est en arrière maintenant, et c'est pourquoi le p-set 8 a fallu si longtemps, parce Je n'ai pas eu un ordinateur. Et quelqu'un a volé. Et je leur ai envoyé demander s'ils serait votre note p-set 8. Mais ils ont dit non. Et j'étais comme, je peux avoir mon ordinateur de retour? Et ils sont comme, non. Je plaisante. OK. C'est notre dernière partie, et j'ai un couple de - nous ne disposons que de trois choses sur l'ordre du jour. Nous allons parler un peu sur le guide de Q. Ensuite, nous allons passer 15 minutes sur une démo frais. Ensuite, nous allons tous dire au revoir à un autre. Vous n'avez pas vraiment besoin de vos ordinateurs ou un stylo ou un papier pour prendre des notes, ou suivre. Donc je suppose que si vous avez votre ordinateur , alors vous êtes sur Facebook. Il suffit de dire. Sauf si vous êtes remplissant le Guide Q, qui est la première. Le guide Q est ouvert. Vous avez eu un e-mail à ce sujet. Une fois tous les trucs de Q est soumis à la fin de l'année, je reçois tous les Q commentaires des scores de tous qui choisit de me donner des commentaires. Et donc quand vous allez dans le Q - Je ne sais pas si vous pouvez faire cela, Jeff, parce que vous êtes étudiant et l'extension. Mais quand vous allez dans le Q, si vous n'avez pas fait avant, vous choisissez votre enseignant, qui est David Malan. Vous devez le faire. Et puis vous pouvez choisir FO. Et vous pouvez choisir autant de FO que vous le souhaitez. Mais il ya 60 d'entre nous. Vous n'avez pas à prendre tout le monde. Vous pouvez juste me chercher, ou tout simplement prendre un quelques autres personnes, si vous voulez, à leur donner les informations aussi bien. Et puis, vous obtenez des scores sur tous ces différents axes, et alors vous pouvez laisser les évaluations. Et puis, comme un mois plus tard, Je vais prendre tout ce que la rétroaction. Et tout comme les commentaires que vous avez été me donner tout au long du semestre, je lire tout cela. Et c'est vraiment utile, et il contribue me développer en tant que professeur et en tant que individuelle. Alors, s'il vous plaît, prenez le temps de le faire. Nous allons seulement d'être ici pour, comme, 30 minutes. Donc, si vous voulez, à la fin de ce, à prendre cinq minutes, et il suffit de remplir Q, car elle ne tient pas plus de temps que cela. Ce serait merveilleux, et vous aussi obtenir vos notes retour plus rapidement si vous remplissez le Q. Ainsi, la plupart d'entre vous l'ont fait avant - ou non, environ la moitié d'entre vous ont fait ça avant. Mais si vous êtes un étudiant de première année, c'est ce que c'est. Ce sera la même pour toutes les classes. Faites-le. Il faut cinq minutes. Mais aussi, si vous le faites un peu au sérieux, ce n'est pas la pire chose dans le monde, parce que je doute prendre au sérieux. Donc, si vous me laissez un visage souriant, Je comprends. Mais je voudrais également apprécier si vous m'a laissé plus d'un visage souriant. Mais c'est à vous. Je ne peux pas vous dire - ou comme un grand smiley face, avec un capital D. Ce serait être encore mieux. OK, c'est tout ce que j'ai pour le Q. Si vous Pour toute question, vous pouvez demander moi, mais de lui-même jolie. Juste, s'il vous plaît, remplir. Je voudrais vraiment l'apprécier, et cela signifie beaucoup pour moi. OK, c'est ce que nous allons passer 15 minutes en passant par. Je vais vous montrer un peu de code. Je pense que c'est vraiment cool, et cela m'a fait plus excité en informatique. J'espère donc qu'il va faire la même pour vous tous. Nous allons ouvrir - et tout cela code, je vais vous l'envoyer plus tard. Mais nous allons juste d'ouvrir - Je suis dans mon terminal - nous allons ouvrir ce programme appelé [? MySum. ?] Tout le monde peut lire, ou dois-je le rendre plus grand? Quelqu'un peut-il me dire ce que ce code sera faire quand je le lance, ou ce que cela programme va faire quand je le lance? [? Avi,?] Que pensez-vous il va faire? Terminer la mastication. Vous ne devez pas parler avec la bouche ouverte. PUBLIC: Faut-il un groupe de arguments, pour la somme de leur retour somme, et puis l'imprimer? Ou il prend deux arguments, et alors il ne [inaudible]. Et puis il imprime tout ce sont les résultats. ENCEINTE: Fermer, vraiment proche. Quelqu'un veut-il ajouter à [? ce Avi?] dit? Avez-vous besoin de donner à ce programme les arguments de ligne de commande? PUBLIC: Non ORATEUR: Non Qu'est-ce qui se passe si vous ne lui donnez pas les arguments de ligne de commande? J'écris point barre MySum. PUBLIC: 1 plus 2 est égal à 3. ENCEINTE: 1 plus 2 égale 3. Et il va imprimer cela. C'est exactement ça. Vous verrez que l'impression f La ligne du bas. Il va imprimer a, b, et ensuite la somme de a et b. Et je suppose que vous supposez que somme fonctionne correctement. Bon hypothèse. OK, et ce qui se passe si je donner quel argument? [? Manu? ?] PUBLIC: Il va ajouter quelque le premier argument est à b. Ou à 2, désolé. ENCEINTE: Droite, 2. Est-ce que quelqu'un sait ce que strtol t-il? Il s'agit essentiellement atoi. Atoi est en fait une version fantaisie de - ou une version simplifiée de strtol. Mais il utilise en fait strtol. Et j'ai trouvé que parce que je voulais quelque chose comme atoi, et puis quand je ne atoi, je lis ici. Et j'ai trouvé "ce comportement est le même que "strtol. C'est donc essentiellement pour atoi toutes fins utiles. Et vous voyez que je l'utilise même nulle et 10. Cela permet effectivement vous prenez une chaîne, et le transformer en un certain nombre, et choisissez quelle base vous voulez faire po Donc, c'est la base 10 ici. J'aurais pu faire la base de deux pour décimal, base 16 pour hexadécimal. C'est plutôt cool. Mais bref, cela prend deux les nombres et les ajoute ensemble. Donc, nous allons l'exécuter. Et vous remarquerez également, il ya certaines choses - donc j'ai un makefile ici, et si vous ouvrez que vous, certaines choses vous remarquerez sont différents. En particulier, cet argument ici, vous avez probablement n'ont pas vu ça avant. Généralement, nous compilons les choses avec le tiret zéro, zéro. Dash zéro, zéro, signifie ne pas faire tout optimisations, compilateur. Ne pas essayer de faire quelque chose de compliqué, ou faire quoi que ce soit de fonctionner plus rapidement, ou obtenir débarrasser de variables qui sont nécessaires. Ne pas optimiser ce code à tous, Je vous demande de troisième niveau optimisation. Je demande donc compilateur à faire beaucoup d'optimisations. Vous pouvez changer cela dans le makefile quand vous avez ce code, si vous voulez de voir des choses différentes. Qui nous montrerons dans une seconde. Donc, nous courons mon somme 1 + 2 + 3. Quelqu'un me donne deux arguments. PUBLIC: 4 et 5. ENCEINTE: 4 et 5. Merci. Grande, cela fonctionne. Quels sont les autres bons arguments essayer, assurez-vous que cela fonctionne? N'importe qui? PUBLIC: 0. ENCEINTE: 0 et? PUBLIC: Négatif 3. ENCEINTE: Il fonctionne. Mais c'était le bon choix. OK, donc revenons ici. C'est mysum.c. Vous remarquerez qu'il ya aussi quelque chose appelé sumfunction.c. Et cela dit, oh, il ya quelque chose défini dans sumfunction.c. Je ne comprends pas ce fichier ici parce que je n'ai pas besoin de. Mais je lie il lorsque je compile, qui vous avez remarqué. Disons défiler jusqu'à. Nous avons vu lorsque nous avons compilé MySum, droit là, nous avons associé dans le binaire de sumfunction.o. Et je n'ai pas besoin de le fichier d'en-tête parce que, bien sûr, il ya le déclaration de fonction. Si net comprennent normalement seulement met dans une déclaration de fonction. Ici, je viens de mettre tout droit dans le code. Et si j'ai besoin de faire est de lien dans le binaire, ce que je fais. Toutes les suppositions pour ce qui est dans sumfunction.c? Quel est le code que j'ai écrit dans sumfunction.c? PUBLIC: [inaudible]. ENCEINTE: Toute devine? Ouais? PUBLIC: Je pense, définit certains [inaudible]. SPEAKER: Oui. Donc, je fais écrire int int somme un. Je écrire cette ligne, puis j'ai ouvert accolade, accolade fermée. Que pensez-vous que j'écris à l'intérieur de ceux accolades, à l'intérieur de cette fonction? Ouais? PUBLIC: retour est égal à un. PROCESSEUR: C'est une très bonne proposition. Qui pense [? Manu?] Est juste? Il dit revenir a plus b. OK, pas tout le monde. [? Akshar,?] vous aussi? Vous êtes sûr? OK. Qu'est-ce? PUBLIC: Vous orthographié mal. Président: Non, je ne l'ai pas. Ouais, je plaisante. Vous avez raison. C'est exactement ce qu'il dit. C'est revenir a plus b. Cela fait beaucoup de sens. OK, revenons ici. Nous voyons comment l'en-tête - c'est le type de retour. Rappelez-vous, nous avons vu que le premier jour, la le type de retour de la fonction, mais va avant le nom de la fonction d'int. Ici, j'ai écrit int. Que pensez-vous qui va se passer si, dans ce fonction, je n'écris pas int, mais J'écris non signé? La différence, bien entendu, étant que non signé ne représente que positif entiers, et int peuvent être positive ou négative. J'ai donc changé le retour type de cette fonction. Ce code ne correspond pas tapez ici ce retour. Que pensez-vous qui va se passer quand je compile? Vous devez me crier dessus. Pas de cris. Qu'en est-il quand je lance le programme? Faisons avant 0 négatif 3 ou négative 1. Il fonctionne toujours, même si je dis il est de retourner un entier non signé. En clair, il ne revient pas un entier non signé. C'est le retour d'un entier signé. Il est de retour négatif 1. OK, c'est bizarre. Qu'en est-il si je vais dans et à faire ici que? J'ai donc tout changé de int en unsigned. Il ne peut prendre des entiers non signés. Mais pensons-nous toujours qu'il va courir? PUBLIC: Oui. Président: sera. C'est fou. Et nous passons dans un bien affecté entier, nous pouvons passer deux signé entier, il fonctionne toujours. OK, des idées de pourquoi il toujours fonctionne, ou ce qui se passe? Ouais, Jeff. PUBLIC: Il a quelque chose à faire avec votre optimisation que vous mis en évidence. ORATEUR: Non Nous pourrions changer l'optimisation, il fonctionne encore. Je peux le faire pour vous, mais - PUBLIC: Je vais prendre votre mot pour lui. ENCEINTE: Ouais. Si vous ouvrez le fichier makefile ici, J'ai changé l'optimisation. Ainsi, vous pouvez faire tiret zéro, zéro. Il faudra encore travailler. D'autres pensées? Vous les gars devraient tous travailler, de sorte Pourquoi vous vous attendez à travailler? Non? Silence. OK. Je dois attendre sept secondes parce que j'ai posé une question. Donc, la chose cool à propos de C, et que vous avez sans doute connu avant - vous pourraient ne pas avoir, cela pourrait la première fois. Mais comme vous le savez tous, quand j'écris quelque chose en C, il n'enregistre pas comme ce sur l'ordinateur. Il est enregistré en tant que zéros et de uns. Il va de code C pour le code assembleur. Quelqu'un at-il vu le code assembleur avant, code machine d'assemblage? Nous verrons dans un second. Il va de code C pour le code assembleur. Et vous les gars savent les étapes de compilation. Vous avez eu à mémoriser que pour un jeu-questionnaire, puis l'écrire sur quizz zéro. La plupart des gens se sont trompés. Je pense que vous les gars cloué. Mais, vous êtes les meilleurs section pour des quiz, par la manière. Ce qui est génial. Il ne vous blessera pas. Ne vous inquiétez pas. Mais c'est vraiment cool. Bon travail. Donc, il va de langage d'assemblage, et alors il va de uns et de zéros. Et les uns et de zéros sont enregistrés sur le ordinateur, et c'est ce qui a sauvé en la a.out, ou dans ce cas, le fichier exécutable. Et l'ordinateur exécute uns et de zéros. Droite? Nous avons appris cela avant. Donc, la chose est cool, ce non signé idée, l'idée de types ints non signé, et cetera, et cetera, qui est ici dans la langue de C. Ceux existe. Mais les types n'existent pas les uns et de zéros. Types n'ont même vraiment n'existent pas le niveau de langage d'assemblage. Donc, c'est quelque chose qui existe en C monde, mais n'existe pas dans l'ordinateur monde ou processeur monde. C'est une abstraction que le C langue a inclus, pour faire de notre la vie plus facile. Ainsi, à la fin de la journée, je peux écrire beaucoup de choses différentes ici, et il ne fait pas de différence. Parce que seul existe dans le monde de la C. Il n'existe pas dans l' uns et de zéros monde. Et notre programme de l'exécution dans les uns et de zéros monde. Donc, de votre esprit manifestement pas encore soufflé. Mais je pense que c'est cool. Ouais, Jeff. PUBLIC: Donc, si au lieu de faire int, vous faites car. Et vous étiez - ENCEINTE: Faisons-le en une seconde. PUBLIC: Parce que vous avez une unsigned allant de 128 à négative 127 ou de 0 à 255. ENCEINTE: Donc char est problématique. Quelqu'un sait-il pourquoi l'omble serait problématique, et il serait réellement changer les choses dans ceux et zéros monde? PUBLIC: En raison de la taille de l'omble. CONFÉRENCIER: Taille de caractère est 1. Donc, non signé est également de 4 octets. Donc, l'omble serait tout gâcher. Mais ce qui est 4 octets qui est lié à un caractère? Ou à qui ajoute une supplémentaire - vous pouvez mettre un caractère plus après carbonisation. PUBLIC: Char étoiles. ENCEINTE: Char étoiles dispose de 4 octets. Donc, nous allons faire quelque chose c'est une étoile char. Donc, ce serait probablement travailler, mais nous sommes va faire quelque chose d'encore plus fou que cela. Pour moi, plus fou. J'ai maintenant écrit une fonction qui retourne un pointeur, et il faut un pointeur et une valeur non signée - nous allons changer ce retour à int si nous ne sommes pas faire trop de changements à la fois. Et il a un tableau appelé un index, dans le tableau, et renvoie les adresse de. Nous avons vu ces opérateurs avant. Ce, que pensez-vous que cela va à faire, en retour, quand je le lance? Que pensez-vous qu'il va faire? Toute devine? PUBLIC: Segfault. ENCEINTE: Quoi? Segfault? C'est une bonne proposition. Tom dit la même chose. Toutes les autres suppositions? Qui pense que ça va faire la même chose? Qui pense que ça va erreur de segmentation? Il fait la même chose. Désolé. Mais, bien sûr, nous avons mis en 1 et 2. Et ceux qui sont à la fois valides, non? Voyons, nous pouvons aller à la la deuxième place d'un tableau. Mais que faire si nous avons fait b un nombre négatif? C'est sans doute une meilleure estimation quelque chose des erreurs de segmentation. Il fonctionne toujours. OK, c'est maintenant fou. C'est la fonction de somme tout aussi valable. Cela ne exactement la même chose que le retour a et b. Quelqu'un peut-il expliquer pourquoi il en est un bon résumer la fonction, ou pourquoi cela fonctionne? Qu'est-ce qui se passe ici? Pourquoi ce faire exactement la même chose que notre fonction somme vieux? [? Akshar,?] ce qui se passe? PUBLIC: Parce que quand vous avez un un qui est une adresse à l'emplacement mémoire - et quand vous faites l'esperluette, il va à cette adresse de mémoire. Et quand vous allez à b, vous êtes un peu pas de cette adresse de mémoire en mouvement, vous êtes de retour que. Donc, vous êtes réellement, en fait, l'ajout d'un b [inaudible]. Où sont les opérations standard dans cette déclaration? Comme, d'où viennent les parenthèses tombent? Est le retour de l'adresse sur un avant ou après [inaudible]? ENCEINTE: Il va à l'index en b - ou un index en un - puis renvoyer l'adresse. OK, donc ne tout le monde comprend ce [? Akshar?] dit, et a expliqué, pourquoi cela fonctionne? Je ne l'ai pas, quelqu'un la première fois expliqué ce à moi. Quelqu'un voudrait-il une image pour expliquer cela? Nous allons faire un dessin, avec pas de marqueurs, c'est très bien. Trouvé certains. Donc, nous avons un tableau qui est une série de boîtes. Le premier est un indice 0, index 1, 2, 3, 4, point, point, point. Un réseau typique. Et en plus d'avoir des indices, ils ont tous des adresses de mémoire. Donc, nous allons donner à cette adresse mémoire 13, 14, 15, 16, 17, etc. Tout le monde est là pour autant. Donc a est une adresse. Le nom d'un tableau, un pointeur il est sauvé. C'est un pointeur, c'est un lieu de mémoire, le début de la rangée. Donc, si tel était le tableau, un aurait une valeur de 13. Et, bien sûr, nous pouvons donner une quelconque valeur que nous voulons. Char Star un, nous pouvons donner une toute adresse mémoire que nous voulons. Nous pouvons lui donner 0, nous pouvons lui donner 1 négative - négative n'existe pas une, alors c'est probablement un problème, mais vous avez vu qu'il travaillait encore. Donc, nous pouvons donner un nombre quelconque que nous voulons, toute adresse de mémoire que nous voulons. Ensuite, int b dit, OK, allez ce numéro des étapes dans le tableau. Donc, si b est égal à 2, et a est égal 13, nous sommes à l'adresse de la mémoire 13. Et nous allons deux étapes, et si nous sommes ici. Et l'esperluette moyens de rappel l'adresse de ce lieu. Et l'adresse est, bien sûr, 15. Donc, nous obtenons 13 + 2, ou A plus B, qui est de 15. La question est, bien - Je suis désolé. Est-ce que cela clarifie les choses pourquoi cela fonctionne? PUBLIC: Pourquoi serait-il travailler va - vous pouvez donc avoir un tableau et aller à un indice négatif? ENCEINTE: Droit. Nous avons donc fait les nombres négatifs, de sorte que c'est la - cela fait sens si, d'abord, [? Avi,?] pour vous? PUBLIC: Ouais, je suis juste [Inaudible], mais - SPEAKER: Oui, ce serait revenir 15. Si un avait 13 ans, et b est de 2, ce serait retourner 15. PUBLIC: Donc l'indexation zéro ne devenir un problème, non? Parce que vous vous déplacez de 0. ENCEINTE: Droit. Donc, vous êtes en mouvement - si b est 0, vous ne seriez pas se déplacer n'importe où. Et vous auriez venez de rentrer l'adresse - si b est 0, c'est essentiellement retour que l'adresse d'un. En passant une carbonisation étoiles et en retournant le adresse d'un revient tout juste d'un, essentiellement. OK, la question est pourquoi faire nombres négatifs marche? Et c'est la chose vraiment cool sur , parce que ce devrait erreur de segmentation. Et ce serait une erreur de segmentation si nous fait quelque chose comme ça. Disons, int. Donc ce code semble identique et devrait comporter de manière identique. Essentiellement, x est une variable d'ordures, et ce qui devrait comporter de manière identique. Faisons de cette - oops - en étoile. OK, nous sommes déjà à obtenir des erreurs ici, car il est déjà en cours d'être en colère à moi, parce qu'il a déjà sait ce qui s'en vient. En particulier, la deuxième. Adresse de mémoire empilée associé avec une variable locale. Essentiellement, je ne vais pas compiler cela, et puis je vais faire annuler ce que nous venons de faire. Mais parce que nous ne sommes jamais réellement accéder à ce qui est à la mémoire emplacement, il ne va pas à une erreur de segmentation. Nous ne sommes jamais vraiment regarder ce qui est dans la seconde zone ou ce qui est dans une boîte de ce tableau. Nous ne faisons que dire, voici l'adresse de la chose que nous recherchons et retourner cette adresse. Nous n'allons jamais fait dans la tableau à regarder à cet endroit. Et parce que nous ne touchons la mémoire, nous n'obtenons pas d'ennuis. Nous ne recevons pas une erreur de segmentation. Si nous avons essayé, encore une fois, toucher que mémoire, appuyez sur ce qui était à une ou b - ou un support b, et en supposant un est 0 et - si un est 0, même, ce serait assez Dommage, car nous ne pouvons pas aller bas tout le chemin. Si A et B sont tous deux 0, et nous avons essayé de toucher ce qui était là, alors nous avoir des ennuis. Mais si nous ne touchons pas ce qui est là, nous revenons juste l'adresse, il est effectivement pas aller à une erreur de segmentation car il vous permet d'effectuer ces opérations. Il obtient seulement en colère contre vous, et devient super colère, quand vous essayez de toucher la mémoire réelle et retourner ce qui est à cet emplacement de mémoire. Cela fait-il sens? C'est juste une partie folle de C. Ainsi, nous avons un plus de ces derniers. Qui pense que c'est cool? Plus de gens. C'est bien. OK, c'est notre dernier. Et je voudrais que vous me disiez si ou pensez-vous pas que cela va à faire exactement la même chose. J'ai écrit ces quelque part. Je ne suis pas les mémoriser. Voyons, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Donc, c'est un tableau, maintenant, pas une fonction. Et c'est un tableau parce que nous avons carré crochets, accolades pas bouclés. Et c'est un tableau de quel type? Toute personne, hmm? PUBLIC: Leurs nombres hexadécimaux? ENCEINTE: Mais quel est le type de C? Ils ont tous des nombres hexadécimaux. Quel est le type de C? Il vous dit. PUBLIC: C'est caractères non signés. ENCEINTE: Droite, caractères non signés. Et deux nombres hexadécimaux est d'un octet. Donc, ce sont 1, 2, 3, 4, 5, 6, 7, 8, 9 octets. C'est un tableau de 9 octets. OK, vous savez probablement déjà la réponse à cette question. Mais, qu'est-ce que vous allez penser arriver quand je lance ce? Je dis, encore une fois, dans mysum.c, Je m'attends à une fonction qui prend deux entiers. Et je suis plutôt dire que la somme est un tableau de caractères. Qu'est-ce qui va se passer quand Je lance. / MySum et fais? Eh bien, d'abord, la plupart d'entre vous seront probablement accord qui marque - oh non, je plaisante. Qu'est-ce que j'ai fait de mal? Uh oh. Cela devrait être accolades. Voilà comment initialiser une matrice. Ma mauvaise. Nous avons déjà vu donc avant que les types sont un niveau d'abstraction de C, pas un niveau d'abstraction de l'ordinateur. Ainsi, la plupart d'entre vous sans doute s'attendre à faire, ou en supposant que cela ferait. Mais ce que quand je lance. / MySum? Qu'est-ce qui va se passer? Toute devine? PUBLIC: Ça va imprimer un mot. ENCEINTE: Ça va imprimer un mot. Quel est le mot? PUBLIC: [inaudible]. ENCEINTE: D'autres suppositions? OK, imprimer une phrase. Vous pouvez avoir n'importe quelle phrase. Ce sera de votre côté. Toute personne qui a une proposition différente? Anna, quel est votre proposition? PUBLIC: Il va imprimer - deux lettres, ou [inaudible] une lettre. ENCEINTE: Une lettre. PUBLIC: Puis-je compter combien beaucoup [inaudible]? ENCEINTE: Neuf. Eh bien, je vais l'exécuter. Il fait exactement la même chose. Il ajoute deux nombres. Eh bien, nous allons passer les deux arguments. Il ne prend pas d'arguments. Donc, je ne sais pas où il pourrait éventuellement obtenir ces arguments. Mais nous allons passer à 100 et 0. Et il ajoute 100 et 0. C'est de la folie. Je crois. Négatif 4, qui fonctionne aussi. Vous pouvez faire ce que vous voulez. Il s'agit d'une fonction somme tout aussi valable. Ceci est une fonction de la somme. Mais, non, vous dites que c'est un tableau d'octets. Donc ce qui se passe ici? Donc, encore une fois, revenons à cette idée que nous le disions au début. Vous allez de code de niveau C, à l'assemblage langue, de uns et de zéros. Ceci est hexadécimal. Mais c'est vraiment juste une beaucoup de zéros et de uns. C'est 72 zéros et de uns, non? 72 zéros et de uns. 9 octets. Chaque octet a 8 bits. Chaque bit est un un ou un zéro. Donc 72 ou les zéros. Je viens de les écrit comme ceci - plutôt que de l'écrire comme beaucoup d' uns et de zéros. Mais ce sera de niveau C langue, à l'assemblage langue, de code. Et ceci affichera dans le code, quelque part, ces 72 zéros et de uns que j'ai écrit ici. Ainsi, quelque part dans cette - Passons ici - quelque part dans MySum, le programme, il sont ces 72 zéros et de uns que j'ai écrit et il dit d'écrire. Maintenant, toutes les suppositions pour ce que ceux qui 72 zéros et de uns signifient? PUBLIC: Probablement la même chose que revenir a plus b. ENCEINTE: Probablement la même chose que revenir a plus b. Vérifions cela. Essayons d'imaginer comment je l'ai fait. Donc, si vous revenez ici, je vous le dis pour exécuter cette commande, objdump-S sumfunction.o. Allons exécuter. objdump - obj, dumping. Fondamentalement, il peut me donner tout ce que je veux voir. Il peut me donner le langage d'assemblage. Il peut me donner les uns et de zéros. Il a une tonne de drapeaux. C'est celui que nous allons à utiliser pour le moment. Dot - comme vous le voyez dans les coulisses - capitale de bord S dit, intercaler, code source - cette ligne est de C - avec l'ensemble Code et avec les uns et de zéros. Et nous allons manquer sur sumfunction.o. Parce que ce sera plus facile à voir. Encore une fois - hmm? PUBLIC: Vous orthographié mal. ENCEINTE: Mais je vais en fait pour effacer une seconde. Je vais d'abord ouvrir juste sumfuntion.o. PUBLIC: Vous orthographié mal la première fois. ENCEINTE: classique. Somme - c'est un mot difficile, cependant. Vous seriez surpris. OK, donc c'est sumfunction.o. Je ne pouvais même pas vous dire. Il ya beaucoup de zéros, clairement beaucoup de zéros, et il ya une autre choses qui n'est pas des zéros. Mais la plupart des zéros. On dirait qu'il ya quelques autres. Il apparaît donc clairement, cela est difficile à lire. C'est le langage binaire. Voyons maintenant l'ouvrir - quoi? Que fais-je tort? Ai-je l'épeler correctement? OK, c'est gênant. J'ai besoin d'une seconde pour comprendre ce que je fais mal. C'est une erreur. C'est bizarre. Oh, voilà pourquoi. Je vais revenir à notre première un, afin que nous puissions examiner la le code objet de la présente. Parce qu'il ya pas vraiment à être quelque chose quand nous venons de mettre la uns et de zéros po Nous y voilà. OK, donc tout le monde peut le voir. Cette fonction, comme je l'ai dit, mettre les lignes C - lignes du code source - avec des instructions de montage. Voici notre ligne de code source. Voilà un, voici une autre. Voici les instructions de montage. C'est à quoi ils ressemblent. Notice de montage - vous pouvez en apprendre davantage sur ces si vous prenez autres classes CS, mais ils sont généralement une instruction. Puis une source et une destination. Et puis ici est le code binaire qui correspond à ce que l'assemblage instruction. Donc, comme vous pouvez le voir, cette fonction de somme, à la fin de la journée, est trois instructions de montage. Seulement trois. Un mov - ce m-o-v représente un mouvement. Ajouter représente Ajouter. Et r-e-t signifie retour. Donc un mov, un complément, un retour. Et ceux-ci, ici, sont les zéros et ceux qui correspondent à ce code. Donc, ces zéros et des uns, si vous savoir ceux, vous pouvez simplement mettre ceux directement po Et puis il va faire le même chose exacte. Parce que, à la fin de la journée, tous les vous êtes l'exécution est une longue série de zéros et des uns. Et c'est ce que votre code est vraiment. Et la raison - regardons une chose. Ai-je le makefile ouvert? Donc, si nous sommes retournés à précipiter zéro, zéro ici - désolé, capitale o, le capital o zéro, zéro, zéro. Et nous n'avons faire, il serait travailler toujours le même. Mais maintenant, vous remarquerez qu'il ya un beaucoup plus les instructions de montage. C'est parce que, encore une fois, j'ai demandé à la compilateur de ne pas faire toute optimisation. Donc, je ne pouvais toujours prendre tous ces zéros et des uns, et les jeter dans, et cela pourrait fonctionner. Je viens de faire les optimisations, car c'est un peu plus facile, alors, pour écrire ce tableau. Mais ce serait tout aussi bien. OK, nous allons faire une dernière chose, parce que je pense que c'est la partie la plus fraîche. Même si tout le monde est clairement déjà soufflé et sans voix. Nos esprits sont soufflées. [Inaudible] Donc, ce sont d'une classe différente CS, qui est super intéressant, que j'ai pris - CS61. Je vous encourage fortement à prendre. Mais la partie cool sur ce fait, que les choses ne sont que des zéros et des uns, sont que tout est zéros et des uns. Ainsi, vous pouvez prendre un fichier qui a le zéros et des uns correctes que vous voulez quelque part en elle, et d'utiliser cette section de zéros et des uns, en fonction de la somme. Qu'est-ce que je veux dire par là? Je veux dire que vous pouvez prendre un fichier image a la bonne série de zéros et ceux, qui impriment quelque chose sur une image. Et un programme pourrait interpréter est une image, mais vous pouvez l'interpréter, si vous voulez, en fonction de la somme. Donc, si nous voulions ouvrir, pour exemple, cette image. Allons, Bonjour Kitty. Merveilleux petit l'image. Ici il ya cette chaîne de zéros et de uns. Ces 72 zéros et des uns exister dans cette image. Donc ce que je peux faire, alors, est d'écrire - Je dois me rappeler où ils sont. Je trouve que dans une seconde. Mais nous faisons - permettez-moi de savoir où ils sont. Une sec. Faisons - PUBLIC: [inaudible]. ENCEINTE: Merci. Donc, si nous exécutons ce programme, qui lit à la place dans un fichier, puis il va à cet indice dans le fichier. Et puis, de nouveau, juste comme MySum, prend deux nombres. Nous pouvons ajouter des numéros exactement les mêmes que nous faisions avant, ce qui va à vous montrer comment le fait que, à la fin de la journée, toutes ces choses sont zéros et des uns. Et c'est juste la façon dont vous choisissez de les interpréter. Et si vous regardez vraiment à cette image - nous allons faire un zoom un peu. Tout le monde peut le voir? Vous remarquerez ici, il ya certains tache bizarre. Allons - c'est l'image d'origine. Vous remarquerez ici qu'il n'y a pas tache. C'est le code de la fonction de somme, est cette petite tache là. Et en fait, encore une fois, si vous apprenez plus à ce sujet, vous vous rendrez compte que ce Bonjour Kitty, qui a même une plus grande tache, a un code qui peut prendre plus d'un ordinateur s'il n'est pas protégé de manière appropriée. Ainsi, vous pouvez effectivement exécuter ce. Je ne vais pas courir en ce moment. Mais vous pouvez exécuter cette Bonjour L'image de Kitty, et il peut prendre en charge votre ordinateur. Donc, c'est tout pour la démo. Est-ce que quelqu'un a des questions, commentaires, préoccupations? Je pense que ce genre de choses est fascinante. Il m'a inspiré pour en savoir plus. Je recommande vivement, si vous êtes intéressé tout sur CS, me parler. Même si je suis un études sociales Concentrateur, je suis un CS, secondaire, de sorte Je sais encore un peu. Mais je sais bien ce que classes que vous devriez prendre. Je pense que c'est tout vraiment intéressant, et je vous encourage, certes, à en savoir plus si vous êtes intéressé. OK, j'ai une dernière chose. Désolé. Vous avez des questions? Je n'ai pas une pause pour attendre si quelqu'un eu des questions à ce sujet. Est-ce que quelqu'un va être un concentrateur CS? Ou penser? Un, deux, trois, quatre. One - un seul. Anna est la seule main qui est soulevé autorité. OK, c'est cool. Assam, qu'allez-vous faire? PUBLIC: [inaudible]. ENCEINTE: Constantine? PUBLIC: Physique. ENCEINTE: Waouh, c'était rapide. Vous avez eu une mauvaise expérience dans CS50? [Inaudible], qu'allez-vous faire? PUBLIC: Je n'ai aucune idée. ENCEINTE: Curt? PUBLIC: Econ ou CS. ENCEINTE: Econ ou CS. Tom? PUBLIC: je fais Stat. ENCEINTE: Stat? OK. Que faites-vous? PUBLIC: Moi? ENCEINTE: Ouais. PUBLIC: Stat. ENCEINTE: Stat. Oh, là vous allez. Tom, parler à Alden. Emily, que faites-vous? PUBLIC: biomédecine - ENCEINTE: Etes-vous à cette section? PUBLIC: Non ENCEINTE: OK, c'est Emily. Elle est mon amie. De toute évidence pas très bon d'un ami, parce qu'elle me donne un moment difficile. Vous pourriez être plus agréable pour moi devant de tout le monde, mon étudiant - PUBLIC: je fais votre guide de Q. ENCEINTE: Vraiment? Uh oh. OK, vous êtes incroyable. Je t'aime tellement. Oh boy. Quoi qu'il en soit, je, la nuit dernière, comme tout - Je suis sûr que tout le monde semble vraiment souligné dès maintenant. Je ne sais pas, sont de première année - sont vous les gars sentez stressé? Je me sens stressé. C'était comme, vous rentrez chez vous pour Thanksgiving. Vous êtes comme, je vais faire toutes ces choses. PUBLIC: C'est tellement différent. SPEAKER: Oui, et vous revenez. Jeff, vous ne vous sentez pas de cette façon? PUBLIC: J'ai juste pensé Je ferais un peu. ENCEINTE: OK, très bien. Donc, je reviens, et je n'ai pas rien fait. Et c'est tous super stressant. Et je suis concerné, véritablement concerné, si oui ou non je suis va finir tout ce que je dois le faire. Mais la nuit dernière, je n'ai pas été souligné, J'étais un peu triste. Alors j'ai écrit dans mon journal sur ce que j'étais triste. Et j'étais triste à propos de cet article dans cette classe touche à sa fin. Donc, je voulais simplement lire pour vous les gars un petit extrait de mon journal, de la nuit dernière. Puis-je obtenir des serviettes de table, certains tissus de Tom? Non, je vais pleurer. Je ne pleure pas. Non pas que vous ne pouvez pas pleurer, Je ne pleure pas. Je ne sais même pas si ma déchirure glandes travaillé - conduits lacrymaux. Je n'ai pas pleuré longtemps. PUBLIC: [inaudible]. ENCEINTE: OK, merci. OK, il ya une petite préface - il ya d'autres parties de mon journal entrée, parce que j'essaie de revue chaque nuit avant de me coucher. Je recommande fortement la journalisation. Il vous aide à traiter les choses, et aussi très reconnaissants de votre journée. Et il est beaucoup plus facile à regarder Retour sur la journée et de réaliser que il y avait beaucoup de bon ce qui s'est passé. Même si vous vous sentez vraiment stressé la nuit ou très en colère, ou vraiment triste ou fatigué. Oh, mon dieu. Je ne sais même pas si il est écrit que bien parce que je n'ai pas relu il. Mais nous lisons. Habituellement, je ne lis pas mon revue, évidemment. "Demain, je vais t'apprendre ma dernière section CS50 de l'année. C'est fou comme le temps vole vite. Pourtant, je suis frappé de constater à quel différente mon expérience de l'enseignement de cette année était que lorsque j'étais un étudiant en deuxième année. Pour commencer, j'ai vraiment connaître mieux la matière. Mais ne dites pas à ma première cohorte des étudiants qui. Plus important encore, cependant, je me suis rendu que la joie qui vient de standing en face d'une pièce de ce qui commence comme des étrangers, mais finit aussi, à moins, amis de Facebook, est pas un coup de chance en première année. Au contraire, c'est de savoir que, dans une petite façon, vous aider talentueux, réfléchi, délicieux, et passionnés en apprendre un peu plus sur l'informatique. Vous êtes déplacer cette ampoule seulement bit dans son support, de sorte qu'il est en mesure à briller que vous, ou ils, aurait pu imaginer au début de semestre. Vous aider à transformer les froncements de sourcils à l'envers vers le bas et poser des questions qui fournir un soutien, mais encore permettre élèves de se lever sur leur propre. Ce n'est certainement pas exagéré de dire que cet article est mon préféré partie de la semaine. Ou encore que j'hésite à dire, c'est tous, à 17h30 chaque semaine, sachant que ça va être beaucoup trop long jusqu'à ce que nous nous reverrons. Pourtant, je suis incroyablement reconnaissant envers tous ceux qui m'a donné ce occasion de redonner aux autres. Pour David, pour sa patience et de confiance. Pour la production cinématographique et équipage, pour me faire passer un peu respectable. Et, plus important, à mes étudiants, sans qui je n'ai aucune raison de passer 10 heures trouver la meilleure moyen d'attirer des pointeurs, ou jeter un table des dauphins, via JavaScript. Comme toujours, ça a été une bénédiction. " Donc, avec cela, merci les gars. Je vois que vous tous à la foire de CS50, et le hackathon, si vous êtes là. Et si vous avez des questions, je vais coller autour jusqu'à ce qu'il n'y ait plus. Mais je vous remercie pour les gars une année merveilleuse. [Applaudissements] Président: Je pourrais pleurer.