ROB BOWDEN: Dies ist das bequemer Schnitt aber das bedeutet nicht, dass, wenn Sie sich wie Sie nicht mehr bequem sind Sie werden die Dinge hier nicht zu erfahren. Also lasst uns loslegen. Haben Sie Dias haben gehen Sie rechts in die Dinge. Bin ich dabei, nur nehmen es jetzt? Schalt Laptops. ALLISON: Sie wollen nicht stellen Sie sich vor, Rob? Rob Bowden: Oh, ich bin Rob. Das ist mein fünftes Jahr TF-ing CS50. GABRIEL: Ich bin Gabriel. Ich bin Kopf TF von CS50. Ich war TF im vergangenen Jahr und in diesem Jahr. ALLISON: Und ich bin Alison, und dies ist mein zweites Jahr TF-ing CS50. Rob Bowden: Okay, so Diese Sache auf der linken Seite, hoffentlich zuvor gesehen habe. Wenn nicht, weil Sie laden Sie es für sich selbst, Sie sollten es in der Vorlesung gesehen haben. Das ist also der CS50-Appliance, und er habe ein wenig von einer Beschreibung davon in der Vorlesung. Aber im Grunde ist es nur, dass du sind ein Betriebs System innerhalb Ihres Betriebs System, so dass wir Ihnen Programme ohne sich Sorgen zu machen, oh das ist werde sowohl unter Windows arbeiten und Mac, oder wenn einige von euch sind bereits unter Linux, Linux. Es ist nur zu vermuten, eine gemeinsame Spiel sein Feld, so hat jeder die gleiche genaue Umgebung. Also, wenn Sie nicht haben heruntergeladen dies bereits, sollten Sie es herunterladen, weil Sie gehen, um es für das Problem Set benötigen. Und es ist eine zwei Gigabyte herunterladen, so dass es eine Weile dauern könnte. Am Harvard, es wird schnell gehen. So CS50 Appliance. Jetzt am Anfang, wir sind zu gehen reden über nur ein Haufen von Befehlszeile Zeug, und so durch, dass ich meine Arbeit in diesem kleinen Umfeld hier. Und all die Dinge bemerken Ich hier richtig sagen jetzt gehen, um zu arbeiten, wenn Sie innerhalb von bist ein Terminal im Geräteinnern, oder wenn Sie im Inneren des sind die gedit Terminalfenster Innere des Gerätes. Also diese Umgebungen sind identisch. Aber ich werde einen dritten Weg gehen. Und bemerken hier unten diese wenig IP-Adresse finden Sie hier. So müssen Sie nicht zu haben, dies zu tun, aber diese IP address-- jetzt, wenn I-- Ausnahme es ist von dieser Sache blockiert. OK, so dass die IP-Adresse über in einem Terminal hier-- so dass dieses Terminal über hier ist ein Terminal in meinem Mac. Das ist also in keiner Weise aktuell mit dem Gerät überhaupt verbunden. Und wenn Sie auf Windows, dann bist du gehen zu müssen, um etwas herunterzuladen speziell für diese, insbesondere Menschen neigen dazu verwenden Putty, P-U-T-T-Y. Also, was ich tun werde, ist Typ SSH und dann die IP-Adresse. Nun, jharvard dama IP-Adresse. So 192.168.24.220. Dieser beängstigende Nachricht ignorieren. Schreiben Sie einfach ja. Dies ist CS50 in einer Box. Es fragt nach Ihrem Passwort. Und dies in einer Menge von diesen Zusammenhängen, wo es fragt nach dem Passwort, [unverständlich]. Wir haben eine Menge von Fragen, bei denen bekam es sagt, dass es eigentlich nicht tippen. Es muss nicht die Zeichen zeigen Ihnen das Passwort während der Eingabe, wenn überhaupt, ein Sicherheitsmerkmal, weil, wenn jemand über die Schulter schauen und sie Sterne Stern star star, dann sind sie wissen, dass Sie Ihr Passwort vergessen ist vier Zeichen. Also die Idee ist es fragt Sie nach Ihrem Passwort, geben. Es wird nicht zu zeigen Sie die Zeichen, aber es ist eigentlich akzeptieren. In diesem Fall, wann immer Sie eine Passwortabfrage überhaupt sehen Umgang mit dem Gerät, das Kennwort wird sich hochrot sein. So hochrot. Und jetzt hier Innere dieser Fenster, die in meinem Mac ist, Ich bin grundsätzlich mit exakt das gleiche Ansicht wie man innerhalb einer Terminal im Gerät. So müssen Sie nicht haben, um dies zu tun. Sie können alles, was Sie tun wollen im Geräteinnern. Ich fast nie wirklich tun nichts in das Gerät. Ich bin fast immer zu minimieren, dass und jetzt Ich arbeite SSH in das Gerät. Wenn überhaupt, wenn Sie haben einen langsameren Computer, Sie könnten einen Unterschied bemerken. Ich tue dies, weil ich es vorziehe Dieses Terminal-Fenster. Es hat einige Features wie Ich kann das Fenster teilen, und jetzt kann ich SSH durch das Gerät. Ich habe zwei SSH ist los auf einmal. Wenn Ihr Computer ist besonders langsam und du bist in der Appliance arbeitet, und Sie erkennen, das ist wirklich laggy, was auch immer. Neigt viel schneller zu sein wenn Sie SSH-ed in. Aber sonst kann man so oder so zu arbeiten. PUBLIKUM: Was bedeutet SSH das? Rob Bowden: Sicheres Muscheln, so etwas? Was bedeutet SSH das? GABRIEL: Secure Shell. ALLISON: Es ist nur Secure Shell. Rob Bowden: Secure Shell. Es ist ein Protokoll, das es Sie-- ein sicheres Protokoll, so verschlüsselt. Die Leute können nicht auf das Netzwerk schnüffeln und sehen, was Sie alles sagst Sie SSH-ed bist zu. Und in der Tat, in den alten Tage des CS50, so im Jahr 2009 als ich noch ein Neuling, der Weg, Sie CS50 Problem Sets gearbeitet, war man SSH-ed auf einem Server dass wir gaben Ihnen den Zugriff auf, und Sie sind auf die dort arbeiteten. Also hast du nicht diese grafische Appliance. Sie haben nicht gedit. Sie haben nicht alle diese Dinge, die Sie könnten Punkt optisch und klicken. Man musste in dieser Schnittstelle arbeiten. Ich bevorzuge in dieser Schnittstelle arbeiten. Also von dem, was wir gehen zu werden jetzt auf über gehen sind ein Haufen von der Befehle, die Sie sollten starten, um sich mit so vertraut Sie gehen in den Kurs. Und ehrlich gesagt, wenn Sie an sie gewöhnen, es so viel schneller arbeiten in diesem Umfeld als es ist, mit Sucher arbeiten, Ziehen und Klicken Dinge. So, hier sind wir. Jetzt muss ich nur SSH-ed in, und so Der Standard location-- Sie sah einige dieser Befehle in der Klasse, aber wir werden wieder gehen über alle von ihnen. Die Standardposition sind wir in das Home-Verzeichnis. Und Verzeichnis, nur ein anderes Wort für Ordner. So sind wir im Home-Verzeichnis. Typ LS, listen Sie die Dateien in diesem Verzeichnis. Offenbar ich eine blah.c zuvor erstellt. So haben wir eine Desktop-Verzeichnis. Sie bemerken das Syntax-Highlighting? Die hellblaue Markierung zeigt ein Verzeichnis und der geraden weißen zeigt nur eine einfache Datei. So gibt sein werden einige andere Farben, die Sie sehen. Eine ausführbare Datei ist wahrscheinlich grün oder so ähnlich zu sein. OK, so sind wir in der Home-Verzeichnis. Nun, wenn ich in eine andere zu gehen Verzeichnis, ist der Befehl cd ich will. So Verzeichnis zu wechseln, und dann geben Sie den Namen des Verzeichnisses dass Sie möchten, dass in zu gehen. Hier haben wir also vier Optionen. Ich kann in Downloads zu gehen, und jetzt sehen wir, hier hat es diese in Klammern aktualisiert sagen, ich bin in ~ / Downloads. Also, was ist Tilde? Es ist eine Kurzform für Ihr Home-Verzeichnis. Also fast alles, was Sie tun müssen, ist zu gehen sein in Bezug auf Ihr Home-Verzeichnis, und PWD ist nur ein Befehl Ich in einem Jahr benutzen, wenn dass gerade druckt das aktuelle Verzeichnis. Und so können Sie hier sehen, dass ~ / Downloads wirklich behebt / home / jharvard / Downloads. Also / home / jharvard ist mein Home-Verzeichnis. So können wir cd dot dot. Jetzt dot dot ist eine spezielle Verzeichnis, bezieht sich immer auf die ein Verzeichnis nach oben. Also, wenn ich in ~ / Downloads, dann cd dot dot wird mich bringen und Tilde. Was denken wir cd dot dot wird mich jetzt bringen? Es wird mir zu / nach Hause zu bringen. So durch Arbeitsverzeichnis Druck Tilde Ich bin jetzt ein / home / jharvard. ein Verzeichnis aus, dass, Jetzt heißt es hier / home. Jetzt cd dot dot. Jetzt bin ich in das Root-Verzeichnis, und man kann es nicht wieder tun. Sie werden nur in dem zu bleiben Stammverzeichnis für immer. Das Root-Verzeichnis hat eine ganze Reihe von Dinge, die, wenn Sie wollen, zu schauen, Sie können. Zum Beispiel, wenn ich gehe in bin, dass enthält alle diese Binärdateien wie ls, und CD, und all diese Dinge. Also diese Befehle müssen existiert irgendwo im System, und es ist in der / bin. Aber fast alles, was Sie tun, ist gehen, um von Ihrem Home-Verzeichnis sein. Und cd ohne Argumente auch immer, man könnte sagen, cd ~, brauchen nicht zu. cd wird dich holen zurück zu Ihrem Home-Verzeichnis. Eine letzte. cd - wird dich zurück zu bringen das letzte Verzeichnis, das Sie in waren. Also habe ich nur zweimal in Folge cd'd, so meine letzte Verzeichnis war das Home-Verzeichnis. Wenn ich nach bin Slash, und jetzt lass uns gehen und in Benutzer. Nutzeranteil. Lassen Sie uns auf Benutzer Aktien gehen. Jetzt bin ich nun in der Benutzeranteil. cd -, zurück in bin. Also das bekommt besonders nützlich wenn Sie have-- und es werde wechseln. Also Benutzer Aktie zurück bin, share bin. Also diese bekommt nützlich. Sie können sich finden, die viele, vielen, vielen verschachtelten Verzeichnissen. Und Sie etwas tun wollen ganz schnell in einem oberen Verzeichnis. Sie gelangen in diesem Verzeichnis, stellen Änderungen und solche Sachen, und jetzt Sie hinwollen zurück, wo Sie waren. cd -. Ich bin immer frustriert wenn ich zufällig gehen zu diesem Verzeichnis I wollte zur Arbeit in zu tun. Ich bekomme immer frustriert, wenn ich tat in zwei Schritten statt einem Schritt, weil das bedeutet, dass die cd - wird in dieser Zwischenposition bringen statt, wo ich hin will. So sehen wir alle Listendateien. Wir wissen, wie man um so weit zu kommen. So, jetzt lassen Sie uns über das Editieren von Dateien zu sprechen. Also in diesem Kurs, du bist fast immer erwartet, dass gedit verwenden. Wenn Sie möchten, können Sie den nächsten Schritt machen und lernen Sie eine Befehlszeile Text Editor. So gibt es verschiedene Möglichkeiten. Und diejenigen, die wahrscheinlich gehen Sie relevant zu sein, Wir haben Nano, Vim und Emacs. Also Nano ist die Anfänger Befehlszeilentexteditor. So Nano gehen wir auf blah.c ich zuvor erstellt. Es ist nur diese Standard-C-Datei. Und Sie haben eine ganze Reihe von Sachen zu sehen Geschehen am unteren Rand des Bildschirms, und anscheinend blah.c enthält diese C-Code. Also in diesem speziellen Editor was es am bottom-- sagen jetzt dieses Caret-Symbol, wir sehen diese ^ G ^ X, ^ O. So daß in fast allen Rahmen, die Sie sehen, Sie könnte das Caret-Symbol in sehen andere Orte online, auf Stack Overflow, so ähnlich. Es bezieht sich fast immer zu steuern. Also, um zu beenden ich tun möchte, Steuer X. Steuer X verlässt. Und ich kann meinen Pfeil benutzen Tasten zu bewegen. Hinweis kann ich nicht zeigen und klicken leicht. Sie müssen mit Ihrem Pfeil Tasten zu bewegen. Es könnte eine Einstellung sein zu zeigen und einrasten. Aber lassen Sie uns einige Änderungen vornehmen. Jetzt Kontrolle X zum Verlassen zu gehen. Es wird Veränderten Puffer speichern sagen. Nun ist die Eingabeaufforderung y für Ja, N für Nein. Steuer C abzubrechen. Ich werde einfach sagen, ja. Dateinamen, um zu schreiben. Der Standardwert ist die Datei dass es ohnehin schon ist. Drücken Sie Enter. Ok. Jetzt habe ich nur diese Datei bearbeitet, gespeichert, und sie geändert wird. Also Nano ist der einfachste Texteditor gewöhnen. Die Alternativen sind Vim und Emacs. Das sind höhere Ebene Texteditoren dass eine sehr steile Lernkurve haben. Also meine persönliche Präferenz ist Vim. Und es hat eine Vielzahl von Optionen. Und sobald Sie gewöhnen um es zu, werden Sie nie möchte zu einem anderen gehen Texteditor, weil Sie gerade haben so viele Dinge Ihnen zur Verfügung in diesen, aber es hat eine wirklich braucht lange Zeit zu lernen. Also vielleicht wollen Sie nur zu zwingen jetzt selbst gebrauchte, um es zu bekommen, aber ich würde sagen, es ist es wert. Aber es ist schwer. Und dann Emacs. Ich habe immer in Emacs kämpfen, weil Ich weiß, wie man überhaupt nichts zu tun. Anscheinend Emacs ist standardmäßig nicht auf dem Gerät installiert. Wir werden wahrscheinlich hinzufügen, dass als Standardinstallationen. Sobald Sie eine der lernen Vim oder Emacs, gibt es keinen zwingenden Grund, jemals den anderen zu lernen, aber es ist ein ganz anderen Stil. OK das ist also der Bearbeitung von Text-Dateien. PUBLIKUM: Wenn Sie nicht weiterkamen in Vim gerade jetzt, wie kann wir-- Rob Bowden: Es gibt mehrere Modi in Vim, und es gibt ganze Tutorials zu lernen Vim. Also, wenn Sie sich gerade befinden im Einfügemodus, um Sie Text eingeben können, die Sie geben die auf verschiedene Weise, Aber ich bin, wie Sie in den Einfügemodus zu bekommen. In oder aus irgendeinem speziellen bekommen Modus, der Sie sich befinden, nur Flucht. Und Sie bash Flucht zu bekommen aus jeder verschachtelten Modi Ihre in. Gerade so OK, jetzt bin ich wieder im Normalbetrieb. Und so im Normalbetrieb, ein Doppelpunkt. Sie sehen es an der Unterseite angezeigt. Und dann q. So q wird beendet, wenn Sie Änderungen vorgenommen haben, welche I-- habe ich Änderungen vorgenommen? Ich habe Veränderungen offenbar gemacht. Also, wenn Sie Änderungen vorgenommen haben, wird es sagen, Sie können ein Ausrufezeichen setzen. Ich werde, nennen es einen Knall. So kann man ein Verbot zu setzen gerade beenden ohne etwas zu tun, oder Colon wq wird gespeichert und beendet. So w im allgemeinen schreiben. So schreiben Sie die Datei. Ich kann schreiben und beenden. Oder Sie haben könnten qx slam, q Knall gerade um von dort unabhängig erhalten über alle Änderungen, die Sie vorgenommen haben. Alles klar, so jetzt lassen Sie uns go-- wir können Dateien erstellen. Lassen Sie uns beginnen Entfernen von Dateien. Und ich werde nur in einem Wurf Schnell neuen Befehl, berühren Sie. So berühren foo. Touch-Leiste. Berühren baz. Wenn ich ls, jetzt sehen wir, dass diese Dateien existieren. Sie sind völlig leer. So touch ist nur eine einfache Weg von einem, [unverständlich]. Zwei, technisch einfach zu Staat es, aktualisiert es die Zeitstempel. Also jede Datei, die Sie erstellen, hat ein Zeitstempel zugeordnet. So baz erstellt wurde 14. September um 16.21 Uhr. Es ist jetzt 16.22 Uhr, also, wenn Ich wieder berühren baz wir sehen, dass baz war am kürzlich um 16:22 Uhr geändert. Aber sonst habe ich fast nie schauen Sie sich die Zeitstempel für Dateien. So touch, hier bin ich einfach mit es um ein paar schnelle Dateien erstellen. Alles klar, so jetzt rm ist die Befehl, der wir hier zu kümmern. Und wir können boo rm. Sagen entfernen regelmäßige leere Datei boo. Und wir können geben y, und jetzt ist es entfernt. rm baz. Entfernen Sie regelmäßig leere Datei baz und Typ n für nein. Jetzt ist es nicht entfernt. So Bar und Baz noch existieren. Foo ist weg. GABRIEL: Halten reden. Rob Bowden: Großartig. Also das lästige Meldung Hier, nehmen Sie regelmäßig empty-- was machst du da unten? Entfernen Sie regelmäßig leere Datei. Also, wenn wir nicht wollen, zu sein durch diese Nachricht gestört, Wir können in diesem -f werfen Flagge, und so, das ist Kraft. Und jetzt, wenn ich rm -f, es ist nicht zu gehen sagen Sie, diese Datei entfernen möchten. Es werde einfach tun. Und LS, ich sehe nicht, dort eine Bar mehr. Nun, da ist ein potenziell gefährlichen Befehl. Es neigt dazu, nicht zu schlecht. Wir werden in einem zweiten zurückkommen, wie es bekommen kann wirklich gefährlich. Und lassen Sie uns etwas zu schaffen Temp-Verzeichnis. mkdir, ein anderer Befehl. So mkdir ist ein Befehl das macht ein Verzeichnis. Und nun ls wir sehen dieses schöne Licht blau hervorgehoben Temp-Verzeichnis. Ich kann CD in Temp. Und ich kann foo mkdir. cd in foo. mkdir bar. cd in bar. So sehen wir uns leicht bekommen kann in einige ziemlich tiefe Verschachtelung. Nun, wie kann ich ein Verzeichnis zu entfernen? rmdir. Also, wenn ich einfach gerade versuchen, rm, wie wir mit einer normalen Datei, rm bar zu gehen sagen kann nicht bar zu entfernen. Es ist ein Verzeichnis. Es gibt einen speziellen Befehl für Löschen von Verzeichnissen, Art. So rmdir bar. Jetzt bar ist weg. OK, so rmdir ich so ziemlich nie. Der Grund being-- jetzt uns gelassen machen eine reguläre Datei bar hier. So rmdir boo. rmdir. Fehler beim foo entfernen. Verzeichnis nicht leer. So können Sie nicht verwenden, entfernen dir für ein Verzeichnis, das die Dinge in sich hat. So haben Sie einige Optionen. Sie können in das Verzeichnis gehen, entfernen alles manuell, und dann kommen und rmdir das Verzeichnis. Das offensichtlich klingt ärgerlich. Was ist, wenn es Tausende von Dateien drin? Nun, Sie rm könnte *. Wir werden über * in einer zweiten zu sprechen. Im Grunde bedeutet es all die Dinge. Aber noch besser, so rm -r. So rm -r-- in eine Menge von Kontexten bedeutet -r rekursiv, was wir darüber zu sprechen, was rekursives Mittel mehrere Wochen. Aber es bedeutet im Grunde Traverse die Gesamtheit dieses Verzeichnisses und entfernen Sie alles. So rm -r foo sagen wird Abstieg in das Verzeichnis foo? Ja. Entfernen Sie regelmäßig leere Datei foo / bar? Ja. Entfernen Verzeichnis foo? Ja. So, jetzt foo und alles darin wurde entfernt. Nun, da besonders ärgerlich bekommen können when-- wir berühren 1, Touch 2, Touch 3. Könnte eine ganze Reihe von Dateien. Wenn ich wollte, ich könnte erstellen Tausende von Dateien in hier. Und rm -r foo wird als ziemlich nervig. Ja, ja, ja, ja, ja, ja. Mit viel mehr Dateien schnell sehen wie oft Ich müsste ja geben. Nun, wir gerade gesehen haben, bevor, wie wir können, des Müssens Typ Ja, -f loszuwerden. So mkdir foo cd foo Touch 1 2 3. OK, so rm -rf foo werde foo völlig blind zu entfernen. Kein Aufforderung. Nein nichts. Foo ist weg. Also ich neige dazu, dies zu nutzen Befehl die ganze Zeit. Das heißt, es ist ein sehr gefährlich Befehl, denn wenn ich etwas zu tun Dazu wird es nicht aufgefordert. Es wird verschwunden sein. Und es passiert ziemlich häufig, und sogar in höheren Niveau CS Kurse. Manchmal werden wir sehen, etwas, wo jemand sagt, dass ich aus Versehen unsere RM RF-ed mein Zuhause Verzeichnis und alle meine P Satz ist weg. Und es ist verheerend, aber es gibt keine Mülleimer. Es gibt keinen, es gibt nichts für Sie abrufen. Es ist einfach weg. Noch schlimmer wäre etwas wie rm -rf /. Also wir gerade besprochen dass Root-Verzeichnis. Es hält alle der Dateien auf Ihrem System. Dinge neigen ziemlich chaotisch zu bekommen wenn Sie Dinge wie ls entfernen, und CD, und alles von denen. PUBLIKUM: Was ist der Unterschied zwischen rm, RF und rm * Rob Bowden: Also rm * - ALLISON: Frage war, was ist der Differenz zwischen rm, RF und rm *. Rob Bowden: Also rm *. Sterne im Allgemeinen bedeutet, dass alle der Inhalt dieses Verzeichnisses. Der Versuch, andere denken, Mittel für die Darstellung Stern. Nun, Sterne tatsächlich allgemein bedeutet übereinstimmen jedes Muster. Also, wenn ich eine Datei namens dog1, Berühren dog2, berühren cat1, berühren cat2. So ls * 1 wird sich cat1 drucken und dog1, weil dieser Stern gefüllt werden kann in with-- derjenige, dort zu sein braucht, aber Sterne kann entweder Katze oder Hund. Es ist ein Joker. Das ist das Wort, das ich mich für. Wild Card. Oder ich ls konnte Hund * und Ich lernte dog1 sehen dog2. Das sind also in dem die Dateien dass überein, dass bestimmte Muster. Sie können ls auf diese Weise verwenden. Ls * Sterne alles passt. Also es geht um alle drucken der Inhalt dieser Verzeichnis da alle von ihnen entsprechen. Es wird nicht, etwas zu drucken in der oberen Ebene Verzeichnissen. Wenn ich ein Unterverzeichnis, foo, und Berühren 1 2 3-- so jetzt, wenn rm * Stern, entfernen cat1, CAT2, dog1, dog2. Kann foo nicht entfernen. Es ist ein Verzeichnis. Also Sterne erweitert, um den ganzen Dateien in dem Verzeichnis. Also technisch rm * ist wie gesagt rm cat1, CAT2, dog1, dog2, foo. Während rm -rf, technisch Sterne würden erreichen, was wir wollen, aber rm -rf-- wenn ich aus diesem gehen Verzeichnis rm -rf temp, das wird in Temp gehen und rekursiv alles entfernen. Also Stern ist, dass getrennte dass wird nach-- so dieser Sache verstanden dass ich laufen in dieser Sache dass veranlasst mich für Befehle und dann Ausführen und Tun sie, ich nenne das meine Schale. Und so diese Schale ist selbst ein Programm. Und wenn ich wollte, ich konnte in / bin / bash ausgeführt. Die Schale wird als bash. Und nun etwas bemerken wir, hat sich leicht verändert, und das ist, weil meine Einstellungen für die Schale sind etwas anders. Aber jetzt bin ich technisch läuft eine Shell innerhalb meiner ursprünglichen Schale, und ich kann diese Shell verlassen, und jetzt Ich bin zurück zu meinem Top-Level-Shell. Der Zweck des Sagens dass ist-- den Stern. Also der Stern ist etwas von bash verstanden. So rm -rf ist -rf Flagge nur durch rm verstanden. Es weiß, dass, wenn Sie passieren eine -rf, dass Sie wollen, dass es rekursiv entfernen Alle Dateien ohne Nachfrage. Der Stern ist etwas verstanden von bash, dass, wenn Sie sagen rm *, bash ist nicht zu sagen, hey rm *, entfernen Stern. Bash wird rm zu sagen * entfernen cat1, CAT2, dog1, dog2. Es ist automatisch gehen zu erweitern Alle Dateien in dem Verzeichnis. Und in ähnlicher Weise ist eine weitere Tilde Symbol, das bash versteht. Wenn Sie sagen, cd ~ dehnt bash dass auf Ihrem Home-Verzeichnis. Andere Fragen so weit? OK, so werden wir beginnen werde schnell. Tab Fertigstellung. Nur, um es dort zu werfen. Eine Menge Leute nicht weiß, das existiert. Also, wenn ich tippe cd dow, I wollen in Downloads gehen. Ich brauche nicht zu nloads geben. Ich kann einfach auf Tab. So ist es anerkannt, dass Dow ist ein Präfix, nichts übereinstimmt sonst in diesem Verzeichnis so wird es, dass abzuschließen für Sie. Jetzt kann ich geben. Ich mache auch, dass rekursiv. So mkdir foo. Lassen Sie uns in foo gehen. mkdir bar. Also zurück zu mir nach Hause Verzeichnis, kann ich Downloads informieren. Jetzt Registerkarte wieder treffen, automatisch werde in foo zu füllen. Es ist das einzige Verzeichnis. Registerkarte Schlagen wieder automatisch werde in bar zu füllen. So, jetzt bin ich in (~ Downloads / foo / bar). Also das Register Fertigstellung wann immer ich zu Bürozeiten, und ich stehe über jemandes Schulter, und sie werden rm D-O-W-N-L-O-A-D-S, ich sterbe. Nur Reiter, Reiter, Reiter, Reiter. Also auf jeden Fall Registerkarte verwendet. Und in ähnlicher Weise und unten, eine Menge Leute nur, dass zu geschehen nie auf und ab schlagen. Es wird durch den früheren gehen Befehle, also wenn Sie gerade etwas lief, und man muss es wieder laufen lassen wollen, gerade halten, bis Sie sie zu bekommen. Ok. So schnell, einige andere Dinge. Gehen wir zurück in die Temp. Lassen Sie uns einige Dateien. Also hier, ich bin nur werde Liste einige Worte. Hund, Katze, miau. Lass uns Hund, Fische. So, jetzt rep ist ein sehr nützliche Befehle, die Sie verwenden, um ganz zu suchen Dateien für einen bestimmten Text, und technisch Sie wirklich tun können komplexe Ausdrücke dafür zu entsprechen. Also hier, wenn ich grep, und was will ich suchen? Sagen wir, ich bin auf der Suche nach Katzen und Ich möchte all diese Dateien zu suchen. Also, wie kann ich tun, alle diese Dateien? Stern. Also in der Datei ein, ich habe Katze. Ich wohl haben könnte nannte es etwas Besseres, denn das sieht aus wie Zeilennummern oder so etwas. Aber in der Datei, die ich habe eine Linie mit Katze. In der Datei zwei Ich habe eine Linie mit Katze. So, jetzt kann ich in Datei aussehen und siehe oh yeah, diese Datei hatten Katze. Unsere Datei drei war nicht abgestimmt weil Katze ist nicht drin. Ich kann für meow grep. Nur Datei zwei hat miauen. Also das Kombinieren Sie, wieder, mit -r, die wie ich schon sagte Häufig bedeutet rekursiv. Und so kann ich bis hierher zu kommen, grep -r für jede Instanz von-- wir bearbeiten dieses nur um eine Katze in dort zu werfen. So grep -r für jede Instanz Katze in diesem Verzeichnis. Und es wird rekursiv Suche alle Unterverzeichnisse. So in baz, es gibt Katze. In temp / 2, es gibt Katze. Und in temp / 1 gibt es Katze. Also das ist die Suche innerhalb von Dateien. Jetzt können Sie auch fündig. Und so finden, ist speziell über auf der Suche nach Dateien mit einem bestimmten Namen. Lassen Sie uns also etwas mehr. Lassen Sie uns in Downloads gehen. Berühren dog1. Berühren cat2. Berühren Katze_Hund. Berühren Catcat. Deshalb möchte ich alle zu finden Dateien mit Hund im Namen. So zu finden, und für die längste Zeit, die ich nie vergessen Wie finden arbeitete, bis ich endlich Lesen etwas, das es so deutlich gemacht. So finden, automatisch rekursiv. Sie brauchen nicht, um eine -r übergeben. So finden dot. Wir haben noch nicht über Punkt noch gesprochen. Während dot dot immer bedeutet ein Verzeichnis nach oben. Dot bedeutet immer das aktuelle Verzeichnis. So konnte ich -r dot in der RM Ebenso kann ich rm -rf *. Letztlich sie erreichen die gleiche Sache. rm -rf dot wird zu entfernen die gesamte aktuelle Verzeichnis. OK, das will ich nicht, um es zu tun. Aber finden dot. So rekursiv durchsucht den aktuellen Verzeichnis, und jetzt ist alles danach sind ein Haufen von Flags, die Sie verwenden, um die Dinge aus dem Rück auszuschließen. So finden dot kehrt alles, was es kann aus dem aktuellen Verzeichnis zu finden. Das sind alle Dateien rekursiv suchen. Wir werden einige von denen in einem zweiten zu sehen. Aber falls Sie sich fragen, wie ich tun daß, so Befehl K, zumindest in meinem Terminal im Mac löscht es. Control L Regel löscht es für jede Art von Endgerät. Sie können auch klar. Und wenn Sie jemals bekommen in eine seltsame scenario-- es ist mir ein paar passiert Zeit-- wo die Farben Ihrer Ansagen sind alle durcheinander, oder Sie sind nicht in der Lage, etwas zu sehen wird getippt, wenn du schreibst, denn manchmal wie Hintergrundfarbe festgelegt ist gleich der Vordergrundfarbe und jetzt können Sie nicht sehen können die Schriftarten. Reset ist etwas, das nur zurücksetzt Sie auf den Standard schwarzem Hintergrund, weiße Front, oder was auch immer Sie sie zu setzen. Also, wo waren wir? Finden dot. So, jetzt alles, was diese Vergangenheit Punkt schränkt die Ergebnisse zu etwas, das entspricht die vorgegebenen Muster. So, hier will ich suchen alles mit dem Namen Katze. Ich habe nichts. Warum ist das der Fall? Nun, ich bin gerade auf der Suche nach etwas mit genau dem Namen Katze. Wenn ich etwas zu suchen Das hat einige Muster und cat-- die Zitate technisch nicht notwendig sind, aber ich bin sie dort zu werfen. So, jetzt Catcat da findet es das ist die einzige Sache, hat einige willkürliche Muster gefolgt von Katze. Ich kann cat * setzen, und jetzt finden Catcat, Katze_Hund, CAT2, denn das sind alles Dinge mit Katze am Anfang, gefolgt von etwas. Sie können dies zu kombinieren. Wenn Sie für alle C-Dateien gesucht werden soll dass Sie, die Sie tun können * .c. Wir haben hier blah.c. Also das ist ein Recherchieren. Sie können zu suchen. Es hat eine ganze Reihe von Flaggen für weitere Einschränkungen. Und man auf sie, sagen wir mal -d. So veraltet. Oh, das ist nicht das, was ich will. Nicht -d. Geben Sie d. So finden dot - Art d. Also, was das gerade getan ist, ich bin auf der Suche für alle Dateien in dem aktuellen Verzeichnis mit A-- d steht für directory-- Verzeichnistyp. Dieser gibt alle Verzeichnisse im aktuellen Verzeichnis. Und Typ F ist alles regelmäßige Dateien, alle Nicht-Verzeichnisse. Also das ist nur ein Beispiel für andere Möglichkeiten, können die anderen Suche einzuschränken als nur der Name der Datei. Es ist schon 30 Minuten. Immer noch. ALLISON: Ich werde durch Wind. Es wird gut sein. Rob Bowden: Also einige andere Dinge. Jetzt schlagen, Ausrufezeichen. So dass in der Regel means-- gut, mal sehen, ein Beispiel. So! F, was ist das jetzt tun? Nun, es scheint, haben wiederholt find dot -type f. Was! G? Das funktioniert einfach grep -r cat *. So schlagen Sie verwenden können, zu wiederholen, ein vor kurzem getan Befehl. Also, wenn ich schreibe! Gre, es geht um erneut ausgeführt die Befehle, die mit GRE meisten begann vor kurzem. Und Sie können all dies zu sehen Befehle mit der Geschichte. Also Geschichte. Dies sind alles Befehle habe ich heute laufen. Und ja, es ist nicht wörtlich bis heute beschränkt, aber ich habe nur diese Gerät ab heute. Es ist Ihre Gesamtheit der Geschichte Ihrer Bash-Shell, außer es schneidet an einem gewissen Punkt. PUBLIKUM: Was passiert, wenn Sie tun, Geschichte [unverständlich] Befehl und ein Fehler im Ergebnis wird immer noch ausdrucken the-- Rob Bowden: Ja, wenn es eine Fehler in einem dieser commands-- so lassen Sie uns sagen, ist, dass ein Fehler Befehl nicht gefunden. Noch wird in der Geschichte. In Ordnung. Andere Fragen auf etwas? Also das ist, Knall. Nun, wirklich nützlicher Befehl, Mann. Also, die Ihnen zugleich Handbuch für einen bestimmten Befehl. Also sagen wir mal man ls, so Dies zeigt mir ls. Es listet Verzeichnisinhalte. Und das ist, wo ich sehe, dass es sind diese verschiedenen Flaggen, die es gibt. So sehen wir, dass ls -l existiert wenn wir lesen, dass. ls -l gibt mir diese vollständige Auflistung der Verzeichnis mit der die Datei besitzt, die Größe der Datei, die das modifizierte Zeitstempel. So ls -a ist eine andere, die Sie vielleicht tatsächlich nutzen etwas häufiger. -al ist meine häufigste Flagge am vergangenen ls. So -a, feststellen, es gibt eine Menge mehr Dateien als nur ls. ls -a. Was ist in der gemeinsam mit all diesen Dateien? Sie beginnen mit einem Punkt. Also das ist eine Konvention in Linux, dass Dateien, die mit einem Punkt beginnen, sind versteckt. Also es bedeutet nur, dass wenn wir nur geradeaus ls, oder wir suchen das Verzeichnis mit der Finder Äquivalent, oder der Windows Äquivalent Explorer, dass wir wollen nicht, diese Punkt-Dateien sehen. Sie belasten gerade die Sicht auf die Dinge. Also sie sind verborgen wenn Sie speziell fordert sie mit so etwas wie -a. So kann ich CD in .local, und ich sehe, , dass selbst ein Verzeichnis mit ein freigegebenes Verzeichnis, und Anwendungen und blah blah blah. So punktieren, Dateien sie nur versteckt. OK, so dass andere wichtige. Ich habe ein paar ich überspringen kann. Lassen Sie uns einfach ganz schnell reden über die Dateiumleitung Dinge. So gibt es eine ganze komplexe Reihe Dinge, die Sie mit diesen zu tun, aber nur, um sie zu sehen, sagen wir mal, Echo. Ein anderer Befehl. Wirklich dumm Befehl. Denn es macht nicht drucken, was ich sage es. So echo hallo. Es ist einfach hallte hallo auf den Bildschirm. Hallo Welt. Echoes Hallo Welt. So ein Befehl oder ein Symbol, dass bash versteht dies ist größer als Symbol und daß der Ausgang in einer Datei Symbol. Also, wenn ich Ausgangs dies foo, gibt es jetzt eine Datei genannt foo, Innenseite Das ist Hallo Welt. So bemerken, dass, wenn ich echo Hallo Welt Rohr in foo, es hat nicht echo Hallo Welt. Stattdessen wurde es in Datei foo setzen. Und ein anderer Befehl gerade um es auf dich werfen, Kat. Das ist eine einfache Möglichkeit, einfach komplett Liste der Inhalte der Datei so dass ich nicht zu öffnen einen Texteditor, um sie anzuzeigen. So wird der Inhalt des foo Datei sind Hallo Welt. Und ich konnte Katze blah.c, der Inhalt dieser. Auch dies sind Befehle, die, nicht erwarten, dass Sie habe sie alle auswendig. Die Idee ist, dass Sie sie gesehen haben. Vielleicht sind Sie gerade arbeiten etwas, und du bist wie ich bin krank von dem Öffnen dieser Datei. Ich wünschte, ich könnte nur schauen auf den Inhalt, sehr kurz. Sie könnten das tun, dann Blick zurück und oh sagen, ich erinnern etwas wie was existiert, und es ist Katze. So daß in einer Datei gehen. Jetzt gibt es wirklich keine gute Beispiel für das Lesen aus einer Datei ist leer. Was ist etwas, das dauert etwas von der Standard? Alle einfachen Linux-Befehl? Als wir um es zu bekommen, in ein paar Wochen alle piece-- gut, diese Woche Sie ein Stück, wo man Beginn der Einnahme von Eingaben des Benutzers. Und so in der Regel der Eingabe dass der Eingang an der Tastatur. Anstelle der Eingabe, dass Eingabe an der Tastatur, Sie können statt dessen Rohr aus einer Datei so dass, wenn Sie tun, Mario, ./mario, Rohr-in von einem bestimmten Datei und das wird die mario Programm auszuführen. Nicht erwartet Eingang an die Tastatur, sondern es ist gerade dabei, das zu lesen Zeilen aus dem foo Datei. Also größer als foo legt es in die foo-Datei, und weniger als foo nimmt Sachen aus dem foo-Datei und verwendet, die als Eingabe zu diesem Programm. Und nur um es zu sehen, konnten wir auch echo foo bar baz, und dann statt einer größer, machen wir zwei in foo. Was bedeutet das? Es hängt nur an der Datei. Anstatt also feststellen, wenn ich echo blah in foo und dann cat foo, es ist nur blah. Also, wenn Sie in eine Datei ausgegeben, es komplett überschreibt diese Datei. Wenn Sie nur wollen, um anzufügen, Doppel [? Grader. ?] Und last ist Rohr. Rohr Ruft viel komplizierter, wo er die Ausgabe eines Befehls statt und speist sie in den nächsten Befehl. So einige gemeinsame Sache, Geschichte. Also, pfui, ich will nicht, dies zu betrachten. Zeige mir alle Befehle in meiner Geschichte wo ich grep-ed für etwas. Nein, das ist verwirrend. Zeige mir alle Befehle, wo ich zu finden. Alle finden Befehle, die ich je fuhr. Also Geschichte. Jetzt Geschichte Ausgänge auf die Screen Diese Liste von Befehlen, aber ich will nicht Ausgangs es auf den Bildschirm. Stattdessen werde ich eine Pipe in grep. Lassen Sie uns also grep für alle Instanzen Fund. So, jetzt anstelle von grep Mitnahmen der Eingang, statt von-- grep kann als input-- wir behandeln mit grep etwas anders hier. Also, anstatt sie einzutippen die Liste der Dinge, die wir für die Suche gesucht und sagte, grep nimmt als Eingabe. Wenn ich also nur grep finden, ist es wartet auf mich Dinge zu geben. Also Katze hallo zu finden. Hallo. Suchen. Beachten Sie jedes Mal, wenn ich tippe finden er erkennt, dass ich tippte Fund. Also statt dessen werden Suche Dateien gibt. Also Geschichte geht jetzt um Ausgabe einer Liste aller Befehle. Wir setzen diesen Ausgang, und wir füttern es grep, und so ist es spuckt alle Instanzen Fund. Der Grund, warum ich sagte, es wäre verwirrend ist, wenn I-- es ist immer noch verwirrend. Wenn ich grep für grep. Beachten Sie, es ist ja eigentlich schon immer zeigt den Befehl, den ich gerade lief, weil dieser Befehl selbst hat grep darin. OK, also irgendwelche Fragen über alles? Und ich werde sie über an dieser Stelle zu übertragen. Hoffentlich ist dies ein schöner Übersicht aller Befehle dass Sie nicht brauchen, um haben gespeichert, aber diese bilden eine solide 95% von dem, was ich tun in der Befehlszeile. Denken Sie auch daran, dass die Kommandozeile selbst, ist bash eine Programmiersprache, und so, wenn Sie unten, um es zu, Sie Vielleicht möchten Sie wirklich komplexe Dinge zu tun. Und so Dinge wie hat Schleifen und ifs, und alle diejenigen, dass Sie sich daran zu gewöhnen sind mit Programmiersprachen. Aber das ist jenseits der Geltungsbereich dieses Abschnitts. OK, so dass keine Fragen? ALLISON: Keine? GABRIEL: Gehst du zu-- ALLISON: Ich kann es tun auf meine, wenn Sie wollen. Wir können sehen, was passiert. Rob Bowden: Weg von Allison. ALLISON: Woo. Du bist ein harter Handlung zu folgen, Rob. Wollen Sie mir, mit Ihnen wechseln? Oder du hast, OK. Ich werde versuchen, nicht ganz so lange da sein. Lassen Sie uns, wenn dieser Wille zu sehen so funktionieren, wie ich es will. Vielleicht? Haha! Ja. Also ich werde einfach sehr schnell gehen durch Variablen, Schleifen, Bedingungen, und ein wenig auf den Compiler. Wenn Sie Fragen zu haben zu jeder Zeit, aufhören, mich bitte. Diese Jungs werden mich daran zu erinnern, wiederholen Ihre Frage, falls ich vergesse, sollte aber nicht zu schlecht sein. So Variablen, yeah. Wir haben niemanden, der Ihre Scratch Stücke hier. Ich bin sicher, die meisten von euch, wenn Sie irgendeine Art von Spiel hatte dass Sie mit Scratch erstellt, musste man zu verfolgen, so etwas wie Gäste zu halten, oder Zeit, oder so ähnlich. Also diejenigen leuchtend orange Stücke, die wir dort zu sehen sind nur der Scratch Form Variablen, und Sie werden definitiv sein mit Variablen während Ihrer Programme. Wenn Sie sich nicht, ich bin nicht wirklich sicher, was du tust. Aber wie auch immer, große Sache, Definition von Variablen. Mit C hat jede Variable zu haben, erklärte ein Typ, so ich dir gegeben habe einen sehr allgemeinen eine an der Oberseite. So haben Sie Ihre eingeben und dann was auch immer Sie entscheiden, Ihre variable nennen. Also in diesem Fall, Typ in Ihrer Variablenliste. Wir haben drei Beispiele. Char von einigen Grad, eines A, das, was Ich bin sicher, Sie alle wollen um in dieser Klasse zu bekommen. Sie können mehrere definieren Variablen in einer Zeile solange sie sind alle vom gleichen Typ, die unser zweites Beispiel gibt es wo Sie drei haben Variablen x, y und z. Sie sind alle Schwimmer. Und dann kann man auch in diesem letzten Beispiel mit int Punktzahl und Anzahl von Teams, können Sie initialisieren Sie recht. So in der Mitte beispielsweise, wo wir einfach nur Float von x, y und z, die sind noch nicht initialisiert. Sie haben keinen Wert. Oder sie haben Müll Werte. Und wenn Sie versuchen, und verwenden Sie sie, der Compiler auf Sie schreien. Sie müssen sowohl zu erklären und initialisieren Sie Ihre Variablen. Also in diesem letzten, wir machen beides. Wir Deklaration von Variablen der Partitur und die Anzahl der Teams, und wir sind der Initialisierung ihnen geben sie ihren Anfangswerten von 7 und 4 jeweils. Cool. Jeder gut? Genial. OK, so dass einige Konventionen. Wenn euch gelesen habe durch Style 50, diese gibt eben Dinge, wir würden für gefallen Sie in Ihrem Stil zu implementieren. So aussagekräftige Namen. Wenn Sie anrufen, die Dinge beginnen nur x, y und z, insbesondere wie Sie in längeren bekommen Programme, du bist wahrscheinlich zu Verwechseln Sie sich selbst und sein wie, was ist diese Variable, die sich auf. Ich habe keine Ahnung, was das bedeutet. Also, wenn es soll halten eine Punktzahl, nennen es punkten. Wenn es soll einige Antwort halten oder führen, geben Sie ihm einen Namen wie die. For-Schleifen, die wir bekommen in der nächsten Folie, Einzelbuchstaben-Variablen sind in Ordnung. ROB BOWDEN: I, j und k sind nur Konventionen für for-Schleifen dass jeder von ihnen erwartet, i bezeichnet werden, j und k. Sie können anrufen them-- Ich sehe Reihe Spalte oder Zeile Anruf manchmal für zwei verschachtelten Schleifen und das ist auch irgendwie Standard. Aber i und j wird vollständig verstanden. ALLISON: Ja, ich und j Sie sind total in Ordnung. Aus Gründen der Klarheit wie in einigen Ihrer P-Sets, könnte es sinnvoll, mehr haben beschreibenden Dinge in dort gerade Den Überblick zu behalten. Aber ich denke, i, j und k Ich denke die überwiegende Mehrheit von uns alle nutzen. Rob Bowden: Mit diesen Konventionen, also Stil wichtig ist. Es ist eine der vier Achsen auf dem Sie abgestuft sind, und es ist so leicht, einfach übergehen Ihr P am Ende eingestellt und stellen Sie sicher, dass es nicht stilistische Fehler. So stellen Sie sicher, dass Sie richtig Tab bist. Stellen Sie sicher, Ihre Variablen benannt sind. Kommentiere. Es ist sehr einfach, diese Punkte zu bekommen. Sie müssen nicht zu denken nichts, um diese Punkte zu bekommen. Sie müssen nicht, etwas herauszufinden. Es ist nur so dass es hübsch aussehen. ALLISON: In der Tat haben wir haben Stil 50, die wird Ihnen sagen, wo Sie durcheinander bist up, wenn Sie durcheinander bist auf Stil und wird Ihnen genau sagen, was Sie reparieren müssen und wie Sie es beheben müssen. Es ist auch nur gut zu erwähnen, dass es natürlich Politik dass, wenn Sie im Büro sind Stunden und Ihr Code ist ein Chaos, können wir zurückgehen, um zu helfen Sie, bis er sieht schöner. So beginnen rechts, halten konsequenten Stil, du bist auch nur gehen, um Ihr Leben um einiges einfacher, wenn Sie versuchen, durch Debug gehen. Wenn Sie versuchen, herauszufinden, sind wo du verpasst eine geschweifte Klammer und sie sind alle über dem Platz, du bist gerade Ihre eigene Leben schwerer. So sei im Einklang mit Art. Ich verspreche, es wird Ihr Leben leichter machen. Sie macht unser Leben leichter. Jeder wird viel glücklicher sein. Und das ist, was Sie wollen. GABRIEL: Ihre Klasse höher sein wird. ALLISON: Ja, und deine Klasse. Wenn Ihr TF ist wie Sie, neigt günstig. Alles klar, und dann einfach der zweite Punkt hier. Konsequente Initialisierungen. So wie wir sahen, die Sie deklarieren und initialisieren Dinge. Mehrere Variablen in der gleichen Zeile. Eines, was wir möchten, dass Sie nicht zu tun ist, einige Variablen zu deklarieren und nicht auf der gleichen initialisieren Linie, die Sie anderen initialisiert. Also, falls die gemacht überhaupt keinen Sinn, Wir haben das Beispiel hier wo wir erklären ints in Variablen Quartalen Dimes und Pfennige, aber Quartalen und Pfennige haben keinen Anfangswert. Wir haben noch nicht initialisiert wurde, sondern direkt in der Mitte gibt es wir bereits initialisiert Groschen auf 0. Also entweder tun Viertel, Groschen, Pfennige. Oder wollen Quartalen gleich 0. Dimes gleich 0. Pennies gleich 0, oder was auch immer diese Anfangswerte sind. Große Sache mit Stil, im Einklang. Wenn Sie Zweifel haben, konsistent sein. Aber folgen Sie unseren Styleguide zu. Cool. Jeder gute da? PUBLIKUM: Wo ist der Style Guide? ALLISON: Der Styleguide ist on-- was ist die Website? GABRIEL: Ich denke, es ist manual.cs50.net/-- ALLISON: Style? GABRIEL: Style. Yep. ALLISON: Ja. So hinterfragen, wo ist Stil 50. manual.cs50.net/style. Ja? PUBLIKUM: Wenn wir definieren Variablen ist es OK wenn wir wie [unverständlich] setzen wie int Punktzahl und dann int Ziel. Also würden Sie sagen, jetzt haben wir bekam, um sie zusammen zu definieren? ALLISON: So hinterfragen, sollten Sie redundanten Code haben wenn Sie definieren Variablen wie int Partitur und in der nächsten Zeile int Spiel? Rob Bowden: Es gibt auf jeden Fall Fälle, in denen redundante Code ist schlecht. Ich würde es nicht als dass redundanten Code. Ich fast nie erklären mehrere Variablen in der gleichen Zeile je. Und wenn überhaupt, dann ist es, weil normalerweise lasse ich irgendeine Art von Kommentar zu erklären, was die Variable ist für. Also werde ich sagen, int Punktzahl Slash Schrägstrich. Verfolgt was auch immer. Insgesamt Slash Schrägstrich. So ist es viel gröberen auf diese Weise um sie alle auf der gleichen Linie setzen. Ich kann nie legte sie auf der gleichen Linie. ALLISON: Ich fühle mich wie es ist persönliche Präferenz an dieser Stelle. PUBLIKUM: Bedeutet das für zu gehen for-Schleifen und solche Sachen auch? Rob Bowden: Wie innen? Wie int i gleich 0 Komma Länge gleich so? Dass Sie nicht die Wahl haben. Mit for-Schleifen der Initialisierung part-- so könnte man nur gesehen haben int i gleich 0 Semikolon i kleiner als was auch immer Semikolon i plus plus. Das int i gleich 0 ist, technisch können Sie auch tun, was wir zuvor gesehen mit dem Komma-Syntax. int i gleich 0 Komma j gleich 3 Komma k gleich 5. Du hast nicht die Wahl zu spalten dass bis in mehrere Zeilen, und das ist Standard. Sehen sie es ist in Ordnung. ALLISON: Awesome. Nun, bequeme segue in Schleifen. Also ja, wir haben hier ein paar Beispiele von Loops, die euch in Scratch sah. Und natürlich all diese kann nur in C neu erstellt werden Und sie können Sie im Grunde einige Codeabschnitt wiederholen bis eine bestimmte Bedingung erfüllt ist, auf die wir bekommen in die rechte nach dem Gespräch über Schlaufen mit conditionals. So haben wir drei Haupttypen. Denn während, und zu tun, während, die wir werden alle durch jetzt gehen. Also erste ist für Schleifen. Also aus irgendeinem Zustand, führen Sie diesen Code-Block. Wir haben diese coolen kleinen Diagramm hier an der Unterseite. Aber im Grunde sind Sie in haben Ihre für, das erste Zeile, Sie zu gehen initialisieren Sie Ihre Variablen. So wie wir gesprochen, i gleich 0 oder i gleich 10 ist. Was immer Sie brauchen, dass variabel zu sein, es ist werde es initialisiert werden, erklärt und bis zu einem gewissen Wert initialisiert. Also dann haben wir einige Bedingung, dass los sein Click variable gegen etwas. So im Fall der typische Fall, wo vielleicht haben Sie diesen Codeabschnitt möchten zu fünf Mal auszuführen. Also müssten wir int i gleich 0 ist, und wir es haben wollen, wenn ich weniger als 5 ist. Also diese Voraussetzung nur gehen, um zu überprüfen, dass jedes Mal. Wenn diese Bedingung true ergibt, ist es gehen, um den Code, das ist genau das laufen was dieser kleine Diagramm zeigt. Und so führt sie aus. Es aktualisiert eine Variable, das ist, was wir sehen, im letzten Teil der für Schleifeninitialisierung dort. So dass es dann einfach weiter, dies zu tun bis diese Bedingung nicht erfüllt ist, und dann wird es zu verlassen die Schleife und weiter Bewegen Sie sich mit dem Rest des Programms. Jeder gute da? Cool. Also hier ist ein Beispiel, sehr ähnlich um etwas, das ich haben gerade darüber gesprochen. Also wir drucken möchten gerade dies CS50 10 mal. Sie sehen also, wir haben hier unsere für, und dann werden wir initialisieren Sie die Variable i gleich 0 ist. Unsere Bedingung ist die Überprüfung daß es weniger als 10 ist. Also den Wert true, wenn wir zuerst zu starten, und aktualisiert dann unseren variablen jedes Mal, wenn es tatsächlich ausführt und druckt das ist CS50. Und wird nach 10-mal zu beenden. Cool. So, während Schleifen stehen an. Und wie Sie hier sehen, haben wir nur einige während dieser Zustand- Frage? PUBLIKUM: Wie kann ich springen eigentlich nur nicht eine Nummer, aber zwei Zahlen [unverständlich] i plus plus plus? ALLISON: So war die Frage, wie kann man aktualisieren Sie Ihre Variable von mehr als einem zu einem Zeitpunkt. Also i plus Plus Update jedes Mal um eins. Wenn Sie es durch aktualisieren wollte zwei, die Sie tun können i plus gleich 2. Rob Bowden: Kennen Sie schon zzgl gleich in der Vorlesung noch nicht? PUBLIKUM: [unverständlich]. ALLISON: Es ist effektiv der Gleiche wie i gleich i plus 2. Also es geht, es zu nehmen und aktualisieren Sie es durch zwei jeder Zeit. Plus ist gleich ist nur etwas wir nennen syntaktischer Zucker. Rob Bowden: Ja, die für vorhanden so ziemlich alle arithmetischen Operatoren. Also ich mal gleich würde die Zahl verdoppeln. j divide gleich 3 ist die gleiche als j gleich j geteilt durch 3. ALLISON: Oder minus gleich 2 wäre dekrementieren i durch zwei jeder Zeit. Rob Bowden: Auch mod Gleichen. Sie haben noch keine bitweise Operatoren gesehen, aber Caret gleich und das kaufmännische Und gleich, alle, die vorhanden sind. ALLISON: Also eine Menge Zeit, vor allem mit Ihrem ersten paar P-Sets, Sie werden wahrscheinlich Erhöhen werden durch ein, so dass ich plus plus, j plus plus Das sind alles Dinge wirst du um typischerweise mit. Aber das Update Bedingung vollständig innerhalb Ihrer Kontrolle. Sie können es gleichgültig mit welchen Schritten aktualisieren oder wie auch immer Sie sich entscheiden,. Vielleicht sogar wollen, dass es sein eine Zufallszahl manchmal. Aber ja, es gibt viele Dinge, die Sie mit der das kann. Sie sind nicht zu i plus plus beschränkt. Rob Bowden: Nur damit Sie wissen, dass es existiert, aber auch existiert in einer anderen Form, plus plus i. Also, wenn Sie zeitgleich online suchst und passieren zu sehen, plus plus i, so ziemlich dasselbe bedeutet. ALLISON: Kühle. Gut? Genial. So, während Schleifen. Sehr ähnlich. Sie haben eine Bedingung. Die wichtigste Sache zu bemerken Hier ist anstatt drei verschiedene Teile einzurichten, haben wir eins. Wir müssen nur eine Bedingung das ist überprüft. Und in gleicher Weise, solange dass Bedingung true, Ihren Code laufen soll. Und wenn es falsch ist, es wird, verschieben beenden auf den nächsten Teil des Programms. Also das ist eine Art like-- was ein gutes Beispiel für die Überprüfung für einige Normalzustand? GABRIEL: Während wahr. ALLISON: Sie könnten while true do. Nun, 1 gleich 1 ist. Rob Bowden: Sie können tun while-- nur anstelle der Verwendung einer for-Schleife, Sie können immer Code A for-Schleife in einer while-Schleife, so i größer als 0 oder während ich weniger als 10. ALLISON: Awesome. Und dann tun wir haben While-Schleifen, denen ist ideal für Benutzer-Validierung, wo Sie etwas von erhalten möchten Ihre Benutzer sehen, ob es gültig ist, und dann von dort aus weiter. Damit wird eines der Dinge zu wissen, ist mit einem tun, während ist, dass es geht, um auszuführen, und dann wird es erneut ausführen wenn diese Bedingung erfüllt ist. So ist es wahrscheinlich der beste Weg, dies zu tun ist nur ein Beispiel zu sehen hier. So wie ich gerade erwähnt, Benutzer Validierung ist wirklich useful-- oder tun whiles sind wirklich Nützliche mit Benutzerüberprüfung. So ist dies nur gehen erneut aufgefordert einige Benutzer bis sie geben Sie eine positive Zahl, was nützlich für Ihre P-Set sein könnte diese Woche. Und so in diesem Fall, wenn wir zunächst führen Sie dieses Programm, es wird gedruckt geben Sie eine positive Zahl. Es wird einige bekommen Eingabe von dem Benutzer, und dann es geht um zu überprüfen, dass der Eingang gegenüber dem Zustand dass Sie für sie eingerichtet haben. Also in diesem Fall, es wird zu überprüfen. Es wird gesagt, OK, ist unser Eingangs negativ, oder ist er 0 oder negativ ist, welche unwirksam sein würde. Also dann wäre es wieder prompt. Question? PUBLIKUM: Ist das derselbe dann als while-Schleife, wenn Sie nur diesen Code kopiert und legte sie [unverständlich] while-Schleife? ALLISON: Also Frage war würde dies das gleiche wie gerade eine Weile Schleife wenn wir nur Kopieren Sie die while-Schleife oben. Also in diesem Fall, ist Ihre while-Schleife gehen, um den Zustand zunächst prüfen. Also in diesem Fall, wenn wir versuchten als nur eine while-Schleife zu schreiben, es wäre, während sagen Eingang ist kleiner als eins. Aber wir haben nicht einen Eingang dafür. PUBLIKUM: Wenn Sie [unverständlich] while-Schleife einschließlich diesen Code, aber dann haben Sie den Code verkraftet über der while-Schleife auch. Sie diesen Code hatte gerade [Unverständlich] while-Schleife. ALLISON: Es wäre dasselbe, ja. Sie haben also nur write-- könnte anstatt eine do-- ja. GABRIEL: Aber das ist eleganter. ALLISON: Ja, das ist eleganter. Sie können in Design und was nicht alles bekommen, aber ja, können Sie ganz tun. Noch Fragen? OK, cool. Also haben wir eine Menge über Bedingungen gesprochen mit all diesen Schleifen, die wir haben, so dass wir eigentlich immer in Bedingungen in Booleschen Ausdrücken. Auch diese in C verwenden Sie, so nur irgendwie den Übergang aus mehr grafische Oberfläche tatsächlich Codierung. Cool, so groß ein, wenn. Grundsätzlich können wir nur vorstellen eine gewisse Logik in unser Programm und die Prüfung sys Bedingungen. Also in diesem Fall, OK, ist n größer als 0? Ja, es ist, so können Sie diese ausführen kann. Es ist nur die Überprüfung einige Bedingung, die Sie haben, gesetzt, was ich denke, wir sind alle komfortabel mit Prüfbedingungen. Cool. Also, wenn sonst ist Ihre andere, Sie können sagen, OK, wenn das wahr ist, tun dies als erstes. Ansonsten möchte ich Sie Standard und etwas anderes tun. Wie in diesem Fall können Sie entweder abholen ein positive Zahl oder eine negative Zahl. Sie haben nur zwei Möglichkeiten. Sie brauchen es, um unabhängig ausführen was Ihre Benutzereingaben. So kann man wohl sagen, ist größer als 0? Cool. Drucken Sie eine positive Zahl. Wenn es nicht, drucken Sie eine negative. Jeder gut? Und dann eine Sache zu erkennen ist dass, wenn die, wenn die Bedingung erfüllt ist, die sonst nie auch auszuführen. Nur einer von diesen wird führen zu einem Zeitpunkt. Es ist also ein Kompromiss. Sie erhalten nicht, beides zu haben. Sie haben entweder die erste Bedingung. Sie haben entweder die, wenn oder das andere, nicht beides. Die dann Dinge machen noch komplizierter, weil Sie, wenn tun können, anderes, und dann andere. So dass in diesem Fall haben wir haben drei Bedingungen. Und wiederum, nur eine davon ist am Ende sich gerade ausgeführt wird. So werden Sie vielleicht fragen Nun, was ist, wenn Sie haben etwas, können zwei von diesen zu erfüllen. Vielleicht, was Sie eingegeben sind erfüllt sowohl die Bedingung denn wenn und die else if. Einzige, was los zu laufen ALLISON: Sobald er etwas findet dass sie die Bedingung für das trifft true ergibt, ist das, was es wird laufen und sonst nichts. Also, wenn Sie hatte, ist diese Zahl zwischen 0 und 5 für Ihre erste, oder ist diese Zahl zwischen 3 und 5 für die anderen, wenn ein Teil, und Eingabe der number-- Ich sagte, 0 und 5 und-- 4. Es wird das erste treffen. Es wird sagen, OK, diese Zahl liegt zwischen 0 und 5. Ausführen und verlassen. Es wird nie getroffen, dass zweite Option. Cool? Genial. OK wir haben auch switch-Anweisungen, wenn Sie wollen noch mehr schreiben-- oder Entschuldigung zu bekommen, Schalter ist der nächste. Ich greife vor hier. Auch mehrere, wenn Blöcke wo, wie ich gerade gesagt ist, sobald Sie eine Bedingung zu finden das ist erfüllt und eine if else if else, es hinterlässt. Wenn Sie brauchen, um zu überprüfen, mehrere Dinge, du bist werde, um dieses, weil verwenden möchten es wird jedes Mal hier überprüfen. So wird dies durch und wenn ausführen es ist größer als oder gleich 90, es geht um, dass zu drucken. Und es wird durchlaufen und überprüfen jeden einzelnen von diesen. PUBLIKUM: Also das wäre mehr buggy als [unverständlich]. Würde dies wie [unverständlich] sein? ALLISON: Die Frage ist wäre dies Buggy oder bedeutet das tun, was Sie wollen. Es hängt wirklich davon ab, was Sie wollen aus Ihrem Programm. PUBLIKUM: Ich meine, wie wenn du 90 in. ALLISON: Wenn Sie setzen 90-- PUBLIKUM: [unverständlich]. GABRIEL: Du wirst zwei Dinge zu bekommen. ALLISON: Du wirst zwei Dinge zu bekommen. Ja, zwei. Rob Bowden: Zwei? ALLISON: No. Rob Bowden: Vier. Wenn Sie setzen 90, es wird Ihnen sagen, bekam ein A finden Sie eine B bekam Sie eine C bekam, Sie D. bekam PUBLIKUM: [unverständlich]. ALLISON: Richtig. So hängt ich auf, was Sie von dir will Programm. Manchmal Sie brauchen überprüfen Sie mehrere Dinge. Sie werden viel tiefer in das bekommen, was Gutes Design ist, wie Sie vorwärts gehen. Die wichtige Sache zu bewusst ist, dass diese wird alle vier Bedingungen hier überprüfen. Wohingegen, wenn dies eine if else if sonst wenn sonst wäre es, dass die ersten Fall getroffen, es wäre zu drucken Sie bekam ein A und durchgeführt werden. Rob Bowden: Auch wenn wir beschlossen, dies zu ändern, wenn und größer als oder gleich 90, wenn und größer oder gleich 80, und weniger als oder gleich 89, wenn n größer als oder gleich 70, und n kleiner oder gleich 79, so daß richtig sein wird. Das wird das tun, was wir wollen, aber es immer noch überprüft jedes einzelne es. Während also im ersten Fall, wenn wir Geben Sie 90 mit nur wenn else if else if, und wir geben 90, dann es geht um zu korrigieren. Es wird das erste Rückschlag ein, drucken Sie bekam ein A, überspringen alles, weil es schon gefunden, die funktioniert. In allen Fällen gegenseitig aus auf, wenn else if else if basiert. So werde es die execute zuerst, wenn, dann ist es geschafft. Es wird bis zum Ende zu gehen. Wohingegen, wenn wir uns verändern dies zu sein, was ich war verständlich mit weniger als oder gleich 89. Es wird die erste zu überprüfen. Es wird gedruckt. Es wird die zweite überprüfen. Es wird nicht zu drucken. Überprüfen Sie die dritte. Nicht Drucklegung. Überprüfen Sie die vierte. Jetzt Drucklegung. Also in diesem Fall, die else if Version, da diese Fälle sich gegenseitig ausschließen, ist es bessere Nutzung, wenn else if else if, denn das ist zu haben, weniger Kontrollen der Bedingungen als diese Version. ALLISON: Awesome. Also eine andere Sache, wir können zu tun ist, switch-Anweisungen. Im Grunde eine switch-Anweisung nimmt in einigen Variablen, in diesem Fall ist es n, und bestimmt, welcher Fall zur Ausführung. So ist dies auch ein, wo Ihre Fälle sollte Art gegenseitig ausschließen. So dass in diesem Fall, wenn wir wir bekommen eine Eins, ist es werde übereinstimmen was immer das variable-- unabhängig vom Wert von n ist auf einen dieser Fälle so 1, 2, oder 3, und drucken Sie die entsprechende Zeile. Und dann, wenn Sie sich hier bemerken, wir haben auch eine Standardeinstellung was Sie denken kann der als anderes. Also, wenn Sie eine andere Zahl abholen neben 1, 2 und 3 in diesem Fall es nur geht ungültig zu drucken. Die Entscheidung, wann ifs Vergleich verwenden wenn im Vergleich zu Switches elses wird etwas zu sein, dass Sie Jungs siehe Planungs klug wie Sie anfangen zu schreiben komplizierter Programme und es gibt keine festen Regeln von wann sie zu verwenden. Es hängt wirklich von Ihrem Kontext. Rob Bowden: Und gerade um es dort zu werfen da es bequemer Schnitt. Schalter, neigen sie dazu, be-- so dass Sie beschränkt sind in der Anzahl der Möglichkeiten, wie Sie sie verwenden können, weil ifs, die Bedingung kann schön sein alles, was Sie wollen. Mit schaltet die Fälle müssen Zahlen sein, oder technisch können sie Zeichen sein, aber Zeichen, wie wir sehen werden, sind nur Zahlen. Also müssen sie Zahlen, aber Schalter sein sind wirklich effizienter als wenn else if else if, denn auch am Beispiel before-- gut, die Note B. scheint gut. Nun lassen Sie uns sagen hier, wir stattdessen tun dies als wenn else if else if-Szenario. Also, wenn n gleich 1 entspricht, drucken Sie eine geringe Anzahl abgeholt. Wenn sonst wenn n gleich gleich 2 ist, Sie eine mittlere Anzahl abgeholt. Else if Gleichen gleich 3 ist, hoch. Else ungültig. Also lassen Sie uns sagen, dass war unser Szenario. Also lassen Sie uns sagen, wir geben 4, so erwarten wir, ungültig. Die Art und Weise, dass, wenn sonst, wenn sonst wenn Ansatz funktionieren wird ist überprüft die erste Bedingung. Es ist nicht zufrieden. So prüfen wir die zweite Bedingung. Es ist nicht zufrieden. Überprüfen Sie die dritte Bedingung. Nicht zufrieden. So gehen wir in die andere und ausdrucken ungültig. Die Art und Weise die Schaltwerke ist es kompiliert unten in das, was wir gehen um eine Sprungtabelle aufrufen. Die Grundidee ist, dass, wenn Sie geben 4, sie kann unmittelbar die Grund gehen. Es muss nicht am Ich Fall 1 zu überprüfen? Nö, das ist es nicht. Fall 2? Nope. Fall 3? Nope. Default. OK, dies muss in dem sein Ich möchten, und führen Sie dann das. Nein, springt er sofort an den Standard. Oder es gebe ich zwei, es ist sofort los, um zum 2 gehen ohne dass durch Fall 1 gehen. So in dieser Weise realistisch heutzutage das ist nicht so viel von einem Effizienzgewinn. Gewöhnlich Computern sind ziemlich schnell, und das ist nicht so toll. Aber es der Fall ist, dass Switches sind schneller. Wenn Sie versuchen wirklich zu optimieren, verwenden Sie einen Schalter. ALLISON: Kühle. Und dann haben wir ternäre Operator. Also ich weiß, dass ich bereits erwähnt das Wort syntaktischer Zucker. So ist es nur Dinge, die Ihr Code viel prägnanter. Also das ist einer jener Fälle. So ternäre Operator ist Fragezeichen Doppelpunkt, wie wir in der Zeile String sehen s gleich n größer als 100 Fragezeichen-Hochdick gering. Also im Grunde, wie dies funktioniert, ist es die n größer als 100 ist eine Bedingung. Also ich denke, es kann sinnvoll sein. Es ist wie eine Frage zu stellen. Es ist zu sagen oh, ist n größer als 100 ist. Wer weiß? Und falls die Auswertung wahr, es wird Ihnen das erste, was ist dort aufgelistet, was hoch ist. Ansonsten, es wird Sie günstig zu geben. Also das ist nur eine wirklich einfache und effizienteste Weg, um wie ein, wenn anderes zu tun. Das ist alles, das ist. Und wenn wir, dies zu schreiben waren als wenn sonst bedingte, es wäre, wenn n größer ist als 100, kehren hoch. Else, zurückzukehren gering. Dies ist nur ein sehr viel prägnante Art, es zu schreiben. Rob Bowden: Also das besondere Beispiel wird, wenn Sie etwas zu tun wie diese, ist dies die Muster wo ich ternären sehr häufig. So haben wir nicht über Umfang noch gesprochen, aber ich hasse es, string s Semikolon. Wenn n größer als 100 ist, ist gleich s hoch. Else, gleich s gering. So dass Muster, die fünf Zeilen Code buchstäblich 100% der Zeit, können in das, was übertragen werden war dort mit einem ternären. Also das ternäre, eine Zeile Code. Die if else, fünf. Das ist ein Beispiel, das ich hinweisen aus jeder einzelne Zeit. Dies würde großartiger Ort für einen ternären Operator. Es ist so sauber. Aber die Menschen neigen dazu, nie benutzen. ALLISON: Nehmen Sie es weg Gabe. GABRIEL: So, jetzt euch alle in der Vorlesung in dieser Woche gelernt dass alles in einem Computer ist binär, nicht wahr? Genau wie die Lampen hier. Sie kann entweder ein- und ausgeschaltet. Und alles, ich meine buchstäblich alles. Einige Zahlen und Zeichen und Zeichenfolgen, und selbst der Code, den Sie schreiben, wenn Es wird zu Maschine kompiliert Code und solche Sachen, so dass es läuft alles auf 0 und 1 '. Und so, wenn wir tun mit ganzen Zahlen, die ist etwas, das technisch sehr ist einfach ist, sollten wir in der Lage, Dinge zu tun wie das Hinzufügen von ihnen, das ist wahrscheinlich eine der einfachsten Dinge Sie zwei ganze Zahlen tun können, oder? So Addition und Subtraktion funktioniert wie es funktioniert dezimal, Ausnahme hier ist es binäre, nicht wahr? So ist es in der Basis zwei. So fügen Sie 1 plus 1. Das gibt 0 und 1 überträgt. Und einfach weiter das tun, So, jetzt kommt die interessantere Frage. Wir wissen, wie man alle vertreten positive ganze Zahlen in dem Computer, aber wir machen dies eine Übung. Pretend you guys 1960 oder sind alle etwas versuchen, einen Computer zu erstellen, und man muss sich aus kommen, haben eine Art der Speicherung von minus 1, zum Beispiel, oder abzüglich Integer für diese Angelegenheit. Wie würden Sie das tun? Irgendwelche Ideen? Wirf alles auf mich. Ja? PUBLIKUM: [unverständlich] bezeichnen eine besondere, wenn Ihr [unverständlich]. GABRIEL: Sie können ein benennen Sonder Bit, das 0 oder 1 sein wird. Nehmen wir an, ein, wenn es positive und 0, wenn es negativ ist. Und dann wird der Rest der Bit- ist, nur um die Nummer zu speichern. Cool. Also das ist eine sehr gute Idee. Wir haben, ich weiß nicht, 200. Und wenn das erste Bit eingeschaltet ist, dann ist es plus 200. Wenn es ausgeschaltet ist, ist es minus 200. Cool. Es gibt nur einen kleinen Problem dabei, Das ist, wenn wir versuchen, die Dinge zusammenzufassen. So vorstellen, die wir hier haben 11111 und wir Summieren dies mit 00.100 was auch immer. Wenn diese beiden sind positiv, das ist in Ordnung. Aber dann, wenn eine der sie ist negativ, wie sagen wir mal, dass dieses bisschen hier ist derjenige, der verantwortlich ist for-- Ich werde einen separate-- machen so ist dies ein Mittel, dass diese Zahl hier ist positiv. Dieses bedeutet, dass diese Nummer hier negativ ist, oder? Aber wenn man dann werde sie zusammenfassen, können Sie brauchen eine if-Anweisung sagen oh, wenn dies 0, dann meine Summe wird etwas anderes, oder? Also gibt es eine leicht mehr cleverer Weg, um zu tun daß die Zweierkomplement genannt wird. Also im Grunde, was wir tun wird definieren wir minus 1 um die Sache, dass, wenn fügen wir bis zu 1 gibt uns 0. Lassen Sie mich wiederholen, dass. Also lassen Sie uns sagen, dass dies hier ein. Was ist die Sache, die natürlich im positiven ganzen Zahlen derjenigen aufgenommen gibt uns 0? Was ist, wenn wir versuchen, es zu dieser Nummer hinzufügen? Wir werden have-- OK, also fügen wir. Wir werden 1 plus 1 haben 0 ist, und dann ist es vorbei führt. Und dann werden wir wieder 0 zu erhalten. Ich bin verwirrt. Und Sie gehen auf 0 zu bekommen sind und 0 und 0 und 0 und 0 und 0. Viel 0en. Im allerletzten ein, wir sind nicht werde es tragen über der Lage sein, weil wir sagen, das wir nur den Umgang mit einem Byte, so dass nur 8 Bit. Also, was der Computer tut standardmäßig nur vergisst, dass [unverständlich], OK? Also das ist, was man das Zweierkomplement. Wir definieren einfach minus 1 bis das sein Sache hier, dass, wenn Sie, dass auf 1 hinzufügen würde Ihnen 0. Und das ist ziemlich cool weil wir nicht wirklich brauchen spät zu implementieren eine andere Art von Summen je nachdem, ob das ist negative oder eine positive Zahl. Ist das sinnvoll? Also eine Sache, die wir tun, ein, um sich zu konvertieren zwischen einem positiven und einem negativen Ganzzahl wird dann drehen wir alles, und dann werden wir ein auf diese Zahl hinzuzufügen. Wenn Sie versuchen, es selbst zu tun auf einem Stück Papier, Sie gehen, um zu sehen, das macht Sinn. Aber wenn ich diese Nummer nehmen hier, das ist fünf. Also, wenn ich Flip alles hier, also 1, 1, 1, 1, 1. Flip, Flip, Flip. Und dann habe ich 1 hinzufügen, um es. Ich werde genau minus 5 haben. OK? Dies macht Sinn, Art, denn wenn Sie versuchen, das mit der Anzahl Summe dass wir vor, die was-- wir Flip dies erneut. Es war 101 und viele 0en. Wenn Sie versuchen, diese Add zwei Zahlen, Sie gehen zu genau 0 haben. Ok. Noch Fragen? PUBLIKUM: [unverständlich] GABRIEL: Was meinst du damit? PUBLIKUM: Negative zu positive [unverständlich]. GABRIEL: Nein, Flip Sie und Sie ein immer hinzufügen. Ja. OK, also Zeichen auch kodierte Binärdateien. Wir haben ASCII-Tabelle, wie Sie sah auch in der Vorlesung, nicht wahr? So ist es im Grunde ein Mapping der Dinge. Und hier kann ich nicht genug betonen dass für einen Computer, ein 65 gibt buchstäblich dasselbe. Also, wenn ich etwas schreiben wie char c gleich ein, konnte ich gleichzeitig schreiben Sie einfach 65 hier, und es würde genau das gleiche sein, OK? Es gibt keinen Unterschied. Wir neigen in der Regel zu setzen Zeichen in Variablen des Typs. Char, nicht weil sie im wesentlichen für das gemacht, sondern weil menschlicher Konvention. Aber man kann nur mit ganzen Zahlen umgehen anstelle von Variablen vom Typ char, und alles wird gut. Der einzige tatsächliche Unterschied zwischen einem char c und int i ist, dass ein int hat vier Bytes in den meisten Systeme, während ein char hat ein Byte. Sie sind im Wesentlichen die dasselbe in Bezug auf die Daten. Also, was wird hier drucken? Hier wir Drucken einer Ziffer mit printf mit einem Plus 1, und genau wie ganze Zahlen, Zeichen können summiert werden, um Zeichen können auch zusammengefaßt werden. Also das ist genau 65. Also es geht um sein 66, und hier haben wir 65 plus wenig ein Minus großen A, was sein wird, weiß ich nicht wirklich wissen. Aber es wird genau die Lücke zwischen den Großbuchstaben und die kleineren Buchstaben, so wir werden klein ein, oder? Ja. Also das wird ein Druck Charakter, der genau ist dieses ein. Gut? Noch Fragen? Hier haben wir eine Reihe von verschiedenen Typen für numerische Variablen. Wir reden schon über int. Float ist nur ein Weg zu-- dies wirklich lustig, denn als ich zum ersten Mal gelernt um in den Tag mit Programm wieder Python, das erste Programm, das ich je versuchte zu schreiben, sah ich, dass es eine Art gerufen und ein Typ namens Schwimmer. Und der Schwimmer war für alle reellen Zahlen. Also fragte ich, warum sollte Ich je einen int verwenden dann? Denn wenn ich alle verwenden reellen Zahlen mit einem Schwimmer, Ich würde einfach aufhören mit ints, nicht wahr? Weil reellen Zahlen sind ähnlich wie generische. Es stellt sich heraus, dass dies in Computern nicht der Fall weil sie im wesentlichen verschiedene Dinge. Also Zahlen und Schwimmern, die Vorgänge, die Sie mit ihnen machen sind wesentlich verschieden, weil der Art, dass sie gespeichert sind, OK? Wir werden ein wenig sprechen bisschen mehr über die in einer Sekunde. Also Doppel ist nur ein größeres Schwimmer. In der Regel in den meisten Systemen ein Schwimmer ist vier Bytes, genau wie ein int. Und ein Doppel acht Bytes. Eine lange, lange ist eigentlich nur ein Symbol dass Sie anhängen zu einem Typ wie int. Sie sagen, long long int wie diese. Lange lange int x, um ihn zu verlängern. Also in den meisten Systemen, das wird acht Bytes statt der üblichen vier. Und man kann tatsächlich fallen die in, so kann es nur sagen, lange, lange, und das funktioniert auch, OK? Sie können auch andere Dinge, wie zu tun unsigned int oder wieder nur unsigned würde auch funktionieren. Und das würde x eine Variable sein wie alles positiv ist, so kann man nicht wirklich negativ Zahlen in der Weise, dass wir hier oben sah. Also folgende wunderbare Gleitkomma und Präzision. Das ist einer der Gründe, warum Sie wollen ints statt Schwimmer zu verwenden, weil ints zu 100% präzise, ​​richtig? Es ist genau diese Zahl. Für schwimmende Punkte, wenn Sie sagen Antwort gleich 1 über 10-- Ich bin zufällig auf diese genauen haben Programm hier float.c. Die Drucke auf 20 Dezimalstellen. 1 geteilt durch 10, und Regel 0.1 ist, richtig? Aber hier, wenn wir schweben und dann laufen wir, wir sehen, dass es ist nicht genau 0,1. Es ist 0.149 etwas. Und warum ist das so? Weil du nicht wirklich darstellen kann jeder einzige mögliche reelle Zahl im Speicher weil es überabzählbar viele von ihnen. Also sind wir technisch nur in der Lage, stellen eine begrenzte Menge davon mit einer begrenzten Datenmenge. Aber es ist wirklich interessant. Jetzt Das wirft die Frage, wie man es gehen zu repräsentieren dies mit Bits, oder? Also, wie Schwimmer gespeichert? Mit ganzen Zahlen war es leicht. Aber mit Schwimmern Sie wollen um die Reichweite zu maximieren, und Sie in der Lage sein zu vertreten sein wollen großer Zahl und sehr kleinen Zahlen wie 0.000001 gleichzeitig. Also noch einmal, dasselbe Spiel. Hat jemand eine Idee, wie wir konnten, gehen zu repräsentieren float in Erinnerung? Wirf nichts. Ja, bitte. PUBLIKUM: [unverständlich], wie wenn es zwei ints und ein wobei die [unverständlich] und ein Wesen alles nach dem Komma. GABRIEL: OK, cool. Also zwei verschiedene Zahlen. Sie können 12,45 haben, das ist also 12 und 45. Nizza. Was ehe du sagen? Die gleiche Sache? Ja? PUBLIKUM: [unverständlich] Notation Hier können Sie den zu trennen. GABRIEL: Wissenschaftliche Notation, ja das ist in der Regel, was passiert. So ist dies das sogenannte Mantisse. Das ist, was ist eigentlich die Nummer, und der Exponent ist nur, wo das Komma, oder? Also das wird etwas sein der Form 1, 2, 3, 4, 5 mal 10 mit dem Minus-4. Ich habe gerade dass-- ja klar, genau. Und dann diese 10 hoch minus 4 gehen zu definieren, wo das Komma, OK? In Brasilien verwenden wir Komma. Hier können Jungs verwenden Sie einen Punkt. So ein Punkt. Und das ist cool, denn dann können Sie konzentrieren viele Ihrer Bits auf dieser Kerl Hier, auf der Mantisse und dann ist das gehen, um Ihre tatsächliche Präzision sein. Und Sie können dies entweder in Dezimal tun oder in dem binären System basiert. Es gibt verschiedene Möglichkeiten, um dies zu implementieren. Haben Sie Fragen? Ja? PUBLIKUM: Wie viele Plätze nach dem Komma [unverständlich]? GABRIEL: Das ist eine komplizierte Frage, weil es nie wirklich 100% präzise, weil, wie Sie hier, für sehen einige Zahlen, es ist 100% genau. Ich glaube, wenn wir 0,5 hier es wird zu 100% genau. Es wird 0.500000 sein. Also in diesem Fall, ist es perfekt. Aber in anderen Fällen, es ist viel weniger perfekt. Nach meiner Erfahrung, wie bis zu vier, fünf Nachkommastellen ist ziemlich präzise. Wenn Sie einen doppelten nutzen zu können, um gehen sein Weg genauer als das, OK? Rob Bowden: Also einfach zu werfen einige mehr Kontext bei Schwimmern, Ich erinnere mich nie 100% wie das spec von Schwimmern tatsächlich funktioniert, aber ich Sie immer daran denken, dass Schwimmer anfangen, chaotisch. Also die Idee ist, dass, wenn Sie wirklich, wirklich großen Zahlen oder wirklich, wirklich kleine Zahlen, beginnen wir immer schlimmer bei differen zwischen zwei nahe schwimmt. Also, wie Ich mag über ist glaube mit Gleitkomma-Ungenauigkeit, gibt es zwei Schwimmern wenn ich versuche, sie zu spezifizieren in C, obwohl sie sind verschiedene Zahlen, sie gehen, um sein als die gleiche Zahl interpretiert, denn wir können nicht anders speichern. Wir müssen die gleichen Bits verwenden. Und so, wenn wir zu bekommen wirklich, wirklich großen Zahlen, reden wie 10 bis 300 oder etwas, ist es an diesem Punkt dass 10 bis die 300 oder 5 mal 10 300 kann nicht unterschieden werden, 7 mal 10 300. Also das ist ein ziemlich großer Unterschied zwischen den beiden Zahlen. Aber dann, wenn Sie unten zu den normalen Bereich Dinge, Sie neigen hübsch sein gut differen. Und dann, wenn Sie unten wirklich klein, du bist auch immer wieder ziemlich schlecht. So wie eine ganze Reihe von 0.0000, wird es ziemlich schlecht. GABRIEL: Ja, so eine kurze Notiz. Dies nie tun. Versuchen Sie nie, zu vergleichen Floats mit equals Gleichen denn auch wenn sie fast das gleich, nahezu gleich ist nicht gleich. Also, was Sie in der Regel tun, ist Ihnen zu subtrahieren sie nehmen den absoluten Wert, dass, und sehen, ob das ist kleiner als 0,0001 oder so ähnlich, OK? Und cool. Ich kenne eine Menge Leute haben Einige Hintergrundinformationen in Java, vor allem diejenigen, die tat AP Informatik, richtig? Und Java ist eine Sprache dass vor allem auf Basis von C, es hat ein paar sehr große Unterschiede. Aber für Schleifen und ifs, und solche Sachen dass, sie sind alle die gleiche Syntax. Ich habe ein paar Programme hier, um das zu zeigen. So zum Beispiel, ein einfaches Hallo Welt. Dies ist Hallo Welt in C, die Sie Jungs sind auf jeden Fall vertraut mit, und dieses und dieses ist in Java. Also in Java haben wir dieses public class, hallo Welt und public static void Haupt und String args. Die String args gehen in C sehr kurz erscheinen. Aber lassen Sie uns noch nicht da zu gehen. Im Moment haben wir Leere hier, was bedeutet, dass Haupt nicht nehmen keine Argumente. Und dann haben wir System.out.println, ist das, und dass Art des Ersatz für printf. Hier haben wir nicht wirklich brauchen, den Backslash n, weil Druck ln tut das für Sie. Es hängt den umgekehrten Schrägstrich n am Ende der Zeile. Aber wenn Sie in zu gehen so etwas wie eine für Sie kann sehen, dass sie so ziemlich dasselbe. So Initialisierung und Zustand, und der Aktualisierungs ist-- ich einen Raum verpasst hier-- sie so ziemlich dasselbe, außer Java hat als einige hohe Zeug. Hier können wir tun zzgl I und Java wird automatisch machen dieses i hier, das ist eine ganze Zahl ist, in eine Zeichenkette, und dann anhängen die zwei Strings zusammen. Hier in C müssen wir tun, die &% d. Die Linie hier, die für sieht genau das gleiche. Und wenn wir uns, wenn der ifs auch sehen genau gleich aus, oder? So sind die wirklich großen Unterschiede sind in den Dingen, die Sie hier sehen. Öffentliche statische, nichtig und dann öffentliche Klasse, wenn. Also Java hat, was bezeichnet eine virtuelle Maschine. Und es ist sehr stark auf, was auf der Basis nennt die objektorientierte Programmierung, das ist ein sehr, sehr verbreitet ist Paradigma für die Programmierung heutzutage. Und diese Klasse ist, was Sie sehen, etwas von Objektorientierung, ist eine Klasse, die Sie erstellen und dann können Objekte aus dieser Klasse abzuleiten. Wir gehen nicht allzu sprechen viel darüber in CS50, aber das ist auf jeden Fall etwas wirklich cool, vor allem, wenn Sie in gehen wollen anspruchsvoller Web-Entwicklung am Ende der Strecke, wie bitte Ihre Abschlussprojekt und ein paar schöne Rahmen und so. Also im Grunde die Idee ist, dass Sie nicht neu zu implementieren etwas wollen, so dass Sie etwas, das ist zu schaffen sehr allgemein, wie die Form, und dann können Sie zu erstellen verschiedene Formen von ihr, und dann von jedem Diese Formen, erstellen Sie einige weitere spezifische Formen in drei Dimensionen oder so ähnlich. Und sie diese Hierarchie haben erben von den anderen, so alle Funktionen und alle Variablen, die große Form hat hier, alle diese gehen zu müssen, und alle von diesen sind zu gehen, und so weiter und so weiter haben. Also das ist die Grundidee. C nicht über das, aber C ++ hat diese Art von Funktion. Und Java ist stark beeinflusst durch Objektorientierung, also, warum Sie sehen Klasse die ganze Zeit hier. Und die andere Sache ist Dieses Java Virtual Machine. Also das, denke ich, ist eine sehr gute Idee. Also, was die Leute, die erfunden java tat, ist sie wollte nicht ihren Code zweimal kompilieren wenn sie es in einer Windows laufen hatte, oder ein Mac oder Linux, so, was sie tun wird sie buchstäblich laufen so etwas wie das Gerät, aber Sie nicht wirklich sehen, es geschieht. So dass sie eine virtuelle Maschine laufen Inneren des Computers, die ist im Grunde wie ein Mini-Betriebssystem. Und das Betriebs Zweck Systems im Leben ist nur zu laufen, was Bytecode genannt. Anstatt also in C, die Art und Weise würden wir kompilieren dies machen, wenn, und führen ./if. Ich habe das Backslash. In Java, Sie als erstes tun würde Java C zu kompilieren, if.c. Es ist nicht C. Es ist dot java. Und dann haben Sie ausführen nicht ./. Sie erhalten diese neue Datei if.class, aber man kann nicht wirklich laufen if.class jetzt nur wie wir vorher. Dies ist keine ausführbare Datei. Sie haben zu laufen. Sie haben, um es in füttern ein Programm namens Java, und das Programm der virtuellen Maschine, Und dann musst du if.class oder wenn. Ja. Und dann funktioniert es. OK, so ist dies Art der virtuellen Maschine geschieht. C nicht, dass so, wenn ich setzen dieses Programm in einer Windows-Maschine, es wäre nicht in C. Arbeit in Java es tut. Haben Sie Fragen? Cool. Das ist, wenn für Superschnitt für heute.