[Powered by Google Translate] [Elektroniczny STATIC SOUNDS]
ROB: Ok, więc co my właśnie przywiózł cię do jest CS50 Spaces.
ALI: Czekaj, czekaj z powrotem.
Witamy w dziale!
ROB: Witamy w dziale!
ALI: Yay!
ROB: Supersection!
ALI: Jestem Ali i to jest Rob.
Dobra, teraz wyjaśnimy Spaces.
ROB: To co właśnie przyniósł cię do jest CS50 Spaces.
Będziesz za pomocą tego dużo w waszych sekcjach tego semestru.
Zasadniczo, mamy już pobrać do urządzenia.
A może myślisz o CS50 Spaces jako interfejs WWW rozmawia urządzenia
że mamy na jakimś serwerze gdzieś.
Więc można uruchomić kod w tym interfejsie, a my będziemy
zobaczyć, jak coś zrobić.
Można też spojrzeć na kod innych osób w dziale, a także -
ALI: I jak niektórzy ludzie odkryli, można rozmawiać ludzi na boku.
A my wszyscy to widzę, zbyt, więc to ekscytujące.
Chodź, chodź i usiądź.
Usiądź.
>> ROB: Tak, sekcje -
ALI: Nie, nie, wy możecie.
ROB: Sekcje będą bardziej interaktywne w tym semestrze.
ALI: Oh, on jest -
Oh.
Okay, cool.
Więc jeśli faceci są po prostu w najbliższych, można udać się do tego linku, jeśli można uzyskać
tam, właśnie tam.
Nie możemy napisać, bo nie ma miejsca na pokładzie, ale ten link
tu, idź do tej, na komputerach, a wejdziesz CS50
Obowiązuje, co jest całkiem fajne.
Okay.
Czy masz jakiś problem?
ROB: Tak można znaleźć problemy -
Musimy być w stanie napisać to gdzieś.
Więc jeśli pójdziesz do cs50.net/psets i to supersection hacker -
i przejść do edycji Hacker z Pset jeden, patrzeć na specyfikacji
gdzieś na stronie -
>> ALI: Więc w zasadzie, podczas gdy Rob patrząc, co będziemy robić w
sekcja jest dziś nie część problemów -
ROB: - na stronie ósmej.
ALI: - zwana część problemów -
ROB: Sekcja pytań.
ALI: Niestety, część pytań.
A to, co mamy zamiar iść na -
są to, co mamy zamiar iść na dziś w sekcji.
I będziemy kodować go na CS50 Spaces, i miejmy nadzieję, że będzie działać.
I możemy po prostu porozmawiać przez nich.
A wy może zadawać pytania, gdy czujesz -
>> ROB: Tak to zaczyna być coś wspólnego z większością psets.
Myślę, że z tym jednym, to mówi, nie musisz oddać te pytania w.
Ale idea jest taka, że ​​te pytania są wprowadzane na PSET i można przyjść
do sekcji, aby na te pytania odpowiedzieć.
Albo, jeśli nie są do sekcji, możesz odebrać je samodzielnie lub uzyskać
Pomoc w godzinach pracy urzędu, czy coś takiego.
Ale są to kwestie, które powinny prep za zestaw problemów.
A na wydanie hakerów, wiele z tych pytań może być tylko o
rozszerza swoją aktualną wiedzę CS.
ALI: Tak, bardzo dużo.
>> Ok, tak, to wszyscy na CS50 Spaces?
Cześć, wejdźcie
SPEAKER 1: Czy możemy zobaczyć adres URL jeszcze raz?
Rob: Tak, to będzie łatwiejsze, gdy są faktycznie w swoich sekcjach, a
Twój TF tylko może wysłać Ci URL wcześniej.
ALI: Yay, usiądź.
Istnieją miejsca tutaj.
Przód nie jest tak źle.
Co?
Więc, CS50 Spaces, mamy się tam dostać.
Czy ktoś ma jakieś pytania, zanim przejdziemy do - co?
ROB: Nie ma jeszcze żadnych kreda.
[Niesłyszalne]
ALI: Przepraszam.
Można użyć paznokcie?
Jesteśmy w bardzo low-tech pokoju za bardzo high-tech klasy.
Ok, jest trochę każdy z dobrym?
Czy ktoś ma wciąż pytania na ten temat?
Jak powiedziałem wcześniej, będziemy przechodzić przez części pytań w
specyfikacje PSET.
Więc jest tylko kilka problemów, które mamy zamiar
zakodować w CS50 Spaces.
Czy wszyscy są dobre?
Okay.
Dobry?
ROB: Czy masz laptopa?
ALI: Można bawić się z Lucasem.
On siedzi obok ciebie.
Czas wiązania.
>> ROB: Tak, zacznij od pierwszego problemu?
ALI: Tak.
Możemy zacząć.
Chcesz mnie -
Mogę iść.
Więc idziemy do specyfikacji PSET.
Oh, to dlaczego -
ROB: Control.
ALI: Dobra, więc jedziemy do odpowiedzi te rzeczy, jak również?
ROB: Oh, yeah.
So -
ALI: Oh, wszyscy się obserwacją Roba spodenki z udziałem?
Okay, cool.
ROB: Tak, ja nie sądzę, że muszą oczekiwać, aby mieć
Oglądałem go przed wejściem do tej sekcji, ale możemy omawiać tych
problemy wcześniej, ponieważ są one w sekcji pytań rzeczy.
Więc jeśli nie obserwował go, nie martw się.
Ci, którzy mogą spróbować odpowiedzieć.
>> Więc pierwsze pytanie, co to jest pre-procesor, w jaki sposób: # include
odnoszą?
Więc czy ktoś ma odpowiedzi na to?
Ali: Macie może mówić to.
Jasne, śmiało.
SPEAKER 2: # include pewne pre-napisany kod, a zamiast
kopiowanie i wklejanie go w programie, po prostu mówiąc, m.in. to,
pre-procesor wie, że tam jest i że powinien dodać go w
później lub wcześniej nic się nie dzieje.
ALI: Tak, super.
Cool.
ROB: Tak, gdy jesteś rzeczywiście kompilacji programu, pre-processor jest to
pierwszy krok.
Kompilacja odbywa się w czterech dużych kroków.
Tak pre-processor jest pierwszy duży, i to jest ten facet, który idzie
przez i wygląda dla wszystkich tych mieszania symboli.
I każda linia, która zaczyna się od skrótu, pre-procesor patrzy na to i widzi
jeśli można go przetworzyć.
Tak # include mówi pre-procesor szukać jakiegoś cs50.h
pliku i po prostu skopiować i wkleić jego zawartość do tego pliku.
Tak naprawdę można # include cokolwiek chcesz, ale to w większości będzie
Pliki. Godz.
Nie dostał się do # zdefiniować jeszcze, więc to nie ma znaczenia.
ALI: Tak, jesteśmy dobrzy w tym jednym.
Czy ktoś ma jakieś pytania dotyczące tego?
Czy mamy dobre?
Następne pytanie.
>> SPEAKER 3: W skrócie, było coś o c, jak również.?
Jakie to ma znaczenie, czy jest to bez znaczenia?
ROB: O C z pre-procesor.?
SPEAKER 3: Tak, albo ja coś wymyślić?
ROB: Tak krótko można było pokazywanie wstępnie przetwarza ten plik i
. wyprowadzanie go do innego pliku C, dzięki czemu można wstępnie przetworzyć ten plik -
kiedy po prostu biec jak, zrobić cześć lub hello.c dzyń, robisz wszystko
Kompilacja w jednym dużym kroku.
Ale można to zrobić bezpośrednio w swoich oddzielnych etapach.
Tak więc najpierw można wstępnie przetworzyć.
Następnie można skompilować, a następnie można zebrać, a następnie można połączyć.
Dojdziemy do tych pozostałych.
Ale wstępne przetwarzanie, to rodzaj wstępnej procesu, a następnie przechodzi do
inny plik. c.
Ponieważ wstępne przetwarzanie naprawdę nie zmienia niczego.
To tylko kilka kopii i wklejanie.
Można ręcznie skopiować i wkleić go samodzielnie.
ALI:. I stało się jasne, że plik c jest plik C, więc jest to
w kodzie C.
Tak to się dzieje z kodu C do kodu C.
Jesteś po prostu dodanie większej ilości kodu z funta.
ROB: Po wstępnej obróbce to, to nadal ważny plik C.
SPEAKER 3: Dobra.
ALI: Dobre pytanie.
Podoba mi się.
Dobra, następne pytanie.
>> Co kompilator?
Ktokolwiek?
Tak.
GŁOŚNIK 4: To zmienia wstępnie przetworzonych kod do montażu.
ALI: Perfect.
ROB: Tak.
ALI: Cool.
ROB: Więc to, co kompilator robi specjalnie
kiedy używamy szczęk.
W sensie bardzo ogólnym, kompilator jest jak biorąc kod w jednym języku
i zamieniając go w innym języku.
Więc w C -
czy dobrze, Clang bierze kod jest w C i przekształcenie go do zespołu.
I nie muszą być w stanie zrozumieć zespół w ogóle.
Ale to jest język, to zamieniając je.
>> ALI: Dobra.
A potem, co to assembler?
Ktokolwiek?
GŁOŚNIK 5: [niesłyszalne] binarny?
ALI: Przepraszam, co?
GŁOŚNIK 5: [niesłyszalne] binarny?
ROB: Tak.
ALI: Tak.
ROB: Tak assembler -
Kod montaż jest naprawdę blisko tego, co komputer może zrozumieć,
ale pamiętaj, że nie bardzo rozumiem tekst
to jest kod montaż.
Musisz przekonwertować go na prostej 1s i 0s.
To jak bezpośredniego procesu tłumaczenia.
Moglibyśmy dać tabelę mapy, co każdy
instrukcja montażu oznacza.
Ale assembler jest po prostu robi to tłumaczenie dla Ciebie.
To przekształcenie kodu assemblera na 1s i 0s.
>> ALI: A potem, na ostatniej, co jest łącznikiem?
A w jaki sposób-lcs50 odnoszą?
Ktokolwiek?
ROB: To jest najtrudniejsza i najmniej wyjaśnił jeden w filmie kompilatora.
ALI: Czy ktoś pamięta z widzeniem-lcs50 w poleceniu?
SPEAKER 6: Kiedy poszedłem do wykonania.
ALI: Jest w make.
Tak, cool, okay.
Czy są jakieś domysły lub mglistych - Tak, proszę.
SPEAKER 7: Nie jestem pewien, ponieważ był bardzo krótki [niesłyszalne], ale to było
coś robić oddzielnych plików z każdej bibliotece, a następnie wprowadzenie
je wszystkie razem w jednej bibliotece?
ROB: Tak.
Więc kiedy masz hello.c, to naprawdę prosty program.
Naprawdę tylko to jedno w nim.
Ale kiedy się do innych programów -
i myślę, że nawet jeśli w swoich programach getString, trzeba zacząć
w tym z innych plików.
Więc biblioteka CS50 jest jeden taki plik w którym mamy implementacje
z getString i getInt i wszystkich tych rzeczy.
Więc co linker robi to krąży patrząc przez wszystkie te
plików, widząc gdzie funkcje są zdefiniowane, upewniając się, że kiedy dzwonię
GetString gdzieś, to wie, że getString oznacza, że ​​jest
GetString przekazany w CS50 biblioteki.
Więc linker zajmuje tylko wszystkie te pliki, rozbija je razem, a teraz
masz plik wykonywalny.
Pamiętaj więc, jeśli używasz CS50 bibliotekę, trzeba mieć
# Include w górę, a następnie również w komendy make, jak ty
powiedział, trzeba mieć-lcs50.
Tak więc nie można po prostu mieć.
Więc to jest po prostu coś, aby pamiętać w przyszłości.
>> GŁOŚNIK 8: Więc, powiedzmy nie było innej biblioteki, jak cs51.h, chcielibyśmy
również dodać-lcs51?
ROB: Jedyny powód to-lcs50 działa idealnie, ponieważ mamy ten zestaw
się w określonym miejscu w swoich urządzeń tak, że nie wie, co
-Lcs50 środków.
Moglibyśmy dać cs50.c plik, a następnie można go skompilować, mówiąc
Clang hello.c cs50.c, a następnie, czy miałoby to plik wykonywalny, umieszczając
te dwa pliki razem.
Wie, że-lcs50 oznacza cs50.c przekazany jakiegoś katalogu, że określony w
urządzenia elektryczne.
Więc jeśli chcesz być cs51.c Definiowany przez tylko mówię-lcs51,
wówczas musimy także umieścić go w tym katalogu, więc wie, gdzie
szukać.
ALI: Jakie było twoje pytanie?
>> SPEAKER 7: Dlaczego musisz połączyć CS50
jeśli - wasn't to skopiować / wkleić w pierwszym etapie, kiedy wstępnie przetworzonego go?
ALI: Czy chcesz wziąć?
ROB: Oczywiście.
Więc cs50.h plik jest oddzielony od cs50.c pliku C.
Masz już mogła funkcjonować w prototypy w klasie?
Okay.
Więc w zasadzie, jest tylko plik cs50.h zamiar skopiować i wkleić -
ALI: Czy wiecie, co podpisy są?
Ok, więc dość dużo, jeśli patrzeć -
ROB: udawajmy cs50.h nie ma.
Teraz ten plik -
robisz getString String s =.
Ale kiedy dotarłeś do tego miejsca w kodzie, nie ma pojęcia, co
GetString jest.
Wie, że jest to funkcja, ponieważ dzwonisz go.
Ale nie wie, że to faktycznie powinien zwrócić ciąg.
Tak jak powiedziałem, string s = getInt, to nie ma żadnego sensu, ponieważ
logujesz integer na ciąg.
Ale nie wie, że GetString ma sensu, ponieważ nie
wiem, że GetString zwraca ciąg znaków.
Więc co cs50.h mówi, że jest coś takiego.
ALI: Więc co Rob pisze jest, to jest obietnica, w taki sposób, że to będzie
mają tę funkcję o nazwie GetString.
ROB: To jest wszystko, cs50.h jest kopiowanie i wklejanie tutaj, jak również
jak getInt i wszystkich tych rzeczy.
A to po prostu mówi, że GetString nie zwraca ciąg znaków.
Nie wiesz, jak to jest realizowane jeszcze, ale gdy dojdziemy do tej linii, teraz
wie, że prawidłowo zwraca ciąg znaków.
>> GŁOŚNIK 9: Więc jeśli nie próbuj z # include rzeczy i zamiast
tylko napisał prototyp tych, które mamy faktycznie będzie w użyciu?
ROB: Tak.
Więc uruchom to.
GŁOŚNIK 9: Czy to jest?
Więc, domyślnie to zrobić-l CS50 tylko dlatego -.
ROB: - wyrażenie.
ALI: Tak, bo jak powiedział, to w pliku make.
ROB: cs50.h także dzieje się typedef char * na string.
Można całkowicie zignorować, co to znaczy teraz.
Ale jest też coś włączone cs50.h.
Więc teraz wszystko działało perfekcyjnie.
To działa dokładnie tak samo jak wtedy, gdy mieliśmy tylko
# include.
I tak się dzieje z tym cs50.h over-takie rzeczy trzeba -
jak, nie używać getInt w tym programie, ale to nie ma znaczenia.
To będzie po prostu zignorować.
ALI: A kiedy zrobisz-lcs50 tu i tu, co się dzieje
na to jest fakt, że ma się do wdrożenia kod rzeczywisty.
Więc to, gdzie faktycznie jest, robi -
pisania kodu dla getString.
Więc to nie jest tylko obietnica już.
To jest rzeczywiście przeżywa i biorąc łańcuch i wszystkie takie rzeczy.
Ma sens?
Pytania? Dobrze.
Fajne fasola.
>> ROB: Teraz możemy przejść do rzeczywistego kodu.
ALI: Dobra.
Więc tutaj jest pierwszy problem.
Więc mówi napisać program, który pyta użytkownika o małe
pismo, a następnie konwertuje go na duże litery bez użycia bitowe
operacji, jak na wyjściu próbki poniżej.
Więc widać, należy uruchomić program z. / A.out, a następnie jesteś
zamiar umieścić w małych, a następnie Twój program powinien dać się kapitał
A. Dlaczego więc nie macie wszystko dać mu szansę na CS50 Spaces?
Więc wy chłopaki wszystko może udać się tutaj.
I można usunąć cały kod tutaj.
A potem można iść dalej i zacząć pisać rzeczy.
ROB: Pewnie chcesz używać getchar, to jest
zawarte w CS50 biblioteki.
ALI: Chyba byłoby lepiej, jeśli zapiszesz górną część.
Więc może chcesz po prostu zmienić rzeczy w środku.
Idź przed siebie i działać.
Tutaj do pracy ze sobą.
Rob: A możesz zadawać pytania, jeśli masz -
>> GŁOŚNIK 10: Co to jest operacja bitowa?
ROB: Tak, zignorować tego problemu.
ALI: Jeśli nie wiesz, że to dobrze.
ROB: Mamy zamiar używać go w następnym problemem.
Ale jeśli nie wiesz, co operatory bitowe jest to, że jest w porządku.
GŁOŚNIK 10: Czy to jest jak włączenie go do kodu ASCII?
ALI: No
ROB: Nie
Możesz to zrobić dla tego problemu.
GŁOŚNIK 10: Jak to zrobić?
Więc jeśli tylko miał gdzieś pisać -
ALI: Albo coś do pisania.
ROB: mogłem po prostu rodzaj typu do tego.
ALI: Typ na górze.
ROB: Oh, ja siedzę na mikrofon.
>> Tak, widzieliśmy w wykładzie, że wartość ASCII dla kapitału wynosi 65 lat.
Kapitału i B będą 66, i tak dalej.
Więc można dosłownie 'a' oznacza liczbę 65.
Jak to jest wartość 65.
Można zrobić coś jak int x = 100 - 'A'. I teraz x będzie miała wartość
100 - 65.
ALI: że można uruchomić i pokazać, że.
Och, może nie.
Nic nie szkodzi.
ROB: Miałem go wydrukować.
GŁOŚNIK 10: Jak zamienić go z powrotem do postaci?
ALI: Więc jeśli don't -
po prostu zmusić się być char, równa.
ROB: Tak jest -
Rozróżnienie między char i jest liczbą całkowitą tylko pod względem wielkości.
Tak dzieje się całkowitą stanie rzeczy stanowią
się, jak, cztery miliardy.
Char jest tylko w stanie reprezentować rzeczy do 255.
Jednak nie ma różnicy między nimi inna.
Więc można powiedzieć, char c = 65.
To jest równoznaczne z powiedzeniem, char c równa się "A".
ALI: Och, nie.
Faktycznie nie zapisać rzeczy.
ROB: Nie, nie mogę tego zrobić.
ALI: To jest po prostu -
[Wzdycha]
>> ROB: Dobra, więc co Ali po prostu napisał to program, który najpierw drukuje 100 -
"A" jako liczba całkowita, która była 35, jak oczekujemy, bo 100 minus ASCII
wartość wynosi 65.
Potem wydrukować za pomocą% C, co oznacza, interpretują go jako char.
Tak 100 - wynosi 35.
Interpretowanie że jako postać bywa hash symbol.
Jeśli spojrzeć na asciitable.com lub cokolwiek, to zobaczysz, że 35 jest
hash symbol.
ALI: Okay, żadnych innych wyjaśnień na temat tego problemu?
Dobrze, że chłopaki mogą iść do przodu i robić to wtedy.
Zapraszam do zadawania pytań i rozmawiać ze sobą.
Lub jeśli jesteś już zrobione, można odpocząć.
>> LUCAS: Czy są tej samej klasy, wszystkie małe litery w kolejności i
również wielkie są w porządku, bo to jest coś pożytecznego dla
problem.
ALI: Dobry punkt, Lucas.
Tak, czy wy wszyscy się o tym?
GŁOŚNIK 11: Tak.
Oto jak to zrobić, prawda?
ALI: Racja.
ROB: Tak.
GŁOŚNIK 11: [niesłyszalne]
ALI: Dobrze.
ROB: Co to jest pytanie, pytasz?
Wystarczy do konwersji -
ALI: Konwertuje małe litery na wielkie.
To jest to.
ROB: Okay.
ALI: Czy powinniśmy napisać?
Chyba będziemy tylko patrzeć na kogoś innego.
ROB: Tak więc dla tych, którzy mogą być zatrzymany, sposób -
jeśli mam trochę char c, i powiedzmy, że dzieje się litera D.
Więc teraz, w jaki sposób można dowiedzieć się, co litera alfabetu jest C?
Nie D, ale mam na myśli, D dzieje się czwarta litera alfabetu.
A jeśli zaczniemy liczenie od 0, to jest to trzecia litera alfabetu.
Więc jeśli jest 0, B 1, C 2, D 3, jak można dowiedzieć się, int pozycję -
jakie stanowisko alfabetu C jest w?
Czy ktoś ma jakieś pomysły?
ALI: Myślę, że wszyscy kodowania.
ROB: Co z pierwszego?
GŁOŚNIK 12: Więc co jest, odejmij pierwszy?
ROB: Tak.
ALI: Tak, super.
Więc można zrobić kapitałowej D -
O, przepraszam.
Wcielasz się w postać i odjąć pierwszy, jak pan powiedział.
ROB: D Więc jeśli jest coś takiego jak 68, i odejmować, który jest 65, to otrzymamy
3, mówiąc nam, że D jest trzecią literą alfabetu
od 0.
Więc można użyć.
Teraz wiemy, co litera alfabetu, w kategoriach
litery, lub -
możemy zrobić to samo dla małych liter, aby dowiedzieć się, co
małe miejsce, że jesteśmy w.
I możemy używać, aby następnie przekonwertować na wielkie litery przy użyciu
bardzo podobny pomysł.
Zapytaj o sugestie?
>> ALI: Czy wy - Czekaj, nie wiem, jak daleko jesteście.
Czy większość z was zrobić, czy nadal działa, jesteś zablokowany?
Chłopaki można krzyczeć -
zakleszczony.
Jedna osoba jest zakleszczony.
Cool.
Staram się być zatrzymany, too.
GŁOŚNIK 13: skończę.
ALI: Skończyłeś?
Okay.
Gotowe.
GŁOŚNIK 13: [niesłyszalne]
ALI: Tak, cool.
Czy sprawdzanie, czy to w postaci małych liter?
Okay, cool.
Gdzie są inni ludzie?
Czy ta podpowiedź pomoże, jak nie-trzymanie się?
GŁOŚNIK 14: Nie bardzo, ale po prostu dlatego, że nie wiem, nie jestem
strawienie go jeszcze.
ALI: Okay, cool.
Chcesz spróbować -
czy chcesz iść i porozmawiać?
>> ROB: co zamierzam powiedzieć, to -
więc przy użyciu tego produktu.
Czy wiesz, jak dostaliśmy to, co pozycja w alfabecie
List jest w?
GŁOŚNIK 14: Dobrze, więc kiedy można umieścić rzeczy w jednym cytacie,
które zwraca numer?
ROB: Tak.
Zostanie on przetłumaczony na wartość ASCII reprezentuje.
Więc chcesz, aby przejść do tabeli ASCII czy cokolwiek to jest?
ALI: Tylko jeden z nich?
ROB: Tak.
Więc kiedy można umieścić każdy z tych symboli, ignorując wiele -
ALI: [niesłyszalne]
ROB: Oh, za pomocą kursora.
ALI: Tak.
To było ekscytujące.
ROB: Tak, ignorując tych co po lewej stronie, które są specjalne symbole -
Jeśli umieścisz dowolny z tych symboli w pojedynczych cudzysłowach, to będzie
przeliczeniu na wartość na lewo.
ALI: To jest liczba dziesiętna dla niego.
To jak mecze z 65, B do 66, a zauważysz, że wszystkie one są w
alfabetycznie, który robi różnicę.
Tak więc, jak mówi Rob, przed, w tym kodzie, byliśmy obliczaniu odległości od
Pierwszy list, per se.
I to będzie to samo, czy to wielkie i małe litery.
ROB: Więc kiedy zrobiliśmy D, 68 A, 65 minus, mamy 3.
Ponieważ D jest trzy pozycje do alfabetu.
ALI: Więc jak można tłumaczyć, że w ciągu znaleźć trochę d?
ROB: Tak.
Więc jeśli mam 3 teraz, wiem, że chcesz iść na trzy litery -
zdarzy nam się iść małe litery teraz, ale powiedzmy, że chcę iść trzy
Pozycje w małą strony rzeczy.
Więc w jaki sposób można to zrobić?
Wiem, małe jest 97.
Więc jak mam wybrać trzy pozycje do małych liter?
>> GŁOŚNIK 15: Mam jedno pytanie, faktycznie.
ALI: Tak, proszę bardzo.
GŁOŚNIK 15: Więc za to, że naprawdę nie ma znaczenia, jeśli wiem, to stanowisko,
lubię, nie potrzebuję tej tabeli.
ROB: Nie.
Nigdy nie należy używać tych liczb.
I to jest ważny punkt w swoich programach, że nigdy nie powinno się mocno
kod któregokolwiek z tych stałych.
'A'. nigdy nie używaj 65 lub 97.
ALI: Ci są nazywane magiczne liczby, a są naprawdę mylące.
Jak, kiedy jesteś debugowania kodu, możesz nie pamiętać, co
można ich wykorzystać.
I dla nas klasyfikacji kodu, nie będziemy wiedzieć, co tak naprawdę
używasz ich do.
Więc lepiej jeśli rzeczywiście używać znaków więc to sprawia,
więcej sensu dla ludzi.
Okay, wszelkie inne pytania?
Czy więcej ludzi zrobić, lub -
Myślę, że możemy sprawdzić.
To naprawdę straszne, że można zobaczyć kod ludzi.
ROB: Tak.
Nie musimy tego robić tutaj.
Nie znamy nazwisk osób, albo.
ALI: O tak, dobrze, że sprawia, że ​​lepiej, więc musimy być jeszcze bardziej obiektywne
zamiast po prostu losowo wybierając kogoś.
Nie martw się.
I nie będzie to zrobić.
Jeśli masz przypadkowych rzeczy o - Nieważne.
Okay.
Jak ludzie robią?
>> GŁOŚNIK 17: Więc dziewiąty wiersz powinien wydrukować znak?
ROB: Tak.
ALI: Tak.
Więc jeśli w dół -
ROB: Och, nie mogę tego zrobić.
ALI: Zobaczysz, że drukowane krzyżyka symbol.
GŁOŚNIK 17: Oh, w porządku.
ROB: Myślę, że w inny sposób można spojrzeć na rzeczy to my drukowania dwóch
znaków.
Pierwszy mamy drukowanie jest A. list
Kolejny mamy drukowanie jest tylko 65.
To będzie prawdopodobnie krzyczeć na mnie za to.
Więc jeśli tylko uruchomić to zauważysz, że drukuje zarówno razy.
Ponieważ pytasz to samo.
Pytamy go wydrukować litery A. Następnie pytamy go, aby drukowanie
Numer 65 interpretowane jako znak, który jest tak samo.
ALI: Czy masz coś do powiedzenia?
Och, to tylko żart, przepraszam.
Dobra, jak to ludzie -
ROB: Nie możemy po prostu przejść przez niego.
>> ALI: Dobra, więc od czego zacząć?
Ktokolwiek?
Jako wskazówkę, musimy dostać coś od ludzi, od typerów.
GŁOŚNIK 18: [niesłyszalne]
ALI: Oh yeah, szybka, idealna.
Więc będziemy wpisywać -
co mamy napisać?
Ktokolwiek?
Czy mam po prostu wpisać go?
Czy my rzeczywiście wpisując -
ROB: Oczywiście.
ALI: Więc będziemy wpisz printf skłonić go, więc możemy być
podoba, daj mi znak.
Dobra, a co potem?
Dlaczego to robi?
ROB: Nie wiem.
ALI: Dobra.
Więc teraz, mówimy im, aby dać nam znak.
Ale to w jaki sposób rzeczywiście się ten znak?
GŁOŚNIK 19: GetString użycia.
ALI: GetString?
Getchar?
Ok, więc co za różnica między string i char?
GŁOŚNIK 19: Stringi są serie, jak tablica znaków.
>> ALI: Cool, yeah.
Tak więc w tym problemu, musimy tylko rozważyć jeden znak na raz, więc
my tylko zrobimy getchar dla tej instancji.
ROB: Możemy zaimplementować funkcję, jeśli chcieliśmy, która miała cały ciąg
i poszedł nad ciąg i zmienił wszystkie małe litery na wielkie i wszystkich
wielkie litery na małe.
Ale tutaj, po prostu pytanie o jeden znak.
ALI: Więc teraz mamy znak tutaj, ale to musimy go zapisać.
Więc dodajmy char c - co?
GŁOŚNIK 20: Zdefiniuj zmienną.
ALI: Tak, dokładnie.
Więc mamy nasz charakter.
ROB: Myślę, że może być -
jesteś tylko trzy pomieszczenia, w, co jest, dlaczego krzyczy na ciebie.
>> ALI: Okay, cool, teraz, że mamy tabulatorem zestaw, co dzieje się dalej?
Jaki jest następny krok?
ROB: Co nasz program powinien zrobić, to zmienić małą list do
wielką literę.
Co jeśli zdarzy mi się wejść do mieszania symbol?
Jest to, że -
ALI: To dobry symbol.
Używamy go dużo.
ROB: To ważna rzecz, którą można przekształcić do wielkiej formy?
GŁOŚNIK 21: No
ALI: No
Powinniśmy sprawdzić.
Więc możemy mieć if sprawdzenie więc jeśli c jest większa niż
lub równa mała litera 'a'-
więc jeśli spojrzymy na wykres, można zauważyć, że to musi być między tutaj
na 97, a małe litery.
I może być dowolnym z tych, w odstępach w dół.
A jeszcze z przy 122.
I musi się pomiędzy tymi dwoma wartościami.
Czy to ma sens?
ROB: Więc jeśli c nie jest pomiędzy 97 a 122 -
lub nigdy nie ma potrzeby korzystania z tych numerów - jeśli c nie jest pomiędzy "A" i
'Z', to nie był to ważny znak dla nas wielkie.
ALI: więc w postaci kodu, to znaczy, że w przypadku C jest większa lub równa jeden
małe case -
wow, jak ty mówisz?
Dobrze, jest większa niż lub równa małe litery "A", i to musi być powyżej
Mała litera "Z". Musi więc być mniejsza niż lub równa małe "z".
Robimy pewien, że to między nimi.
Wtedy możemy dalej z naszym szczęśliwym kodem.
Co?
ROB: Więc pomyślałem chcemy tylko prosić, jeśli zdarzy nam się nie mieć
małe litery.
ALI: Oh, nie byłem tego świadomy.
Przepraszam.
>> Ok, więc jeśli chcemy zrobić jak Rob mówi, i upewnić się, że -
możemy prosić je, to co powinniśmy zrobić?
GŁOŚNIK 22: [niesłyszalne]
ROB: Tak.
Powinniśmy wykorzystać jakąś pętlę.
Ponieważ użytkownik może wprowadzić coś nieprawidłowego niezliczone ilości razy.
Więc można użyć pętli while.
Celem na-while pętli -
dosłownie, tylko raz w całym swoim życiu będzie kiedykolwiek użyć do-
pętle while jest, gdy prosisz o wprowadzonych przez użytkownika.
Więc fakt, pytamy na dane od użytkownika o to wskazówka, że ​​powinniśmy
użyć do-while.
A to dlaczego?
Ponieważ do-while zawsze dzieje przynajmniej raz.
Tak więc, gdy prosisz o wprowadzanych przez użytkownika, które chcesz, aby to się przynajmniej raz.
A potem, jeśli coś udało, można iść dalej.
Jeśli nie, wróć i zapytać ponownie.
>> ALI: Czyli innymi słowy, musimy zrobić sekcję.
I tak to mówi to coś zrobić.
Więc printf -
wydrukować oświadczenie, szybki, a także uzyskać znak, lub próba
uzyskać charakter.
A potem musimy sprawdzić, czy rzeczywiście to zrobił prawidłowo.
Więc potem dodać warunki, to mówimy, natomiast, a następnie mamy
instrukcja warunkowa.
ROB: Ale teraz mamy odwrócić tok myślenia.
Teraz my pierwotnie mówili, jeśli c jest w tym zakresie, to jest ważne.
Teraz chcemy, aby odwrócić i powiedzieć, że jeśli c nie jest w tym zakresie, to
należy wykonać kopię robić rzeczy ponownie.
ALI: Oh, yeah.
ROB: Tak więc, nie jest to prawda, chcemy wrócić i
poprosić o inny charakter.
Czy każdy widzi?
Pytania w tej sprawie?
Okay.
>> Więc teraz mamy ważny znak, że możemy wielkie litery.
ALI: Więc, co jest kolejnym krokiem uppercasing go?
GŁOŚNIK 23: Dodaj 32.
ALI: dodać -
Przepraszam, co?
GŁOŚNIK 23: Nie można po prostu dodać 32?
ROB: Tak tak, nie w kategoriach liczb magicznych.
Należy używać tylko apostrof rzeczy.
GŁOŚNIK 23: Okay, dobrze -
Rob: Ale można dostać 32 -
ALI: Skąd masz numer 32, jak sądzę, jest to, co mówisz.
GŁOŚNIK 23: [niesłyszalne]
Rob: Tak więc możemy wymyślić numer 32 razem -
GŁOŚNIK 23: [niesłyszalne]?
ROB: Tak.
Ale jeśli mamy zamiar to zrobić w dwóch etapach zrobiliśmy wcześniej z
stuff pozycji.
Tak więc pozycja w alfabecie, c dzieje się to c minus małe
'A'. Więc jeśli weszliśmy małą "D", pozycja będzie 3.
A teraz chcemy wziąć rzeczy do wielkiej gamy rzeczy.
Więc teraz nasz nowy c będzie kapitału "" plus pozycja.
Więc ludzie zobaczyć, jak to prowadzi nas -
idziemy z małą zakresie, dokładna głębokość byliśmy na które
Zakres, a idąc w dół do wielkiej zakresu, a dzieje się tak daleko
się ponownie, które będzie ten sam znak, ale teraz
duże litery.
ALI: A dla osób, które zostały pomylone przez jak powiedział tylko 32,
zasadniczo łączył oba te w jednej instrukcji.
Więc odpowiednik sposób pisania to powiedzieć można tylko rodzaj
stanowisko zastępcze, c minusa ',' i umieścić go tutaj.
Więc to, co zrobił, Ja nie -
char newc = wielkie litery 'A' c minus małe litery "a". A ponieważ z algebry,
można je przenosić.
Można również powiedzieć, że można go przesuwać, tak char newc = wielkie litery 'A'
minus małe "a" plus C.
A to, zauważysz, jeśli wrócimy do wykresu.
Mamy wielkie jest 65 i małe jest 97.
Tak 65 - 97 jest -32.
>> Hi.
Usiądź.
Oh.
Możesz usiąść tutaj.
Spoko, dobrze, super.
Zapraszamy do sekcji.
Można zauważyć, że różnica jest 32.
Więc to, gdzie ma ten numer.
Ale to nie jest, jak Rob mówi, najlepszym sposobem, aby to zrobić, ponieważ ma dziwne
magia zamieszanie numer.
ROB: Należy używać kapitału minus małe.
Nie powinno się używać tylko prosto 32.
GŁOŚNIK 24: Dlaczego jest to, że znowu?
Dlaczego nie użyć 32?
ALI: Jeśli to zrobił, to byłoby char newc = -32 + c.
A jeśli nie widać żadnego z reszty, jeśli to wszystko znika i
po prostu zobaczyć ten jeden wiersz, to jak wiesz, co negatywne 32 jest?
To jest po prostu nie na miejscu.
ROB: Więc twój program będzie pracować całkowicie w porządku.
To jest po prostu coś w stylu.
Ktoś tam iz czytania kodu, oni są jak co to 32 oznacza?
Może don't -
I prawdopodobnie nie od razu zrozumieć, że 32 dzieje się
różnica między małymi literami oraz wielką literę, chociaż
będziemy wykorzystywać ten fakt w kolejnym problemem.
32 jest -
możesz zostawić komentarz powyżej to mówiąc 32 jest różnica między
'A' i '.' Ale w tym momencie, dlaczego nie wystarczy użyć "a" i "A", a ty
nie potrzebują komentarza wtedy.
>> ALI: To tylko sposoby powyżej niej jest wiele czystsze, style-wise.
I tak, skoro dopiero zaczynasz programowanie -
lub Chyba nie, skoro jesteś edi hacker - nieważne.
To jest po prostu dobry sposób na -
lepiej mieć lepszy styl.
Jest to łatwiejsze dla innych ludzi do czytania.
ROB: Nigdy nie trzeba pamiętać ASCII tabeli, nigdy.
Trzeba tylko być w stanie wykorzystać pojedyncze znaki cudzysłowu.
Pytania?
ALI: Każdy dobry?
ROB: Okay.
Więc następnym problemem jest znaczna.
Więc następnym problemem pyta nas -
ALI: Kolejny problem prosi nas, aby zrobić to samo, ale na
operatory bitowe.
ROB: I oczywiście, nie widzieliśmy Operatory bitowe jeszcze.
Będziemy więc teraz do omówienia tych.
ALI: Bądź podekscytowany.
Są super zabawa.
>> ROB: Tak regularne operatorzy, jak x plus y, minus, razy, podzielić.
ALI: Wpisz je w ten monit.
Rob: Jest również%, jeśli nie widziałeś go, za pomocą którego można by
procent symbol.
Ale nie będziemy używać tych dla tego problemu.
Chcemy wykorzystać operatory bitowe.
Pamiętaj, przywieźliśmy go w wykładzie jeden.
Nie jestem pewien, czy mamy omówione binarne poza tym.
Ale pamiętaj, że każda liczba jest reprezentowana -
dobrze, wszystko -
jest reprezentowana w 1s i 0s w binarnym.
To znaczy, że kiedy mówię, numer 8, zdarza mi się, że to
jak, 1000.
Co operatory bitowe zróbmy to działać na tych bitów -
ma działać na tych bitów bezpośrednio.
Teraz mam już do czynienia w zakresie ośmiu.
Mam do czynienia w odniesieniu do 1000, i chcę robić rzeczy, z tymi,
Poszczególne bity.
Więc Ali napisał bitowego operatorów tutaj, ale that's -
Numer 8 użyjemy jako jeden z naszych numerów przykład.
A reprezentacja binarna jest 1000.
Użyjemy kolejny numer, 5 -
rzeczywiście użyjmy 9 i 5.
, A 5 reprezentacja binarna jest 00 -
0101.
ALI: Czy wszyscy dobrze na tym?
Binary rzeczy?
To z pierwszego wykładu?
>> ROB: Tak, nawet jeśli nie są całkiem na wierzchu, jak konwertować rzeczy
binarny, to nie jest istotne dla całości tego problemu.
Będziemy go używać, ale trzeba o wiele więcej szans, aby dowiedzieć się, jak
szybko włączyć rzeczy w binarnym.
Więc za pomocą 9 i 5, teraz mamy nasze bitowe operatorów.
O, a także, 9 i 5, jeśli jest to liczba całkowita, to rzeczywiście jest to 32-bitowy,
co oznacza, że ​​mamy jak 0, 0, 0, 0 wiele razy, a następnie
101 na końcu.
To tylko dlatego, że nie ważne co robisz, w całkowitych, 32 bitów.
Tylko dlatego, że musimy tylko cztery bity do reprezentowania 9 nie oznacza, że ​​nie jesteśmy
stosując się pozostałe 27 bity dla właśnie 0s.
ALI: Just do wyjaśnienia, jeden z tych numerów, które znajduje się 0 lub 1 jest bit.
Ten jest 4 bity.
Jak więc Rob powiedział, że maszyny przechowywać je w 32.
Więc musieliby 32 z albo 0 lub 1.
Cool?
ROB: Operatory bitowe.
Pierwszy, że będziemy zajmować się, zróbmy &.
Więc jeśli mamy 9 i 5.
Więc co i robi to, bit po bicie, porównuje bity dwóch liczb
i jeśli oba numery są 1, a następnie powróci do 1.
Jeśli jest 0, a drugi oznacza 1, lub oba są 0s, to zwraca 0.
Tak więc można myśleć o tym, jak Twoje logiczne Andach.
Jak trzeba prawda i prawdziwy powrót prawda, ale prawda i fałsz jest fałszywy.
Więc to jest to samo, ale teraz mamy do czynienia z tylko bitów.
>> ALI: Więc jeśli spojrzeć na to, będziesz miał 1 -
będziesz ich układanie, więc będzie to 1 i 0.
Czy myślicie, że będzie - co by to ocenić, w?
GŁOŚNIK 25: 1.
ALI: Cool.
Lub nie.
Przepraszam.
Więc to ma sens?
Więc co to jest zbiorowa odpowiedź ponownie?
Przepraszam.
Więc jeśli mamy 1 i 0, to co otrzymasz?
ROB: Więc myślisz, jak mówisz i głośno.
Jeśli masz dwa bity x i y, trzeba xiy być 1 w celu zamieszczenia
do oceny, prawda - albo, w celu użycia go w celu oceny do 1.
Jeśli x lub y jest 0, to wynikiem jest false lub 0.
LUCAS: Dobrze jest też pamiętać, że 1 jest prawdziwe i 0 jest fałszywa.
Więc jeśli masz prawdziwe i fałszywe, że to fałsz.
Ale potem, true & true, true.
False false i false.
ALI: Mamy prawdziwe i fałszywe.
Tak więc 1 i 0.
Więc jeszcze raz, przepraszam, jeszcze raz?
GŁOŚNIK 25: Byłoby 0.
Tak, cool.
A potem mamy 0 i 1 -
GŁOŚNIK 25: [niesłyszalne]
ALI: Tak.
Więc zawsze można zamienić je w -
Następnie, jeśli masz 0 i 0?
GŁOŚNIK 4: 1?
0?
ROB: Więc to jest 0.
Nie jest, że oba numery muszą być takie same.
To, że oba numery muszą być w 1.
ALI: Więc oba muszą być prawdziwe, aby była ona prawdziwa.
Więc to jest 0.
I wtedy masz 1% 1, co jest?
ROB: To są całkiem dobre numery.
Mają wszystko jest możliwe -
ALI: Dobra robota, wow.
Okay, cool.
Więc to ma sens dla każdego?
>> ROB: Więc teraz będziemy robić. |
I to będzie bardzo podobne, ale teraz zamiast X i Y potrzeby
być 1 w celu użycia go w celu oceny do jednego, teraz to tylko x lub
Y musi wynosić 1.
ALI: So 1 | 0 wynikiem -
KLASA: 1.
ALI: Cool.
0 | 1 wynikiem -
KLASA: 1.
ALI: Cool, a następnie 0 | 0 -
KLASA: 0.
ALI: Tak, a następnie 1 | 1 -
KLASA: 1.
ALI: Cool.
Więc jak to jest dwóch operatorów bitowej.
Awesome.
ROB: Więc teraz będziemy robić ^.
ALI: powinniśmy zrobić wszystkie z nich?
ROB: Tak, ponieważ myślę, że będziemy go używać -
stosując je wszystkie.
ALI: Dobra.
So -
ROB: Myślę, że nie trzeba.
ALI: Więc ^ prace, w które musisz mieć dokładnie jeden prawdziwy i jeden fałszywy.
^ Oznacza wyłączne OR.
Więc teraz, że nie jest -
jeśli x i y są zarówno 1, teraz fałszywe.
To jest różnica między ^ i | jest to, że OR, można mieć, jeśli x jest
prawda czy y jest prawdziwe, to jesteśmy dobrzy.
Nie, mówi, że jeśli x ^ to prawda, y musi być fałszywe, albo nie jest to prawdą.
Czy masz pytanie?
>> GŁOŚNIK 26: [niesłyszalne]
ALI: Tak.
To trochę podobne.
ROB: Tak, kiedy się do tego niskiego poziomu rzeczy, sprzętu, są
rodzaje operacji ma się do czynienia.
Na poziomie sprzętowym, będzie zajmować się tylko bity.
Nie radzić sobie z liczbami.
ALI: Dobra, za ^, lub jeśli masz 1 ^ 0, co należy ocenić, że do?
KLASA: 1.
ALI: Cool.
Jeśli masz
0 ^ 1? KLASA: 1.
ALI: Cool.
0 ^ 0?
Cool.
A następnie 1 ^ 1?
KLASA: 0.
ALI: Cool, niesamowite.
Następny -
ROB: Myślę, że są to wszystko, co mamy do czynienia.
Będziemy robić tylko to.
ALI: tylko czas będziemy musieli zrobić -
ROB: Oh, to będzie do ostatniego problemu.
GŁOŚNIK 27: Czekaj, jeszcze raz?
ALI: Przepraszam, jakie było twoje pytanie?
>> GŁOŚNIK 27: Czy możesz wyjaśnić, że po raz kolejny?
^?
GŁOŚNIK 27: Exclus - tak.
ALI: Więc co exclusive OR oznacza to, że nie musi być wyłącznie
jeden prawdziwy i jeden fałszywy, więc jedna 1 i jedna 0, w porównaniu z OR, można mieć -
jeden z nich musi być prawdziwe, lub obu z nich może być prawda, bo
ocenić na true.
GŁOŚNIK 27: Więc 0 i 0 byłoby fałszywe.
ALI: Tak.
Ale jeśli masz 1 |
1, który ocenia na true.
Ale jeśli masz 1 ^ 1, tak jak my, że wartość false.
Bo to nie jest wyłącznie jedna jest prawdziwa.
ROB: I mogą lub nie mogą być przydatne, jednak zauważyć, że jest ^
równa tylko biorąc |
minus &.
I rzeczywiście można pomyśleć o tym w ten sposób.
^ Jest po prostu wszystko razem, ale ORing wyjmując wszystkie bity, gdzie
oba były prawdziwe.
Tak i wszystko wraca, gdzie oba były prawdziwe.
| Wszystko wraca którym jeden lub oba są prawdziwe.
Więc odejmując że się z | daje ^.
ALI: Masz pytanie?
To było dużo informacji.
Każdy dobry?
>> ROB: Możemy iść nad następnymi do następnego problemu, slash
która godzina?
Nie należy tego problemu do dnia następnego.
ALI: Myślałem, że to ten.
ROB: To nie jest.
ALI: Czy na pewno?
ROB: Tak, jestem pozytywne.
ALI: Dlaczego nie zacząć robić kolejny problem?
Problem jest, ponownie, aby zmienić go z małych liter na wielkie, a to
czas, aby używać operatorów bitowej.
ROB: Więc będziemy -
zacznijmy binarnej reprezentacji 'A', 'A',
co 65.
Więc w binarny -
tak '' = 65, co =, w postaci binarnej -
Zamierzam bałagan liczby 0s - że.
ALI: Więc czy to ma sens dla każdego?
Tak więc, 1 nie 2S, 4S nie nie 8s, nie -
nie 16s, nie 32s, a następnie jeden 64.
ROB: Tak, myślę, że to o jeden za dużo 0s.
ALI: Przepraszam.
>> ROB: Ok, więc mamy zestaw 64, i mamy 1 zestaw i połączenie tych
razem, mamy 65.
ALI: Cool Beans?
ROB: Więc teraz, małe litery 'a'-
zauważyć 97 -
, co stanowi różnicę pomiędzy 97 i 65?
GŁOŚNIK 28: 32.
ROB: Tak.
Więc to jest 32, która jest sama w sobie nieco, tak, że będzie to 110001.
I to będzie prawdziwy dla wszystkich możliwych znaków.
Więc jeśli myślimy o "D", która będzie 68, że będzie to 1000011.
, A następnie małe "d" będzie 68 plus 32, 100, która jest
będzie to samo, że jest to po prostu przerzucanie
32 ponownie, więc 1100011.
Tak więc różnica między pismem wielkich i małych liter jest tylko przerzucanie
że 32-bit pozycji.
GŁOŚNIK 29: Czy to nie 1000100?
ROB: Czekaj, to jest 100 -
coś zrobiłem źle.
To nie była prawda.
Myślałam, że to różnica 3, więc wtedy po prostu zatrzymany
binarnych 3 na koniec.
To powinno być w porządku.
ALI: Dziękuję.
Dobry dla wskazujące, że obecnie.
To było ostre.
W porządku, jest to, że jasne dla ludzi?
>> ROB: różnica między wersją wielkich i małych liter jest
zawsze tylko będzie 32, a więc zawsze będzie jeden bit
, że musi być odwrócony do zmiany między nimi.
ALI: Więc w tym przypadku, znając różnicę między A i kapitału
małe jest dobre.
Nie w kodzie, ale koncepcyjnie przynajmniej, że jest dobry.
Więc chłopaki mogą śmiało i kod, który w przestrzeni teraz.
Albo powinniśmy po prostu porozmawiać?
ROB: Możemy tylko dyskutować.
Nie wiem.
Macie może spróbować.
Dyskusja między siebie na trochę.
Damy Ci szansę na kod to.
[Interfejsy VOICES]
ALI: - jest super
GŁOŚNIK 30: To jest jak komedia hakerów.
ALI: Tak, jesteśmy po prostu mówienie wiadomości, przez niego przechodzi.
>> ROB: I wracamy.
ALI: To dziwne.
Czuję, że powinniśmy mieć CS50 stacji wiadomości i mogliśmy
siedzieć jak ten.
ROB: News Hacker.
ALI: News Hacker 50.
ALI: Zapraszam do zadawania pytań jeśli jesteś zdezorientowany.
ROB: Czy ktoś jest zablokowany?
ALI: Tak, to jest dobra rzecz.
ALI: Czekaj, jesteś zatrzymany w fotelu?
Oh.
Byłem trochę zaniepokojony.
ROB: Bo zdałem sobie sprawę, że będą chcieli
innego operatora bitowej.
Na razie, po prostu przekształca wielkie litery na małe.
ALI: Niestety, nie wszyscy uzyskać ogłoszenie?
Mamy zamiar przejść od wielkiej litery na małe.
ROB: Następnie omówimy małe na duże litery prawa po tym.
Och, nie.
Mamy błąd w tym, co, jak sądzę, nigdy nie próbował uciekać.
Która jest po prostu, że char c musi być zadeklarowana poza pętli, ponieważ
jej zakres jest ograniczony w pętli.
GŁOŚNIK 32: W tym przypadku, jest to źle użyć numeru?
ROB: Eh, nie trzeba.
Gdybym zagwarantowane, że duże "A'- lub małe litery 'a' minus 'A'
był dokładnie jeden bit, ale nie wiesz, że to 32 -
wszystko będzie działać tak samo dobrze, gdyby 16 bit, który został przerzucony - lub
nie, myślę, że to wouldn't -
lub bit 64 zostały przerzucone, ewentualnie.
Ale nie ma potrzeby używać 32.
Można zamiast tego użyć małych liter "A" minus duże "A".
>> GŁOŚNIK 32: Okay.
Co możesz zrobić, jeśli czujesz się jak piszesz zbyt wiele jest można zdefiniować
na szczycie.
Więc można być, różnicy int = małe litery 'a' minus 'A'. I
Następnie można wpisać różnicę zamiast.
To jest ważne.
Ale tylko za pomocą numeru 32 jest rodzaju -
Głośników 33: Mimo to, ze względu na fakt, że jest to 32-bitowy?
ALI: Tak.
ROB: Nie może być -
Jedyną gwarancją musimy zrobić to to, że różnica między
małe i wielkie jest jeden bit.
To nie powinno mieć znaczenia, że ​​to dzieje się 32 bit, który jest odwrócony.
Ze względów czasowych, zaczniemy będzie ponad to.
To jest w porządku, jeśli nie zostało zakończone.
Niech się Pan o to nie martwi.
ROB: Zakładając, c jest literą -
nie musimy zakładać, c jest dużą literą.
Wiemy, c jest literą, po tej pętli -
do-while.
To znaczy, że to wygląda tak "A". Więc jeśli chcemy do tego doprowadzić
'A' na to 'a', co musimy zrobić?
Więc jak konwertować i przerzucić trochę?
ALI: Jak możemy ją odwrócić?
>> ROB: Wiemy więc chcemy przerzucić 32 bit.
Tak, że będzie robić "" minus "", lub możemy napisać 32, ale -
cholernie to, to na odwrót.
ALI: Ok, więc Rob tutaj jest obliczaniu tego, magiczna liczba 32.
Więc on dowiedzieć się, gdzie są nieco klapki obszar będzie.
A co wtedy, gdy stawiamy znaki zapytania są?
ROB: Jak odwrócić ten kawałek?
W odniesieniu do wielkiej litery, to jest 0, a my chcemy się 1.
GŁOŚNIK 34: |.
ROB: Tak.
Więc to nam mówi bierzemy 'A'. Jesteśmy ORing to 0 -
1000 -
i = to.
ALI: Czy to ma sens dla każdego?
Możemy przejść przez to krok po kroku, jeśli chcesz.
GŁOŚNIK 35: Czy [niesłyszalne]?
ALI: Gdzie jest minus?
ROB: Masz na myśli tutaj?
ALI: Oh, yeah.
ROB: Więc myślę, że to jest dla nas.
Moglibyśmy powiedzieć, 32, a teraz jesteśmy po prostu stosując bitowe operatorów.
ALI: Nie lubimy numery magiczne.
Nie zamierzamy tego robić.
Także myślę, że powinniśmy po prostu użyć operatory bitowe -
GŁOŚNIK 36: Jeśli używasz ^ a, dostaniesz 32?
GŁOŚNIK 37: Tak, myślę, że -
ROB: Tak będzie.
ALI: To jak można to zrobić za to, że
z kapitału na małe litery.
>> Teraz ktoś może mi powiedzieć, dlaczego Rob i zmieniłem szybka i jak poszliśmy
z wielką małymi literami, zamiast małe do
wielkie jak to robiliśmy wcześniej?
Czy ktoś ma jakieś pomysły, dlaczego tak może być trudniejsze?
ROB: Tak zrobimy -
ALI: Tak, proszę bardzo.
GŁOŚNIK 38: | operator tylko naprawdę dobre dla dodawania.
ALI: Tak, dokładnie.
ROB: To co chcemy zrobić w małych liter na wielkie sprawy, jest,
przekształcenia tej 'a'-
więc chcemy umieścić w niektórych liczb tutaj i użyć trochę operatora tak, że przychodzi
obecnie do kapitału A. Wciąż prawdopodobnie za pomocą 32 jakoś, ale teraz, jak my
uzyskać to wyjdzie na to?
Tak C -
oh, nadal chcę, że za -
ALI: Więc teraz jeśli mamy konwersji z małych liter na wielkie ponownie, wówczas
zrobić operację ^, jak wy powiedział.
ROB: Istnieją inne sposoby, można zrobić różne rzeczy.
Wielu operatorów bitowe skończyć się bardzo łatwo definiowalne w kategoriach
innych operatorów bitowej.
Więc miałem zamiar nie używać ^ lub w ogóle, ale ^ pracował perfekcyjnie.
>> ALI: Ok, więc mamy zamiar iść na ostatnim problemie, którym jest podstawowy -
Ostatni problem jest konwersja coś w binarnym.
Tak więc, na przykład, jeśli masz 50, a następnie przekształcić go
binarny, który jest 110010.
I myślę, że wy wszyscy wiecie o binarne z wykładu.
I ty też nie powinni umieszczać wiodącą 0s do niego.
ROB: Możesz pominąć tę część do teraz.
Pierwszy przebieg, można to zrobić tak, że nie są wiodące 0s.
A potem możemy zmodyfikować, że się nie mieć wiodącą 0s, jeśli mamy czas.
ALI: Więc nie martw się o to.
Wystarczy spróbować, aby w binarnym.
Dobrym miejscem na rozpoczęcie byłoby -
ROB: Musimy poprosić o całkowitej.
ALI: O tak, to jest dobry.
Możemy zacząć z tym.
Więc można zmienić polecenia.
Więc zamiast znaku, teraz mamy do czynienia z liczbami całkowitymi.
Cool?
>> ROB: A teraz to, co jest nasze do-while warunek będzie?
To się prosi o całkowitą nieujemną.
ALI: Kiedy chcemy zachować monitowania użytkownika o coś innego?
Kiedy jest mniejszy niż 0.
ALI: Racja.
ROB: Chociaż i jest mniejsze niż 0.
ALI: Teraz chcemy przekonwertować.
Czy macie jakieś pomysły, co robić?
Wszelkie Inklings?
Tak.
GŁOŚNIK 39: Czy musimy przekonwertować go, czy możemy po prostu wydrukować niektóre 0s i 1s
który byłby właściwy numer?
Można zrobić dla pętli i liczyć przez uprawnień 2?
ROB: Tak.
Nie trzeba do konwersji i. jego binarny -
reprezentacja binarna i nie zmieści się wewnątrz i.
Wystarczy wydrukować binarną reprezentację i.
ALI: Innymi słowy, nie ma potrzeby, aby przejść przez potęgi dwójki.
ROB: Bo już jest przechowywane jako pliki binarne, więc nie ma potrzeby
konwersji na binarny.
Wystarczy przejść nad jego binarnym, i je wydrukować.
I będziesz musiał użyć bitowego, ponieważ chcemy, aby spojrzeć na
rzeczywiste bity.
Nie musisz używać bitowe, ale proszę zrobić.
I to jest rzeczywiście -
po prostu można zrobić potęgi dwójki mnożąc przez 2.
Pojedziemy na jednym z dwóch ostatnich operatorów bitowe binarnych,
co to za jeden.
Więc jeśli wziąć -
>> ALI: Czy można przejść przez obu z nich?
ROB: Tak.
Więc chodźmy z 9.
Więc 9 left shift 1 -
co oznacza przesunięcie w lewo jest po prostu przenieść wszystkie bity w lewo i włóż 0.
Więc idziemy wszystkie bity 9 do lewej
stanowisko, które daje nam -
Więc zauważyć, że zmieniły wszystko opuścił jeden, i włożona 0 na
prawa strona.
Jeśli mieliśmy przesunięte w lewo o dwa, będziemy zmieniać wszystko w lewo przez dwa,
i włóż dwie 0s do wypełnienia luki.
Pytanie?
ALI: Więc prawo shift robi coś podobnego.
Jeśli masz 9 PRAWY SHIFT 1 to jesteś po prostu się wszystko od do
prawo, tracisz cyfrowy, więc 100 zamiast.
ROB: Więc to dobrze, że jesteś tracąc trochę, że zdarzyło się wszystko
do prawej.
Istnieją różne rodzaje odpowiednich zmian, ale w zasadzie można myśleć
Prawy Shift, jak tylko dzieląc przez 2.
A może myślisz o przesunięciem w lewo, jak pomnożenie przez 2.
Więc jeśli konwertowany to -
jeśli konwertowany 9 przesunięcie 1, która jest równa 10010, jeśli rzeczywiście udał
przez binarne i zorientowali się, co to było, byłoby to po prostu 18.
My po prostu pomnożyć przez 2.
1001 left shift 2 będzie 36.
Mnożymy przez 4.
Ok, fajnie, tak że jest poręczny operatory bitowe dla tej jednej.
Więcej zamieszania?
Czy chcecie, aby ją wypróbować?
Albo może po prostu wskoczyć i go uruchomić?
ROB: Prawdopodobnie powinniśmy wskoczyć w.
ALI: Tak, w porządku.
ROB: I przejść przez to razem.
>> ALI: No po prostu pójdę do niego.
Tak jak powiedział na początku, będziemy po prostu przejść przez kawałek po kawałku.
Więc my będziemy potrzebować pętlę.
Czy ktoś ma pomysł na najlepszy rodzaj pętli, aby przejść przez to?
Mamy pętle while, do-while pętle, pętle.
GŁOŚNIK 40: Do-while?
ROB: Tak pamiętam, co mówiłem wcześniej o, używamy tylko do-while
pętle, aby wprowadzane przez użytkownika.
Nigdy nie będzie dość dużo kiedykolwiek używać ich na nic innego.
ALI: Problem z pętli do-while jest to coś robi zanim sprawdza
warunek.
Tak, to może zrobić coś źle -
jak, boli -
zrobić coś, co nie jest możliwe.
Więc chcesz sprawdzić.
ROB: Jest wiele przypadków, w których można korzystać z pętli do-while, ale ludzie
nie należy się spodziewać, aby z nich korzystać, chyba że jest to wejście użytkownika.
Więc wykorzystaliśmy nasze do-while, aby uzyskać i.
Ile razy to nasza pętla będzie chciał pętli?
Chcemy w pętli, każdy z bitów i.
Ile bitów w I?
GŁOŚNIK 41: 32.
ALI: Tak.
ROB: Nie ma więc 32 bitów.
Nie chcemy powiedzieć 32.
Zamiast tego chcę powiedzieć sizeof -
, które widziałeś, że w klasie jeszcze?
ALI: Nope.
ROB: Dlaczego to powiedzieć w użyciu, że -
sizeof (int) razy 8 -
ALI: Więc, sizeof jest -
>> GŁOŚNIK 42: [niesłyszalne]
ALI: Ciekawe.
Więc, sizeof jest wbudowana funkcja C, gdzie po prostu mówi ci
Liczba bitów w -
ROB: Bytes.
ALI: Bytes, przepraszam -
Liczba bajtów zmienna musi zapisać wartość.
Więc myślę, że podszedł do grupy, a następnie, int to 4 bajty może.
Cool?
ROB: Nie należy jednak wiedzieć, że int jest 4 bajty.
Powinieneś być w stanie powiedzieć -
należy użyć sizeof (int), aby uzyskać 4 bajty.
I to jest rzeczywiście ważne dla niektórych rzeczy.
Int nie może być 4 bajtów.
Na innym komputerze, int może być 8 bajtów.
Więc twój program nie będzie działał na tym komputerze, ponieważ zakodowane 32
bity, gdy na danym komputerze dzieje się 64 bitów.
ALI: Więc masz całkowitą liczbę bitów, które mają to do odwrócenia.
Rob: A różnica między bajtem i trochę to, że nie
to 8 bitów w bajcie.
Więc sizeof (int) zwraca 4 bajty, to musimy pomnożyć
przez 8, aby uzyskać 32 bitów.
>> ALI: Okay, więc wiemy, maksimum i wiemy, że chcemy, aby przejść od -
chcemy, aby przejść przez wszystkie z nich.
Dlatego chcemy, aby przejść od 0 do numBits.
Więc czy ktoś wie jak napisać pętlę dla tego?
Ktokolwiek?
GŁOŚNIK 43: [niesłyszalne]
ALI: Więc chcesz przemierzać numer I z 0-gi bitu do
pierwszy bit, drugi bit, trzeci bit, aż do numBits.
Maksymalna liczba bitów, które można dostać na.
ROB: Co wspólnego pętli używamy tego, co chcemy zrobić x razy coś?
ALI: For.
Perfect.
Więc mamy dla.
A potem tworzymy iterator, który nie będzie i.
ROB: j.
ALI: J = 0.
Więc zaczniemy na 0.
I wtedy będziemy mieć kondycję, aby upewnić się, gdy jesteś
Przechodziłem przez to za każdym razem -
[Interfejsy VOICES]
ROB: j.
ALI: j jest poniżej numBits.
Więc nie chcę zrobić rzeczywista równa się jeden, bo są numBits
całkowita i zaczynamy na 0.
Więc jesteśmy rzeczywiście będzie mieć -
GŁOŚNIK 44: Oh.
ALI: Indeksy nie kończy się numBits minus 1.
ROB: Etykietujemy bity od 0 do 31, nie opisać je od 1 do 32.
ALI: I wtedy będziemy zwiększać za każdym razem o jeden, ponieważ chcemy
sprawdzić każdy jeden.
Więc pójdziemy j + +.
>> GŁOŚNIK 45: Dlaczego to robisz?
GŁOŚNIK 46: Dlaczego idziesz przez każdy bit?
ROB: Dlatego chcemy, aby przejść przez każdy bit i -
Powiedzmy więc, że mamy jakiś numer.
ALI: 68.
ROB: Możemy wykorzystać 68.
Więc binarny będzie 100100.
Tak to jest w środku I i chcemy iść na każdy z tych bitów.
Czy jest to 1?
Wydrukuj 1.
Czy to jest 0?
Wydrukuj 0.
Potem idziemy do następnego bitu.
Czy jest to 1?
Wydrukuj 1.
Jest 0?
Wydrukuj 0.
ALI: Cool, okay.
Teraz jesteśmy na właściwej wskaźnika dla przypadku, gdy bit jest.
Jak można sprawdzić, czy określony jeden?
Powiedzmy, że jesteśmy na j = 0, więc chcemy sprawdzić 0 indeks bitu.
Tak więc, w tym przypadku, ten.
>> Więc teraz, jak mamy go o sprawdzenie - oh, to będzie ten.
ROB: Tak.
ALI: Przepraszam.
Jak byśmy go o sprawdzenie, że jeden, w pewnym sensie?
W jaki sposób możemy sprawdzić, czy jest to 0 lub 1?
Cóż let's -
KLASA: I 1?
ALI: I?
Tak.
ROB: Powiedzmy, że mamy już 1.
I wówczas będzie to, czy to powrotu 1 lub 0.
ALI: Więc możemy zejść.
I możemy zrobić jak wam powiedziałem, robienia i funkcji.
ROB: int -
jak chcę to powiedzieć -
Isone = i.
A dla pierwszego bitu zdarzy nam się patrząc na, robimy i & 1.
Teraz to, co będziemy chcieli i by na drugi bit?
GŁOŚNIK 47: 2.
ROB: Tak, po drugie, że jesteśmy na 2.
ALI: Zauważysz, że 1 przeniósł się do lewej.
Tak więc dowiedzieliśmy się żadnych Operatory bitowe zrobić taką funkcję?
ROB: następny -
ALI: Tak, tak, dokładnie.
Więc to jest lewy shift.
Zamiast zawsze kontroli z 1, jedziemy do przesunięcia go.
A ile razy będziemy zmieniać go?
Jeśli mamy kontroli jeden 0-cia następnie będziemy przenosić go na zero.
Tak, dokładnie.
Więc w lewo przesunąć go przez j.
Perfect.
Więc teraz wiemy -
mamy to int czy to 1, a następnie -
tak miły Roba oszustwa tutaj -
i tak teraz idzie naprzód, a on po prostu powiedział, że jeśli to faktycznie jest 1,
ponieważ 1 jest prawdziwy, więc nie mamy do powiedzenia isf Isone wynosi 1 -
więc jeśli Isone, potem wydrukować 1, a inaczej drukujemy 0.
>> ROB: To nasz program ma ogólny błąd.
Cóż, pytania na ten pierwszy.
GŁOŚNIK 48: Czy kiedykolwiek umieścić Isone wewnątrz cztery części operacji i
następnie go przesunąć się jako ostatniej części?
Więc Isone równa 1, a następnie -
ROB: Tak, można.
Rzeczywiście możemy zobaczyć, że kiedy naprawić błąd, że jestem o
przedyskutować z wami wszystkimi.
Wskazówka kolejności zamierzamy wobec rzeczy.
Biorąc pod uwagę to reprezentacja binarna, zaczynamy z 0-ga bit.
Jeśli jest 0, to są drukowane -
dobrze, to 0, więc drukujesz 0.
Potem idziemy do drugiego bitu.
To jest 0, więc wydrukować 0.
Potem idziemy do trzeciego bitu.
To jest 1, więc wydrukować 1.
ALI: Więc to będzie do tyłu.
Więc jak wy Proponuję naprawić i iść w drugą stronę?
GŁOŚNIK 49: [niesłyszalne]
ROB: Tak.
Więc zamiast iść od 0 do numBits, pójdziemy z numBits bitów 0.
ALI: Tak [niesłyszalne]
zawsze można iść w drugą stronę.
ROB: NumBits minus 1, bo to ostatnia nubmer -
ALI: Bo to idzie od 0 do 31.
I będziemy zawsze upewnić się, że jest większy niż 0, więc nie idź
zbyt daleko w prawo.
A potem będziesz zawsze odejmować od 1, aby przejść w prawo.
>> ROB: Więc teraz mamy odwrotną pętlę, a numer jest z powrotem do druku
w sposób prawidłowy.
GŁOŚNIK 50: Nie musisz zmienić rzeczy shift też?
ALI: Więc nie.
ROB: Robimy dokładnie te same czynności, lecz teraz
się w odwrotnej kolejności.
Więc zamiast robić przesunięcia przez numBits minus 1, aby cokolwiek to
bit jest, zamiast robić to ostatnie, po prostu zrób to jako pierwszy.
Poprzez odwrócenie tego tutaj, ale w odwrotnej kolejności wszystko
, co dzieje się w środku.
Ale nie chcemy, aby zmienić to, co dzieje się wewnątrz wcale.
ALI: Czy to ma sens?
Przetwarzanie?
Okay, więc ma ktoś jeszcze jakieś inne konceptualne pytania?
ALI: Zanim przejdziemy do jego punktu jest -
ALI: Dobrze, dobrze iść.
Rob: Zamiast j być nasze -
zamiast j aby zawsze przenoszony przez, jak jeden lewym j zmiany, myślę, że
mówisz, jest tak, aby j używać się.
Więc dla j -
Myślę, że to jest trudne - j = 1 << 31.
Czy to, co chcę?
Myślę, że to << 31.
j> = 1.
j >>, >> Isone, i & j -
więc teraz zamiast -
ALI: Ciągle w ruchu j zamiast
Indeks to sprawdzić.
To nie jest takie złe.
Używamy podobnego rodzaju logiki.
Więc jeśli go back -
oh, ale to będzie stracić.
Okay, jesteś po prostu się go wpisać ponownie.
Jeśli zauważysz, że mamy 1 << j ilość razy, i byliśmy
inkrementacji j za każdym razem o jeden stopień, ale tym razem zamiast
robią przyrost j na górze wewnątrz pętli for.
Więc zamiast zawsze przesuwając go w dół -
ROB: Pierwsza iteracja pętli for mamy j jest 10000.
Następnej iteracji pętli for jest 01000.
Następna iteracja jest.
I 1 jest tylko zamiar utrzymać rozmnożeniowego, aż trafiliśmy bardzo
end, gdzie teraz jest to.
Kolejny, 1 będą wypychane, i J jest nie większa
niż lub równa 1.
Mogłem również położyć większy niż 0, sam różnicę.
A potem to wszystko.
Pytania?
Tak.
>> GŁOŚNIK 51: [niesłyszalne]
ROB: Więc to jest to samo co -
widziałeś j + = 3?
Tak samo jest w j = J + 3?
Można to zrobić praktycznie dla każdego operator w C. Tak j >> = 3 jest
równy j = J >> 3.
Tak, że działa również z operatorami bitowej.
I nie powinna włożyć 31 tutaj.
Powinienem umieścić numBits - 1.
ALI: Yay, żadnych magicznych liczb.
Okay, to jest 4:00, więc jeśli macie iść - ale czy to ma sens?
Czy macie jakieś pytania?
ROB: Byłem też rzuci się, że jeśli chcemy -
został on omówiony operatora trójskładnikowych w ogóle?
ALI: No
Jest dobrze.
ROB: Tak może wyglądać do niego na następny raz.
ALI: Dobra, naprawdę?
Teraz jesteś po prostu popisywać.
ROB: Nie, teraz it's -
jest to, co dostaje to zainteresowanie, a teraz pójdą na nią patrzeć.
Więc teraz, że robi to samo, w jednym kroku.
Więc najpierw sprawdź, jest i & j 1?
Czy to prawda?
Jeśli tak, należy wydrukować 1, w przeciwnym wypadku, należy wydrukować 0.
ALI: Ale robi to w inny sposób jest w porządku, jak również.
Ma taką samą logikę.
Więc to nie jest tak jak jeden jest -
ROB: W tym momencie, możemy pozbyć się tych klamrach, bo to tylko
jedna linia do pętli.
ALI: Ok, więc to ma sens?
To był rodzaj skoku.
Ale to był tylko rodzaj składni bardziej.
>> Cool?
Wszelkie inne pytania?
ROB: Dobrze.
ALI: Dobra, spoko.
Dzięki za przybycie do sekcji.