[Powered by Google Translate] [Electronic STATISKE LYDE]
ROB: Okay, så hvad vi lige bragt dig til, er CS50 Spaces.
ALI: Vent, vent op igen.
Velkommen til afsnit!
ROB: Velkommen til afsnit!
ALI: Yay!
ROB: Supersection!
ALI: Jeg er Ali og dette er Rob.
Okay, nu vil vi forklare Spaces.
ROB: Så hvad vi lige bragt dig til, er CS50 Spaces.
Du kommer til at bruge dette en masse i dine afsnit i dette semester.
Dybest set, har vi allerede haft du henter apparatet.
Og du kan tænke på CS50 rum som et webinterface taler til et apparat
at vi har på nogle server et eller andet sted.
Så du kan køre din kode i denne grænseflade, og vi vil
se, hvordan man gør tingene.
Du kan også se på koden for andre mennesker i afsnittet, og -
ALI: Og som nogle mennesker har fundet ud af, kan du chatte folk på siden.
Og vi vil alle se det, også, så det er spændende.
Kom ind, kom og sidde.
Tag plads.
>> ROB: Så sektioner er -
ALI: Nej, nej, kan du fyre komme.
ROB: Sektioner vil være langt mere interaktiv dette semester.
ALI: Åh, han er ligesom -
Oh.
Okay, cool.
Så hvis du fyre bare kommer ind, kan du gå til dette link, hvis jeg kan få
der, lige der.
Vi kan ikke rigtig skrive det, fordi der ikke er plads på printkortet, men dette link
lige her, gå til det på dine computere, og du vil indtaste CS50
Spaces, som er en temmelig cool ting.
Okay.
Har du et problem?
ROB: Så du kan finde de problemer -
skal vi være i stand til at skrive dette sted.
Så hvis du går til cs50.net/psets og dette er den hacker supersection -
og du går ind i Hacker Edition Pset en, se på specifikationen
et eller andet sted ned på side -
>> ALI: Så dybest set, mens Rob ser, hvad vi vil gøre i
sektion i dag er der er et afsnit af problemer -
ROB: - på side otte.
ALI: - kaldet en del af problemer -
ROB: Afsnit af spørgsmål.
ALI: Beklager, et afsnit med spørgsmål.
Og dem er, hvad vi kommer til at gå over -
de er hvad vi kommer til at gå over i dag i snit.
Og vi vil kode det på CS50 Spaces, og det vil forhåbentlig virke.
Og vi kan bare snakke igennem dem.
Og du fyre kan stille spørgsmål, når du føler -
>> ROB: Så det bliver at være en fælles ting med de fleste psets.
Jeg tænker med denne ene, det siger du ikke behøver at udlevere disse spørgsmål i.
Men ideen er, at disse spørgsmål er sat på Pset, og du kan komme
til afsnit til at få disse spørgsmål besvaret.
Eller hvis du ikke kommer til sektion, kan du besvare dem på egen hånd eller få
hjælpe på kontortid eller noget.
Men det er spørgsmål, som formodes at prep dig for problemet sæt.
Og på hacker udgave, kan mange af de spørgsmål netop stå
udvide din nuværende CS viden.
ALI: Jep, temmelig meget.
>> Okay, så er alle på CS50 Spaces?
Hej, kom ind
SPEAKER 1: Kan vi se den URL én gang til?
Rob: Yeah, vil dette være nemmere, når du er faktisk i dine afsnit, og
Deres TF kan bare e-maile dig webadressen på forhånd.
ALI: Yay, tage plads.
Der er plads her.
Fronten er ikke så slemt.
Hvad?
Så CS50 Spaces, vi får der.
Er der nogen der har nogen spørgsmål, før vi kommer ind - hvad?
ROB: Der er ikke engang nogen kridt.
[Uhørlig]
ALI: Undskyld.
Du kan bruge dine negle?
Vi er i en meget low-tech plads til en meget high-tech klasse.
Okay, er alle slags god?
Er der nogen der har stadig spørgsmål om det?
Som jeg sagde før, vi kommer til at gå igennem den del af spørgsmålene i
de Pset specifikationer.
Så der er bare et par problemer, som vi kommer til at
kode op i CS50 Spaces.
Er alle godt?
Okay.
Godt?
ROB: Har du en bærbar computer?
ALI: Du kan hænge ud med Lucas.
Han sidder lige ved siden af ​​dig.
Limning tid.
>> ROB: Så starte med det første problem?
ALI: Yeah.
Vi kan begynde.
Vil du have mig -
Jeg kan gå.
Så vil vi gå til Pset specs.
Åh, hvorfor er det -
ROB: Control.
ALI: Okay, så skal vi ind i svaret disse ting så godt?
ROB: Oh, yeah.
Så -
ALI: Åh, gjorde alle watch Robs hovedrollen shorts?
Okay, cool.
ROB: Ja, jeg tror ikke, vi nødvendigvis forventes at du har
set den før kommer til dette afsnit, men vi kan diskutere dem
problemer på forhånd, da de er i den afdeling i spørgsmål ting.
Så hvis du ikke har set det, så fortvivl ikke.
De, der har, kan forsøge at besvare.
>> Så det første spørgsmål, hvad der er en pre-processor, hvordan # include
vedrøre?
Så er der nogen har svaret til det?
Ali: I fyre kan snakke det ud.
Sure, gå videre.
SPEAKER 2: # include er nogle præ-skrevet kode, og i stedet for
kopiere det og indsætte det i din program, indsætte det ved bare at sige,
den pre-processoren ved, at det er der, og at det bør tilføje det i
senere, eller før noget andet sker.
ALI: Ja, awesome.
Cool.
ROB: Så når du faktisk kompilere et program, pre-processoren er dette
første skridt.
Compilation sker i fire store skridt.
Så den pre-processoren er den første store sag, og det er den her fyr, der går
igennem og ser for alle disse hash symboler.
Og enhver linje, der begynder med en hash, før processoren ser på det og ser
hvis det understøtter den.
Så # include fortæller pre-processoren at søge efter en cs50.h
fil og blot kopiere og indsætte dens indhold i denne fil.
Så du kan virkelig # include noget, du ønsker, men det er mest kommer til at være
. H-filer.
Vi har ikke fået at # define endnu, så det gør ikke noget.
ALI: Ja, vi er godt på det ene.
Er der nogen der har nogen spørgsmål om det?
Er vi gode?
Næste spørgsmål.
>> SPEAKER 3: På kort, var der noget om c så godt.?
Er det relevant eller er det irrelevant?
ROB: Om c med den pre-processoren.?
SPEAKER 3: Ja, gjorde eller jeg lave noget op?
ROB: Så det korte kunne have været vist før behandlingen af ​​denne fil og
. udsende det til en anden C-fil, så du på forhånd kan behandle denne fil -
når du bare køre som gør goddag eller klang hello.c, laver du alle
udarbejdelse i ét stort skridt.
Men du kan eksplicit gøre det i sine enkelte trin.
Så først du på forhånd kan behandle den.
Derefter kan du kompilere, så du kan samle, og så du kan linke.
Vi vil komme til dem andre dem.
Men forbehandling, du slags pre-proces den, og så den går i
anden. c. fil.
Fordi forbehandling ikke rigtig ændre noget.
Det er bare en flok kopi og indsætte.
Du kan manuelt kopiere og indsætte det selv.
ALI:. Og for at være klar, c-filen er en C-fil, så det er
skrevet i C-kode.
Så det kommer fra C-kode til C-kode.
Du er bare tilføje mere kode med pund.
ROB: Når du forbehandles det, er det stadig en gyldig C-fil.
SPEAKER 3: Okay.
ALI: Godt spørgsmål.
Jeg kan godt lide det.
Okay, næste spørgsmål.
>> Hvad er compiler?
Anyone?
Ja.
SPEAKER 4: Det ændrer den præ-forarbejdede kode i montage.
ALI: Perfect.
ROB: Ja.
ALI: Cool.
ROB: Så det er hvad compileren gør specifikt
når vi bruger Dunk.
I en meget generel forstand, er en compiler ligesom at tage kode på ét sprog
og gøre det til et andet sprog.
Så i C -
eller, ja, er Dunk tager kode, der er i C og omdanne det til samlingen.
Og du behøver ikke at være i stand til at forstå forsamlingen på alle.
Men det er det sprog, det er at gøre det til.
>> ALI: Okay.
Og så, hvad er en assembler?
Anyone?
SPEAKER 5: [uhørlig] til binær?
ALI: Undskyld, hvad?
SPEAKER 5: [uhørlig] til binær?
ROB: Yep.
ALI: Ja.
ROB: Så assembler -
montage kode er virkelig, virkelig tæt på, hvad din computer kan forstå,
men husk, at det ikke helt forstå teksten
det er samling kode.
Du er nødt til at konvertere det til lige 1s og 0'erne.
Det er ligesom en direkte oversættelse proces.
Vi kunne bare give dig en tabel, der kort hvad hver
samlevejledning betyder.
Men assembler er bare gør denne oversættelse for dig.
Det er at omdanne samling koden i 1s og 0'erne.
>> ALI: Og så, for det sidste, hvad er en linker?
Og hvordan-lcs50 vedrører?
Anyone?
ROB: Dette er den sværeste og mindst forklarede en i compiler video.
ALI: Er der nogen huske at se-lcs50 i en kommando?
SPEAKER 6: Når du gik til gøre.
ALI: Det er i make.
Ja, cool, okay.
Er der nogen gætter eller vage - ja, gå.
SPEAKER 7: Jeg er ikke sikker, fordi dit kort var virkelig [uhørlig], men var det
noget om at gøre separate filer med hvert bibliotek og derefter sætte
dem alle sammen i én bibliotek?
ROB: Ja.
Så når du har hello.c, det er en virkelig simpelt program.
Du er virkelig kun gøre én ting i det.
Men når du kommer ind i andre programmer -
og jeg gætte, selv når du GetString i dine programmer, skal du starte
herunder andre filer.
Så CS50 biblioteket er en sådan fil, hvor vi har de implementeringer
af GetString og GetInt og alle disse ting.
Så hvad linkeren gør, er det går rundt og leder gennem alle disse
filer, se hvor funktioner er defineret, og sørg for, at når jeg kalder
GetString et eller andet sted, det ved, at GetString betyder, at det er den
GetString over i CS50 biblioteket.
Så linker bare tager alle disse filer, smadrer dem sammen, og nu
du har en eksekverbar.
Så husk, hvis du bruger CS50 bibliotek, du har brug for både
# Include i toppen, og derefter også i din make kommando, som du
sagde, du skal have den-lcs50.
Så du kan ikke bare have en.
Så det er bare noget at huske på til fremtidig brug.
>> SPEAKER 8: Så lad os sige, at der var et andet bibliotek, ligesom cs51.h, ville vi
også nødt til at tilføje-lcs51?
ROB: Den eneste grund til dette-lcs50 virker perfekt, er fordi vi har dette sæt
op på et bestemt sted i dine apparater, så de ved, hvad
-Lcs50 midler.
Vi kunne bare give dig en cs50.c fil, og så kunne du kompilere det, siger
Klang hello.c cs50.c, og så ville det gøre din eksekverbare ved at sætte
disse to filer sammen.
Det ved, at-lcs50 betyder cs50.c over i en mappe, som vi angivet i
dine apparater.
Så hvis du ønsker en cs51.c at være kan fastsættes ved bare at sige-lcs51,
så ville vi også nødt til at sætte det i denne mappe, så det ved hvorfra det
lede efter den.
ALI: Hvad var dit spørgsmål?
>> SPEAKER 7: Hvorfor har du til at knytte CS50
hvis - wasn't det kopiere / indsat på det første trin, når du på forhånd behandles det?
ALI: Vil du tage den?
ROB: Sure.
Så cs50.h fil er adskilt fra cs50.c C-fil.
Har du fået at fungere prototyper i klassen?
Okay.
Så dybest set er cs50.h filen bare at kopiere og indsætte -
ALI: Har du fyre ved, hvad signaturer er?
Okay, så temmelig meget, hvis man ser på -
ROB: Lad os lade cs50.h er der ikke.
Nu er denne fil -
du laver streng s = GetString.
Men når vi har fået til dette punkt i koden, det har ingen idé om, hvad
GetString er.
Det ved, det er en funktion, da du kalder det.
Men det betyder ikke, at det faktisk er meningen at returnere en streng.
Så som jeg sagde, string s = GetInt, betyder det ikke giver nogen mening, eftersom
du tilmelder et heltal til en streng.
Men det betyder ikke, at GetString giver mening, fordi den ikke
vide, at GetString returnerer en streng.
Så hvad cs50.h siger, er noget som dette.
ALI: Så hvad Rob er at skrive er, det er et løfte på en måde, at det kommer til at
har denne funktion kaldet GetString.
ROB: Dette er alt, cs50.h er at kopiere og indsætte i her, samt
som GetInt og alle disse ting.
Og det bare siger, at GetString ikke returnere en streng.
Du ved ikke, hvordan det er implementeret endnu, men når vi kommer til denne linje, nu
det ved, at det korrekt returnerer en streng.
>> SPEAKER 9: Så hvis vi ikke gider med # include ting og i stedet
bare skrev prototypen for dem, at vi faktisk kommer til at bruge?
ROB: Yeah.
Så lad os køre dette.
SPEAKER 9: Er det?
Så som standard, ville det gøre det-l til CS50 bare fordi -.
ROB: - udtryk.
ALI: Ja, fordi, som du sagde, det er i make-filen.
ROB: cs50.h også sker for at være typedef char * til strengen.
Du kan helt ignorere, hvad det betyder for nu.
Men det er også noget medtaget i cs50.h.
Så nu tingene fungerede helt fint.
Det kører nøjagtig det samme som det var, da vi bare havde
# include.
Og så herunder cs50.h sker med over-omfatter ting du har brug for -
ligesom, behøver du ikke bruge GetInt i dette program, men det gør ikke noget.
Det vil bare ignorere det.
ALI: Og så når du gør det-lcs50 over her og lige her, hvad sker
på, er, at det er at have den faktiske implementerbar kode.
Så det er, hvor det egentlig er, gør det -
skrive koden for GetString.
Så det er ikke bare et løfte længere.
Det er faktisk går igennem og tager snoren og alt det der.
Give mening?
Spørgsmål? Ok.
Cool bønner.
>> ROB: Nu kan vi gå videre til faktiske kode.
ALI: Okay.
Så her er det første problem.
Så det siger skrive et program, der beder brugeren om et lille
brev og derefter konverterer det til store bogstaver uden at bruge bitvis
operationer, som pr prøve output nedenfor.
Så du kan se, du kører programmet med. / A.out, og så er du
vil sætte i små en, og så dit program bør give sin kapital
A. Så hvorfor ikke jer alle give det et skud på CS50 Spaces?
Så du fyre kan alle gå her.
Og du kan slette al koden ind her.
Og så kan du gå videre og begynde kodning af ting.
ROB: Du vil sikkert gerne bruge getchar, det er
inkluderet i CS50 biblioteket.
ALI: Jeg tror det ville være bedre, hvis du gemmer den øverste del.
Så du måske bare ønsker at ændre de ting i midten.
Gå videre og arbejde.
Du er velkommen til at arbejde med hinanden.
Rob: Og du kan stille spørgsmål, hvis du har -
>> SPEAKER 10: Hvad er en bitvis operation?
ROB: Så ignorere, at på dette problem.
ALI: Hvis du ikke kender det, det er godt.
ROB: Vi kommer til at bruge det i næste problem.
Men hvis du ikke ved hvad en bitvis operatør er, det er fint.
SPEAKER 10: Er det som at vende det til ASCII-koden?
ALI: Nej.
ROB: Nej.
Du kan gøre det for dette problem.
SPEAKER 10: Hvordan gør du det?
Så hvis bare jeg havde et sted at skrive -
ALI: Eller noget at skrive med.
ROB: Jeg kunne bare lidt type i dette.
ALI: Type øverst.
ROB: Åh, jeg sidder på en mikrofon.
>> Så vi så i foredrag, at den ASCII værdien for kapital A er 65 år.
Og kapital B vil være 66, og så videre.
Så du kan bogstaveligt talt bruge 'A' til det antal 65.
Lignende, er værdien 65.
Jeg kan gøre noget lignende int x = 100 - 'A'. Og nu x vil have værdien
100-65.
ALI: Du kan køre det og vise det.
Åh, måske ikke.
Det gør ikke noget.
ROB: Jeg var nødt til at udskrive det.
SPEAKER 10: Hvordan du tænder den tilbage til karakter?
ALI: Så hvis du lad være -
du bare tvinge den til at være char A, lig.
ROB: Så der er en -
sondringen mellem en char og et heltal er bare med hensyn til størrelse.
Så et heltal sker for at være i stand til at repræsentere ting op
til, gerne, fire mia.
En char er kun i stand til at repræsentere ting op til 255.
Men der er ingen forskel på dem andet end dette.
Så du kan sige char c = 65.
Det svarer til at sige char c lig 'A'.
ALI: Åh, nej.
Det betyder faktisk ikke gemme ting.
ROB: Nej, du kan ikke gøre det.
ALI: Det er bare -
[Stønner]
>> ROB: Okay, så hvad Ali bare skrev, var et program, som først udskriver 100 -
'A' som et heltal, som var 35, da vi forventer, fordi 100 minus ASCII
Værdien af ​​a er 65 år.
Så hun udskrives vha.% c, hvilket betyder fortolke det som en char.
Så 100 - en er 35.
Tolkning det som et tegn sker for at være den hash symbol.
Hvis man ser på asciitable.com eller hvad, vil du se, at 35 er det
hash symbol.
ALI: Okay, alle andre præciseringer om problemet?
Okay, kan du fyre gå videre og gøre det så.
Du er velkommen til at stille spørgsmål eller tale med hinanden.
Eller hvis du allerede er færdig, kan du slappe af.
>> LUCAS: Er de samme klasse, alle de små bogstaver i orden og
også det store er også i orden, fordi det er noget nyttigt for
problemet.
ALI: God pointe, Lucas.
Så har du fyre alle får det?
SPEAKER 11: Ja.
Det er hvordan du gør det, ikke?
ALI: Right.
ROB: Yeah.
SPEAKER 11: [uhørligt]
ALI: Okay.
ROB: Hvad er spørgsmålet spørger?
Bare for at konvertere -
ALI: Konverter lille til store bogstaver.
Det er det.
ROB: Okay.
ALI: Skal vi skrive det?
Jeg gætter vi bare se på en andens.
ROB: Så for dem, der kunne blive hængende, en måde -
hvis jeg har nogle char c, og lad os sige det sker for at være bogstavet D.
Så nu hvordan kan jeg regne ud, hvad bogstav C er?
Ikke D, men jeg mener, D sker for at være den fjerde bogstav i alfabetet.
Og hvis vi begynder at tælle fra 0, så er det det tredje bogstav i alfabetet.
Så hvis A er 0, B er 1, C er 2, D er 3, hvordan kan jeg finde ud af int position -
hvilken position i alfabetet C er i?
Er der nogen der har nogen ideer?
ALI: Jeg tror, ​​de er alle kodning.
ROB: Hvad med den første?
SPEAKER 12: Så uanset hvad A er, trække den første?
ROB: Yeah.
ALI: Ja, awesome.
Så du kan gøre stort D -
åh, undskyld.
Du tager karakter og du trækker den første, som du sagde.
ROB: Så hvis D er noget i retning af 68, og vi trækker A, som er 65, så får vi
3, fortæller os, at D er det tredje bogstav i alfabetet
startende fra 0.
Så du kan bruge det.
Nu ved vi, hvad bogstav i alfabetet i form af
store bogstaver, eller -
vi kunne gøre det samme for små bogstaver for at finde ud af hvad
små bogstaver position vi befinder os i.
Og vi kan bruge til at konvertere, at til store bogstaver ved hjælp af en
meget lignende ide.
Spørg efter forslag?
>> ALI: Tror du fyre - vent, jeg ved ikke hvor langt jer er.
Er de fleste af jer gjort, er du stadig arbejder, er du fast?
I fyre kan råbe ud -
fast.
En person sidder fast.
Cool.
Jeg har en tendens til at blive hængende, også.
SPEAKER 13: jeg er færdig.
ALI: Du er færdig?
Okay.
Udført.
SPEAKER 13: [uhørligt]
ALI: Ja, cool.
Er du kontrollere, at det er med små bogstaver form?
Okay, cool.
Hvor er andre mennesker?
Har denne antydning hjælpe dig, som for un-stikning dig selv?
SPEAKER 14: Ikke rigtig, men bare fordi, jeg ikke ved, jeg er ikke
fordøje det endnu.
ALI: Okay, cool.
Ønsker du at prøve -
eller ønsker du at gå og snakke?
>> ROB: Hvad jeg ville sige, er -
så ved hjælp af denne.
Kan du forstå, hvordan vi fik, hvad position i alfabetet
brevet er i?
SPEAKER 14: Okay, så når du sætter tingene i en enkelt citat,
der returnerer et tal?
ROB: Ja.
Det vil blive oversat til ASCII værdi, den repræsenterer.
Så har du lyst til at gå til ASCII-tabellen eller hvad det er?
ALI: Bare en af ​​disse?
ROB: Yep.
Så når du lægger nogen af ​​disse symboler, ignorerer en masse af det -
ALI: [uhørligt]
ROB: Åh, ved hjælp af markøren.
ALI: Yeah.
Det var spændende.
ROB: Så ignorerer disse dem på venstrefløjen, som er særlige symboler -
hvis du lægger nogle af disse symboler i anførselstegn, så vil det være
Oversat til denne værdi til venstre.
ALI: Dette er decimaltallet for det.
Det er ligesom A-kampe med 65, B til 66, og du vil opdage, at de er alle i
alfabetisk orden, som gør en forskel.
Så, som Rob siger, før i denne kodeks, vi beregne afstanden fra
det første bogstav i sig selv.
Og det vil være den samme, uanset om det er store eller små bogstaver.
ROB: Så når vi gjorde D, 68 minus A, 65, vi får 3.
Fordi D er tre positioner i alfabetet.
ALI: Så hvordan ville du oversætte, at over at finde den lille d?
ROB: Yeah.
Så hvis jeg har 3 nu, jeg ved, at jeg ønsker at gå tre bogstaver i det -
vi tilfældigvis til at gå små bogstaver nu, men lad os sige jeg ønsker at gå tre
positioner i det lille side af tingene.
Så hvordan kan jeg gøre det?
Jeg ved små bogstaver a er 97.
Så hvordan kan jeg finde tre positioner i de små bogstaver?
>> SPEAKER 15: Jeg har et spørgsmål faktisk.
ALI: Ja, gå videre.
SPEAKER 15: Så for dette, betyder det ikke så meget, om jeg kender denne position,
gerne, jeg har ikke brug for denne tabel.
ROB: Nope.
Du vil aldrig nødt til at bruge nogen af ​​disse numre.
Og det er et vigtigt punkt i dine programmer, som du bør aldrig hårdt
kode nogle af disse konstanter.
Brug 'A'. aldrig bruge 65 eller 97.
ALI: Disse kaldes magiske tal, og de er virkelig forvirrende.
Ligesom, når du debugging en kode, kan du ikke huske, hvad
De brugte dem til.
Og for os klassificering din kode, vil vi ikke rigtig ved, hvad
du bruger dem til.
Så det er bedre, hvis du rent faktisk bruge de tegn, så det gør
mere mening at folk.
Okay, alle andre spørgsmål?
Er flere personer gjort, eller -
Jeg tror vi kan kontrollere.
Det er virkelig uhyggeligt, at du kan se folks kode.
ROB: Yeah.
Vi har ikke at gøre det her.
Vi kender ikke folks navne, enten.
ALI: Oh yeah, godt det gør det bedre, så vi vil være endnu mere saglig
i stedet for bare tilfældigt plukke nogen.
Må ikke bekymre dig.
Jeg vil ikke gøre det.
Hvis du har tilfældige ting om - never mind.
Okay.
Hvordan gør folk?
>> SPEAKER 17: Så niende linje bør udskrive et tegn?
ROB: Ja.
ALI: Yeah.
Så hvis du går ned -
ROB: Åh, kan ikke gøre det.
ALI: Du vil se, at det trykte hash symbol.
SPEAKER 17: Åh, okay.
ROB: Jeg gætter på en anden måde, du kan se på tingene, er vi udskriver to
tegn.
Først en vi udskriver er bogstavet A.
Det næste, vi skal udskrive, er bare 65 år.
Det vil sandsynligvis yell på mig for disse.
Så hvis vi bare køre dette, vil du bemærke, at den udskriver A begge gange.
Fordi vi beder det om det samme.
Vi beder den om at udskrive bogstavet A. Og så er vi beder den om at udskrive
nummer 65 fortolkes som et tegn, der er det samme.
ALI: Har du noget at sige?
Åh, bare for sjov, undskyld.
Okay, hvordan er mennesker -
ROB: Vi kan bare gå igennem det.
>> ALI: Okay, så hvordan kan du begynde?
Anyone?
Som et tip, er vi nødt til at få noget fra folk, fra typers.
SPEAKER 18: [uhørligt]
ALI: Oh yeah, en hurtig, perfekt.
Så vi vil skrive -
hvad gør vi skrive?
Anyone?
Eller skal jeg bare skrive det?
Er vi faktisk at skrive -
ROB: Sure.
ALI: Så vi vil skrive en printf at bede den, så vi kan være
gerne, giv mig et tegn.
Okay, og hvad så?
Hvorfor gør den det?
ROB: Jeg ved det ikke.
ALI: Okay.
Så nu er vi fortæller dem til at give os et tegn.
Men så hvordan kan du faktisk få denne karakter?
SPEAKER 19: Brug GetString.
ALI: GetString?
Getchar?
Okay, så hvad er forskellen mellem en streng og en char?
SPEAKER 19: Strenge er en serie, som en række tegn.
>> ALI: Cool, ja.
Så i dette problem, vi behøver kun at overveje et tegn ad gangen, så
vi kun vil gøre getchar for denne instans.
ROB: Vi kunne implementere en funktion, hvis vi ønskede at tog en hel streng
og gik over strengen og ændret alle små bogstaver til store bogstaver, og alle
store bogstaver til små bogstaver.
Men her, vi bare beder dig for en karakter.
ALI: Så nu har vi tegnet her, men så er vi nødt til at gemme det.
Så vi vil tilføje char c - hvad?
SPEAKER 20: Definer variable.
ALI: Ja, præcis.
Så vi har vores karakter.
ROB: Jeg tror, ​​du kunne være -
du er kun tre pladser i, hvorfor det er råben på dig.
>> ALI: Okay, cool, nu da vi har tabbing sæt, hvad sker der nu?
Hvad er næste skridt?
ROB: Hvad vores program skal gøre, er at ændre et lille bogstav til et
stort bogstav.
Hvad hvis jeg tilfældigvis at indtaste hash symbol?
Er, at -
ALI: Det er en god symbol.
Vi bruger det en masse.
ROB: Er det en gyldig ting jeg kan konvertere til et stort formular?
SPEAKER 21: Nej.
ALI: Nej.
Vi skal kontrollere det.
Så vi kan få en if-sætning tjekker så hvis c er større end
eller lig med små bogstaver 'A'-
så hvis vi ser på diagrammet, vil du bemærke, at det skal være mellem her,
på 97, og det lille en.
Og det kan være en af ​​disse, og i intervaller hele vejen ned.
Og så er der z på 122.
Og det skal falde mellem disse to værdier.
Giver det mening?
ROB: Så hvis c er ikke mellem 97 og 122 -
eller du bør aldrig bruge disse numre - hvis c ikke er mellem 'a' og
'Z', så var det ikke et gyldigt tegn for os til store bogstaver.
ALI: Så i form af en kode, siger vi, at hvis c er større end eller lig med single
tilfælde små bogstaver -
wow, hvordan har du det?
Okay, er større end eller lig med det lille 'a', og det skal være over
det lille 'z'. Så det skal være mindre end eller lig med små bogstaver 'z'.
Vi gør sikker på det er mellem de to.
Så kan vi fortsætte med vores lykkelige kode.
Hvad?
ROB: Så jeg regnede vi ville bare holde beder, hvis vi tilfældigvis ikke har en
små bogstaver.
ALI: Åh, jeg var ikke klar over det.
Undskyld.
>> Okay, så hvis vi vil gøre, som Rob siger, og sørg for, at -
vi kan holde spørge dem, så hvad skal vi gøre?
SPEAKER 22: [uhørligt]
ROB: Yeah.
Vi skal bruge nogle form for løkke.
Fordi brugeren kan indtaste noget ugyldig en ufortalt beløb af gange.
Så du kan bruge en while-løkke.
Formålet med en do-while-løkke -
bogstaveligt, den eneste gang i hele dit liv, du nogensinde vil bruge gør-
mens løkker er, når du beder for bruger input.
Så det faktum, at vi beder for bruger input her er der en antydning af, at vi skulle
bruge en gør-while-løkke.
Og hvorfor så det?
Fordi do-while-løkke altid sker mindst én gang.
Så når du beder for bruger input, du ønsker at det skal ske mindst én gang.
Og så hvis tingene var en succes, kan du holde ud.
Hvis ikke, gå tilbage og spørge igen.
>> ALI: Så med andre ord, er vi nødt til at gøre sektion.
Og så dette fortæller det til at gøre noget.
Så printf -
udskrive erklæring, prompten, og også få tegnet, eller forsøge at
få et tegn.
Og så må vi se om det faktisk gjorde det rigtigt.
Så tilføjer vi de betingelser, så siger vi samtidig, og så har vi
betinget erklæring.
ROB: Men nu har vi vendt Tankegang.
Nu vi oprindeligt sagde, hvis c er i dette interval, er det gyldigt.
Nu ønsker vi at vende denne og sige, hvis C ikke er i dette interval, så vi
nødt til at sikkerhedskopiere at gøre tingene igen.
ALI: Oh, yeah.
ROB: Så mens dette ikke er sandt, at vi ønsker at gå tilbage og
bede om en anden karakter.
Skal alle se det?
Spørgsmål til dette?
Okay.
>> Så nu har vi et gyldigt tegn, som vi kan store bogstaver.
ALI: Så hvad det næste skridt for uppercasing det?
SPEAKER 23: Tilføj 32.
ALI: Du tilføjer -
Undskyld, hvad?
SPEAKER 23: Kan du ikke bare tilføje 32?
ROB: Så ja, ikke i form af magiske tal.
Du bør kun bruge single-quote ting.
SPEAKER 23: Okay, godt -
Rob: Men du kan få 32 -
ALI: Hvordan fik du nummer 32, jeg gætte, hvad vi siger.
SPEAKER 23: [uhørligt]
ROB: Så vi kan komme op med nummeret 32 ​​sammen -
SPEAKER 23: [uhørligt]?
ROB: Yeah.
Men hvis vi vil gøre det i de to trin vi gjorde før med
positionen stuff.
Så position i alfabetet, at c sker for at være er c minus små bogstaver
'A'. Så hvis vi ind i en lille "d", er position vil være 3.
Og nu ønsker vi at tage tingene til det store vifte af ting.
Så nu vores nye c vil være hovedstad 'A' plus position.
Så lad folk se, hvordan det bringer os -
vi flytter fra det lille område, den nøjagtige dybde var vi ind i det
interval, og går ned i det store interval, og går så langt
i den igen, er der vil være den samme karakter, men nu
uppercased.
ALI: Og for de mennesker, der blev forvirret af, hvordan han sagde bare 32,
dybest set han kombineret både disse i en erklæring.
Så en tilsvarende måde at skrive dette at sige du kan bare lidt
stedfortræder position, c minus 'a', og sætte det lige her.
Så hvad han gjorde, jeg lad være -
char newc = store bogstaver 'A' plus c minus små bogstaver 'a'. Og på grund af algebra,
du kan flytte dem rundt.
Du kan også sige, at du kan flytte det rundt, så char newc = store bogstaver 'A'
minus små bogstaver 'a' plus ca.
Og dette, vil du bemærke, hvis vi går tilbage til diagrammet.
Vi har store bogstaver A er 65 og små bogstaver a er 97.
Så 65-97 er -32.
>> Hi.
Tag plads.
Oh.
Du kan sidde lige her.
Cool, okay, awesome.
Velkommen til afsnittet.
Du vil bemærke, at forskellen er 32 år.
Så det er hvor han fik dette nummer.
Men det er ikke, som Rob siger, den bedste måde at gøre det på, fordi det har den underlige
magiske tal forvirring.
ROB: Du skal bruge kapital A minus små bogstaver en.
Du bør ikke bruge bare lige 32.
SPEAKER 24: Hvorfor er det, igen?
Hvorfor skal du ikke bruge 32?
ALI: Hvis vi gjorde det, ville det være char newc = -32 + c.
Og hvis du ikke kan se nogen af ​​resten af ​​det, hvis alt dette er væk, og du
bare se denne enkelt linje, så hvordan kan du vide, hvad den negative 32 er?
Det er bare ud af sted.
ROB: Så dit program ville fungere helt fint.
Det er bare en stil ting.
Nogen går ind og læse din kode, de er ligesom hvad betyder 32 betyder?
Måske har de lad være -
Jeg ville sandsynligvis ikke umiddelbart indse, at 32 sker for at være
Forskellen mellem et lille bogstav og et stort bogstav, selv om
vi kommer til at bruge dette i næste problem.
32 er -
du kunne efterlade en kommentar over det siger 32 er forskellen mellem
'A' og 'a'. Men på det tidspunkt, hvorfor så ikke bare bruge 'A' og 'a', og du
behøver ikke kommentaren dengang.
>> ALI: Det er bare de måder over det er meget renere, style-wise.
Og så, da du lige er startet programmering -
eller jeg gætte ikke, fordi du er hacker edi - never mind.
Det er bare en god måde at få -
det er bedre at have bedre stil.
Det er nemmere for andre mennesker at læse.
ROB: Du bør aldrig brug for at huske den ASCII-tabellen, nogensinde.
Du skal bare kunne bruge de enkelte citationstegn.
Spørgsmål?
ALI: Everyone god?
ROB: Okay.
Så næste problem er betydelig.
Så næste problem beder os -
ALI: Det næste problem beder for os at gøre det samme, men at bruge
bitvise operatører.
ROB: Og selvfølgelig har vi ikke set bitvise operatører endnu.
Så vi vil nu diskutere dem.
ALI: Vær begejstret.
De er super sjovt.
>> ROB: Så de regelmæssige operatører, ligesom x plus y, minus, gange, kløft.
ALI: Indtast det i denne prompt.
Rob: Der er også%, hvis du ikke har set det, som du kan bruge ved
procent symbol.
Men vi vil ikke bruge dem, for dette problem.
Vi ønsker at bruge bitvise operatører.
Husk nu, vi bragte det op i forelæsning et.
Jeg er ikke sikker på, om vi har diskuteret binær ud over dette.
Men husk, at hvert enkelt nummer er repræsenteret -
ja, alt -
er repræsenteret i 1s og 0'erne i binær.
Så det betyder, at når jeg siger det nummer 8, jeg tilfældigvis at vide, at det er
lignende, 1000.
What bitvise operatører lad os gøre, er at operere på disse bits -
er opererer på disse bit direkte.
Nu er jeg ikke længere beskæftiger sig med hensyn til otte.
Jeg beskæftiger i form af 1000, og jeg ønsker at gøre ting med dem
individuelle bit.
Så Ali har skrevet bitvise operatører her, men that's -
Tallet 8 vi vil bruge som en af ​​vores eksempel numre.
Og det binære repræsentation er 1000.
Vi vil bruge et andet nummer, 5 -
faktisk lad os bruge 9 og 5.
Og de 5 binære repræsentation er 00 -
0101.
ALI: Er alle godt på det?
Den binære ting?
Det var fra den første forelæsning?
>> ROB: Så selvom du ikke er helt på toppen af, hvordan man konverterer tingene til
binær, det er ikke helt vigtigt for dette problem.
Vi kommer til at bruge det, men du har mange flere chancer for at finde ud af, hvordan man
hurtigt vende tingene til binær.
Så ved hjælp 9 og 5, nu har vi vores bitvise operatører.
Åh, og også, 9 og 5, hvis det er et heltal, så virkelig det er 32 bits,
hvilket betyder, at vi har ligesom 0, 0, 0, 0 en masse gange, så
101 på den bitre ende.
Det er bare fordi, uanset hvad du gør, i heltal, 32 bit.
Bare fordi vi kun skal bruge fire bit til at repræsentere 9 betyder ikke at vi ikke
bruger op de andre 27 bit for bare 0'er.
ALI: Blot for at præcisere, et af disse numre, der er et 0 eller et 1 er en smule.
Denne ene er 4 bits.
Som så Rob sagde, at maskinerne gemme dem i 32.
Så ville de have 32 af enten et 0 eller et 1.
Cool?
ROB: The bitvise operatører.
Den første, som vi vil beskæftige sig med, lad os gøre &.
Så hvis vi gør 9 & 5.
Så hvad & gør, er, lidt efter lidt, det sammenligner bits af de to tal
og hvis begge tal er 1, så vil det returnere en 1.
Hvis man er et 0, og det andet er et 1, eller begge er 0s, så returnerer en 0.
Så du kan tænke på det som dine logiske AND.
Ligesom du har brug for sand og sand til at returnere sandt, men sandt og falsk er falsk.
Så det er det samme, men nu vi har at gøre med det med bare bits.
>> ALI: Så hvis du ser på dette, vil du have 1 -
du line dem op, så det vil være 1 og 0.
Tror du fyre tror, ​​det ville være - hvad ville det evalueres til?
SPEAKER 25: 1.
ALI: Cool.
Eller nej.
Undskyld.
Så betyder det giver mening?
Så hvad er den kollektive svar igen?
Undskyld.
Så hvis vi har 1 og 0, så hvad får du?
ROB: Så du tænker på hvordan du siger og højt.
Hvis to bits, x og y, skal X-og Y at være 1, således at den
at vurdere, sand - eller, for at det at vurdere, 1.
Hvis x eller y er 0, så er det evalueres til falsk eller 0.
LUCAS: Det er godt at huske også at 1 er sandt og 0 er falsk.
Så hvis du har sand & falsk, det er falsk.
Men så, sandt og rigtigt, rigtigt.
False & falsk, falsk.
ALI: Vi har sandt & falsk.
Så 1 og 0.
Så igen, undskyld, en gang til?
SPEAKER 25: Det ville være 0.
Ja, cool.
Og så har vi 0 & 1 -
SPEAKER 25: [uhørligt]
ALI: Yeah.
Så du kan altid bytte dem i -
Så hvis du har 0 og 0?
SPEAKER 4: 1?
0?
ROB: Så det er 0.
Det er ikke, at begge numre er nødt til at være den samme.
Det er, at begge numre er nødt til at være 1.
ALI: Så både nødt til at være sandt for det at være sandt.
Så det er 0.
Og så har du 1% 1, der er?
ROB: Disse er temmelig gode numre.
De har alle mulige -
ALI: Godt arbejde, wow.
Okay, cool.
Så giver det mening for alle?
>> ROB: Så nu vi vil gøre |.
Og det vil være meget ens, men nu i stedet for x og y skulle
være 1 for at det at evaluere til en, nu er det bare x eller
y skal være 1.
ALI: Så 1 | 0 evalueres til -
KLASSE: 1.
ALI: Cool.
0 | 1 evalueres til -
KLASSE: 1.
ALI: Cool, og derefter 0 | 0 -
KLASSE: 0.
ALI: Ja, og derefter 1 | 1 -
KLASSE: 1.
ALI: Cool.
Så det er ligesom to bitvise operatører.
Awesome.
ROB: Så nu vi vil gøre ^.
ALI: Skal vi gøre dem alle?
ROB: Ja, fordi jeg tror, ​​vi kommer til at bruge det -
med dem alle.
ALI: Okay.
Så -
ROB: Jeg gætter vi ikke behøver at.
ALI: Så ^ værker, som du skal have præcis én sand og én falsk.
^ Betyder eksklusive OR.
Så nu er det ikke -
Hvis x og y er begge 1, er det nu falsk.
Det er forskellen mellem ^ og |, er, at OR, kan du få, hvis x er
sandt eller y er sandt, så er vi er gode.
Nej, ^ siger, at hvis x er sandt, må y være falsk, ellers er det ikke sandt.
Har du et spørgsmål?
>> SPEAKER 26: [uhørligt]
ALI: Yeah.
Det er slags ligner.
ROB: Ja, så når du kommer til at lav-niveau hardware stuff, disse er
de typer af operationer du beskæftiger sig med.
På hardware-niveau, vil du kun beskæftige sig med bits.
Du behøver ikke beskæftige sig med tal.
ALI: Okay, for ^, eller hvis du har en ^ 0, hvad skal der evalueres til?
KLASSE: 1.
ALI: Cool.
Hvis du har
0 ^ 1? KLASSE: 1.
ALI: Cool.
0 ^ 0?
Cool.
Og derefter 1 ^ 1?
KLASSE: 0.
ALI: Cool, awesome.
Den næste -
ROB: Jeg tror, ​​det er alt, hvad vi er nødt til at beskæftige sig med.
Vi vil kun gøre disse.
ALI: Den eneste gang vi bliver nødt til at gøre -
ROB: Oh, vil det være den sidste problem.
SPEAKER 27: Vent, endnu en gang?
ALI: Undskyld, hvad var dit spørgsmål?
>> SPEAKER 27: Kan du forklare det igen?
The ^?
SPEAKER 27: udelukkende et - ja.
ALI: Så hvad den eksklusive OR betyder, at der skal være udelukkende
et virkeligt og et falsk, så en 1 og en 0, kontra med OR, kan du få -
en af ​​dem har til at være sandt, eller dem begge kan være sande, for det
at evaluere til true.
SPEAKER 27: So 0 og 0 ville være falsk.
ALI: Yeah.
Men hvis du har 1 |
1, ville der evalueres til sand.
Men hvis du har en ^ 1, som vi gjorde, som evalueres til FALSK.
Fordi det ikke er udelukkende én er sandt.
ROB: Og det kan eller ikke kan være nyttig, men bemærk, at ^ er
svarende til bare at tage |
minus &.
Og du kan faktisk tænk på det på denne måde.
^ Er bare ORing alting sammen, men tager nogen af ​​de bits, hvor
begge var sandt.
Så & returnerer alt, hvor begge var sandt.
| Returnerer alt, hvor den ene eller begge var sandt.
Så trække det ud fra | giver dig ^.
ALI: Har du spørgsmål?
Dette var en masse information.
Alle godt?
>> ROB: Vi kan gå over de næste dem til næste problem, skråstreg
hvad er klokken?
De har ikke brug for dette indtil næste problem.
ALI: Jeg troede, det var denne ene.
ROB: Det er ikke.
ALI: Er du sikker?
ROB: Ja, jeg er positiv.
ALI: Skal vi ikke begynder at gøre det næste problem?
Problemet er, igen, at ændre det fra små bogstaver til store bogstaver, og det
tid til at bruge bitvise operatører.
ROB: Så vi vil -
lad os starte med den binære repræsentation af 'A', hovedstad 'A',
som er 65 år.
Så i binær -
så 'A' = 65, hvilket =, i binær -
Jeg har tænkt mig at lave rod i antallet af 0s - det.
ALI: Så gør det mening for alle?
Så, 1, ingen 2s, ingen 4s, nej 8s, nej -
ingen 16s, ingen 32'ere, og derefter en 64.
ROB: Ja, jeg tror, ​​det er en alt for mange 0'er.
ALI: Undskyld.
>> ROB: Okay, så vi har den 64 sæt, og vi har 1 sæt, og kombinere dem
sammen, får vi 65 år.
ALI: Cool bønner?
ROB: Så nu, små bogstaver 'A'-
bemærke 97 -
hvad er forskellen mellem 97 og 65?
SPEAKER 28: 32.
ROB: Yeah.
Så det er 32, som er sin egen bit, så det kommer til at være 110.001.
Og det vil være sandt for alle mulige tegn.
Så hvis vi tænker på 'D', som kommer til at være 68, er der vil være 1.000.011.
Og så lille 'd' vil være 68 plus 32, som er 100, hvilket er
vil være det samme, at det var, bare spejlvende
32 igen, så 1.100.011.
Så forskellen mellem et stort og lille bogstav er bare flippe
at 32-bit position.
SPEAKER 29: Er det ikke 1.000.100?
ROB: Vent, det er 100 -
noget jeg gjorde forkert.
Dette var ikke sandt.
Jeg tænkte, at det var en forskel på 3, så så jeg bare fast
den binære 3 i slutningen.
Dette bør være rigtigt.
ALI: Tak.
God til at pege det ud.
Det var skarp.
Okay, er det klart for folk?
>> ROB: Forskellen mellem store og små bogstaver version er
altid bare at være 32, og så det altid vil være en enkelt bit
der skal vendes til at skifte mellem de to.
ALI: Så i dette tilfælde, at kende forskellen mellem hovedstaden A og
det lille a er en god ting.
Ikke i din kode, men begrebsmæssigt mindst, er det godt.
Så du fyre kan gå videre og kode, der i Spaces nu.
Eller skal vi bare diskutere det?
ROB: Vi kan bare diskutere det.
Det ved jeg ikke.
Du fyre kan prøve.
Tal blandt dig selv for lidt.
Vi vil give dig en chance for at kode det.
[Indskyde STEMMER]
ALI: - er cool
SPEAKER 30: Dette er ligesom hacker komedie.
ALI: Ja, vi er bare at fortælle nyheden, går igennem den.
>> Rob: Og vi er tilbage.
ALI: Det er lidt underligt.
Jeg mener ligesom vi bør have en CS50 nyhed station og vi kunne
faktisk sidde sådan her.
ROB: Hacker News.
ALI: Hacker News 50.
ALI: Du er velkommen til at stille spørgsmål, hvis du er forvirret.
ROB: Er der nogen fast?
ALI: Ja, det er en god ting.
ALI: Vent, er du fast i din stol?
Oh.
Jeg var lidt bekymret.
ROB: Fordi jeg har lige indset, at vi vil ønsker
en anden bitvis operatør.
For nu, lad os bare konvertere store til små bogstaver.
ALI: Beklager, alle får denne meddelelse?
Vi kommer til at gå fra store til små bogstaver.
ROB: Så vil vi diskutere små bogstaver til store bogstaver lige efter det.
Åh, nej.
Vi har en fejl i dette, som, jeg tror, ​​vi aldrig prøvet at løbe.
Som er lige at char c skal erklæret uden for sløjfen, da
dens anvendelsesområde er begrænset i sløjfen.
SPEAKER 32: I dette tilfælde er det forkert at bruge et nummer?
ROB: Eh, behøver du ikke til.
Hvis jeg garanteret dig at kapital 'A'- eller små bogstaver' a 'minus hovedstad' A '
var præcis én bit, men at du ikke ved det er 32 -
ting ville fungere lige så godt, hvis det var den 16 bit, der blev vendt - eller
nej, jeg tror det wouldn't -
eller 64 bit blev vendt, evt.
Men du bør ikke være nødvendigt at bruge 32.
Du kan i stedet bruge små bogstaver 'a' minus hovedstad 'A'.
>> SPEAKER 32: Okay.
Hvad du kan gøre, hvis du føler at du er ved at skrive for meget er du kan definere det
øverst.
Så du kan være ligesom, int forskel = små bogstaver 'a' minus hovedstad 'A'. Og
så kan du skrive forskel i stedet.
Det er gyldigt.
Men bare bruger nummer 32 er lidt -
SPEAKER 33: Selvom det er på grund af det faktum, at det er den 32 bit?
ALI: Yeah.
ROB: Der kan være -
den eneste garanti, vi er nødt til at gøre dig er, at forskellen mellem den
små og store er én bit.
Det bør ikke noget, at det sker for at være den 32 bit, der er vendt.
For tiden overvejelser, vil vi begynde at gå over dette.
Det er okay, hvis du ikke er færdig.
Det skal du ikke tænke på.
ROB: Forudsat c er et stort bogstav -
vi behøver ikke at antage c er et stort bogstav.
Vi ved, c er et stort bogstav efter denne while-løkken -
do-while-løkke.
Så det betyder, at det ser ud som dette 'A'. Så hvis vi ønsker at bringe dette
'A' til dette 'a', hvad vi skal gøre?
Så hvordan kan vi konvertere og vende bit?
ALI: Hvordan kan vi vende det?
>> ROB: Så vi ved, at vi ønsker at vende 32 bit.
Så det vil gøre 'a' minus 'A', eller vi kunne skrive 32, men -
darn det, det er den anden vej rundt.
ALI: Okay så Rob her er beregningen af ​​nævnte antal, magiske tal 32.
Så han finde ud af, hvor denne bit flip område ville være.
Og hvad gør vi sætte hvor spørgsmålstegnene er?
ROB: Hvordan kan vi vende det lidt?
Med hensyn til det store bogstav, er det et 0, og vi ønsker at blive en 1.
SPEAKER 34: |.
ROB: Yeah.
Så dette er os siger vi tage 'A'. Vi ORing det med 0 -
1000 -
og at = at.
ALI: Giver det mening for alle?
Vi kan gå igennem det lidt efter lidt, hvis du ønsker.
SPEAKER 35: Er du [uhørligt]?
ALI: Hvor er minustegn?
ROB: Åh, du mener her?
ALI: Oh, yeah.
ROB: Så jeg gætte, dette er os.
Vi kunne sige 32, og nu er vi bare bruger bitvise operatører.
ALI: Vi kan ikke lide magiske tal.
Vi vil ikke gøre det.
Også jeg synes, vi skal bare bruge en bitvis operatør -
SPEAKER 36: Hvis du bruger en ^ A, vil du få 32?
SPEAKER 37: Ja, jeg tror -
ROB: Ja du vil.
ALI: Dette er, hvordan du ville have gjort det for at gå
fra kapital til små bogstaver.
>> Nu kan nogen fortælle mig, hvorfor Rob og jeg skiftede hurtig og hvordan vi gik
fra store små, små bogstaver i stedet for at
store bogstaver, som vi gjorde før?
Er der nogen der har nogen ideer, hvorfor det kan være mere besværligt?
ROB: Så vi ville gøre -
ALI: Ja, gå videre.
SPEAKER 38: | operatør var kun virkelig god til at tilføje.
ALI: Ja, præcis.
ROB: Så hvad vi ønsker at gøre i det lille til store bogstaver sag er,
konvertere dette 'A'-
så vi ønsker at sætte i nogle numre her og bruge nogle operatør, så det kommer
ud til kapital A. Vi er stadig formentlig ved hjælp af 32 eller anden måde, men nu hvordan gør vi
få dette til at komme ud af dette?
So c -
åh, jeg stadig ønsker at også -
ALI: Så nu, hvis vi konverterer fra små bogstaver til store bogstaver igen, så vi
gøre det ^ operation, da du fyre sagde.
ROB: Der er andre måder, du kan gøre tingene på.
En masse af de bitvise operatører ender med at blive meget let definerbar i form
af andre bitvise operatører.
Så jeg skulle ikke bruge ^ eller overhovedet, men ^ fungerede helt fint.
>> ALI: Okay, så vi kommer til at gå på det sidste problem, som er at grundlæggende -
det sidste problem er at konvertere noget til binær.
Så, for eksempel, har du 50 og derefter du konvertere den til
binære, hvilket er 110.010.
Og jeg tror du fyre kender alle binær fra forelæsning.
Og du er heller ikke meningen at lægge nogen førende 0'er ind i det.
ROB: Du kan ignorere denne del for nu.
Den første passage, kan du gøre det, så der er førende 0'er.
Og så kan vi ændre det at have nogen ledende 0'er, hvis vi har tid.
ALI: Så du skal ikke bekymre dig om det.
Bare prøv at komme i binær.
Et godt sted at starte ville være -
ROB: Vi er nødt til at bede om et heltal.
ALI: Oh yeah, det er en god en.
Vi kan starte med det.
Så du kan ændre prompten.
Så i stedet for en karakter, vi nu har at gøre med heltal.
Cool?
>> ROB: Og nu, hvad er vores do-mens betingelse vil være?
Det er beder om et ikke-negativt heltal.
ALI: Hvornår skal vi ønsker at holde brugeren bliver spurgt efter noget andet?
Når det er mindre end 0.
ALI: Right.
ROB: Mens jeg er mindre end 0.
ALI: Nu vil vi konvertere den.
Tror du fyre har nogen ideer om hvad man skal gøre?
Eventuelle antydninger?
Yeah.
SPEAKER 39: Har vi nødt til at konvertere det, eller kan vi bare printe nogle 0'er og 1'ere
det ville være det rigtige nummer?
Kunne du gøre en for-løkke og tælle ud af potenser af 2?
ROB: Ja.
Du behøver ikke at konvertere jeg til dens binære -
Den binære repræsentation af jeg vil ikke passe ind i i.
Du skal bare nødt til at udskrive den binære repræsentation af i.
ALI: Med andre ord, behøver du ikke at gå af beføjelser to.
ROB: Fordi jeg allerede er ved at blive lagret som binære filer, så du ikke behøver at
konvertere den til binær.
Bare gå over dens binære, og udskrive det.
Og du vil få brug for at bruge bitvis, fordi du ønsker at se på
de faktiske bits.
Du behøver ikke at bruge bitvis, men venligst gøre.
Og det er faktisk -
du kan bare gøre potenser af to ved at multiplicere med 2.
Vi vil gå over en af ​​de sidste to binære bitvise operatører,
der er denne ene.
Så når du tager -
>> ALI: Kan du gå igennem dem begge?
ROB: Yeah.
Så lad os gå med 9.
Så 9 venstre skift 1 -
hvad venstre shift organ er bare flytte alle bits til venstre og indsætte en 0.
Så vi flytter alle bits af 9 til den venstre
position, hvilket giver os -
Så opdager vi har flyttet alt forladt en, og indsat en 0 på
højre side.
Hvis vi havde flyttet efterladt af to, ville vi flytte alt efterladt af to,
og isæt to 0'erne at udfylde hullerne.
Spørgsmål?
ALI: Så højre shift gør en lignende ting.
Hvis du har 9 højre shift 1 så er du bare flytte alt over til
højre, mister du et ciffer, så 100 i stedet.
ROB: Så du det er fint, at du er ved at miste den smule, der tilfældigvis alle
vejen til højre.
Der findes forskellige typer af rigtige skift, men dybest set du kan tænke på
HØJRE SKIFT som bare dividere med 2.
Og du kan tænke på venstre skift som multiplikation med 2.
Så hvis du har konverteret dette -
Hvis du har konverteret 9 skift 1, som er lig med 10010, hvis du rent faktisk gik
gennem den binære og regnet ud, hvad det var, ville det bare være 18 år.
Vi har lige ganges med 2.
1001 venstre Shift 2 vil være 36.
Vi gang med 4.
Okay, cool, så det er en handy bitvis operatør for denne ene.
Mere forvirring?
Vil du fyre ønsker at prøve det?
Eller vi kan bare hoppe ret i og starte det?
ROB: Vi skal nok springe ret i.
ALI: Ja, Okay.
Rob: Og gå igennem det sammen.
>> ALI: Jamen jeg vil bare gå ind i det.
Så som han sagde i starten, vil vi bare gå igennem lidt efter lidt.
Så vi får brug for en løkke.
Er der nogen der har en idé om den bedste form for løkke til at gå igennem det her?
Vi har mens sløjfer, gør-while-løkker, for sløjfer.
SPEAKER 40: Do-while-løkke?
ROB: Så husk hvad jeg sagde før om, at vi kun bruger gør-mens
løkker for at få brugerinput.
Du vil aldrig temmelig meget nogensinde bruge dem til noget andet.
ALI: Problemet med gør-while-løkker er det gør noget, før det kontrollerer, om
tilstanden.
Så kunne den gøre noget slemt -
gerne, ondt -
gøre noget, er ikke muligt.
Så du ønsker at tjekke først.
ROB: Der er en masse sager, hvor du kan bruge do-while-løkker, men folk
forventer ikke, at du bruger dem, medmindre det er brugerinput.
Så vi har brugt vores do-while-løkke til at få i.
Hvor mange gange er vores løkke vil ønsker at sløjfe?
Vi ønsker at sløjfe over hver af bittene i.
Hvor mange bits er i i?
SPEAKER 41: 32.
ALI: Yeah.
ROB: Så der er 32 bit.
Vi ønsker ikke at sige 32.
Vi i stedet ønsker at sige sizeof -
der, har du set, at der i klassen endnu?
ALI: Nope.
ROB: Hvorfor får jeg at bruge det -
sizeof (int) gange 8 -
ALI: Så sizeof er -
>> SPEAKER 42: [uhørligt]
ALI: Interessant.
Så sizeof er en indbygget i C-funktion, hvor det bare fortæller dig det
antallet af bit i -
ROB: Bytes.
ALI: Bytes, undskyld -
antallet af bytes, at en variabel er nødt til at gemme en værdi.
Så jeg tror, ​​at han gik over i klassen, så en int er 4 byte måske.
Cool?
ROB: Men du bør ikke brug for at vide, at en int er 4 bytes.
Du bør være i stand til at sige -
du skal bruge sizeof (int) for at få 4 byte.
Og det er faktisk vigtigt for nogle ting.
En int måske ikke være 4 bytes.
På en anden computer, kan en int være 8 bytes.
Så dit program fungerer ikke på denne computer, fordi du hard-coded 32
bits, når på den pågældende computer sker for at være 64 bit.
ALI: Så du har det samlede antal bit, som du ønsker det at vende.
ROB: Og forskellen mellem en byte og en bit er, at der
er 8 bit i en byte.
Så sizeof (int) returnerer 4 bytes, så vi er nødt til at formere sig, at
med 8 for at få 32 bit.
>> ALI: Okay, så vi kender det maksimale, og vi ved, at vi ønsker at gå fra -
vi ønsker at gå igennem dem alle.
Så vi ønsker at gå fra 0 til numBits.
Så er der nogen vide, hvordan man skriver løkken for det?
Anyone?
SPEAKER 43: [uhørligt]
ALI: Så du ønsker at krydse nummer i fra nulte smule til
første bit, den anden bit, den tredje bit, hele vejen til numBits.
Den max antal bits, som du kan komme til.
ROB: Hvad er den fælles loop vi bruger det, vi ønsker at gøre noget x gange?
ALI: For.
Perfekt.
Så vi har for.
Og så vil vi skabe en iterator, som ikke vil være i.
ROB: j.
ALI: J = 0.
Så vi vil starte ved 0.
Og så er vi nødt til betingelsen for at sikre, mens du er
går igennem det hver eneste gang -
[Indskyde STEMMER]
ROB: j.
ALI: j er mindre end numBits.
Så vi ønsker ikke at gøre det faktiske lig med en, fordi de er numBits
alt, og vi starter ved 0.
Så vi er faktisk nødt til -
SPEAKER 44: Oh.
ALI: Indeksene slutter ikke ved numBits minus 1.
ROB: Vi mærke de bits 0 til 31, vi ikke mærke dem 1 til 32.
ALI: Og så vil vi forøge hver gang efter en, fordi vi ønsker at
kontrollere hver enkelt.
Så vi vil gå j + +.
>> SPEAKER 45: Hvorfor gør du det?
SPEAKER 46: Hvorfor er du går igennem hver bit?
ROB: Så vi ønsker at gå igennem hver eneste bit og -
Så lad os sige, at vi har nogle tal.
ALI: 68.
ROB: Vi kan bruge 68.
Så den binære kommer til at være 100.100.
Så dette er inde i jeg, og vi ønsker at gå over hver af disse bits.
Er det en 1?
Print 1.
Er det en 0?
Udskriv 0.
Så går vi videre til næste bit.
Er det en 1?
Print 1.
Er en 0?
Udskriv 0.
ALI: Cool, okay.
Nu er vi ved det rigtige indeks for, hvor denne bit er.
Hvordan kan vi kontrollere, at særlige en?
Lad os sige, at vi er på j = 0, så vi ønsker at kontrollere 0 indeks for den smule.
Så i dette tilfælde,. Denne ene
>> Så nu hvordan kan vi gå om check - oh, det ville være denne.
ROB: Yeah.
ALI: Undskyld.
Hvordan ville vi gå om kontrol, at man i en vis forstand?
Hvordan ville vi se, om det er et 0 eller et 1?
Well let's -
KLASSE: Og 1?
ALI: Og?
Yeah.
ROB: Så lad os sige, at vi allerede har 1.
Så er dette &, vil dette vende tilbage, om det var et 1 eller et 0.
ALI: Så vi kan gå ned.
Og vi kan gøre, som du fyre sagde, at gøre det & funktion.
ROB: int -
hvordan skal jeg ønsker at sige dette -
isOne = i.
Og for første bit vi tilfældigvis til at se på, vi laver i & 1.
Nu, hvad skal vi ønsker at & ved for anden bit?
SPEAKER 47: 2.
ROB: Ja, det andet, at vi er på 2.
ALI: Du vil bemærke, at 1 har flyttet over til den venstre.
Så har vi lært nogen bitvise operatører til at gøre denne funktion?
ROB: Den næste -
ALI: Yeah, right, præcis.
Så det er en venstre skift.
I stedet for altid at kontrollere med 1, vi kommer til at flytte det.
Og hvor mange gange skal vi flytte den?
Hvis vi tjekker den nulte man så vil vi flytte det over nul.
Ja, præcis.
Så du forlod flytte det ved j.
Perfekt.
Så nu ved vi -
vi har denne int af, hvis det er 1, og derefter -
så Robs slags snyd her -
og så nu han gik videre og han siger bare, at hvis det rent faktisk er 1,
fordi 1 evalueres til sand, så vi ikke behøver at sige ISF isOne lig med 1 -
så hvis isOne, så vi udskriver 1, og ellers kan vi printe 0.
>> ROB: Så vores program har en samlet bug.
Nå, spørgsmål om dette først.
SPEAKER 48: Kan du nogensinde sætte isOne inde i fire operation del og
så har det flytte sig som den sidste del?
Så isOne svarer til 1 og derefter -
ROB: Ja, du kan.
Vi kan faktisk vise, at når vi lave den fejl, at jeg er ved at
diskutere med jer alle.
Bemærk den rækkefølge, vi skal over ting.
I betragtning af denne binære repræsentation, er vi starter med den nulte bit.
Hvis det er et 0, så vi udskriver -
godt, det er et 0, så vi udskriver 0.
Så går vi til den anden bit.
Det er et 0, så vi udskriver 0.
Så går vi til den tredje bit.
Det er en 1, så vi udskriver 1.
ALI: Så det går baglæns.
Så hvordan tror du fyre foreslår, at vi ordne og gå den anden vej?
SPEAKER 49: [uhørligt]
ROB: Yeah.
Så i stedet for at gå fra 0 til numBits, vil vi gå fra numBits bits til 0.
ALI: Så [uhørligt]
kan altid gå den anden vej.
ROB: NumBits minus 1, fordi det er den sidste nubmer -
ALI: Fordi det går fra 0 til 31.
Og så vil vi altid sørge for, at det er større end 0, så du ikke går
for langt til højre.
Og så vil du altid trække med 1 til at gå til højre.
>> ROB: Så nu har vi en omvendt sløjfe, og antallet er tilbage i udskrivning
på den rigtige måde.
SPEAKER 50: Har du ikke nødt til at ændre skift ting også?
ALI: Så nej.
ROB: Vi laver nøjagtig de samme funktioner, bortset nu
i omvendt rækkefølge.
Så i stedet for at gøre det skiftende ved numBits minus 1 for at få, hvad dette
bit er, i stedet for at gøre det sidste, vil vi bare gøre det først.
Ved at vende dette op her, omvendt vi rækkefølgen af ​​alt
det sker indeni.
Men vi ønsker ikke at ændre hvad der sker inde på alle.
ALI: Giver det mening?
Behandling?
Okay, er så nogen andre har nogen andre begrebsmæssige spørgsmål?
ALI: Før vi går ind i hans punkt, som er -
ALI: Okay, godt gå.
Rob: I stedet for at bruge j at være vores -
stedet for at bruge j til altid skifte med, ligesom en venstre skift j, tror jeg, hvad
du siger er ligesom, at j bruge sig selv.
Så for j -
Jeg tror det er den hårde - j = 1 << 31.
Er det, hvad jeg vil?
Jeg tror, ​​det er << 31.
j> = 1.
j >>, >> isOne, I & j -
så nu i stedet for at bruge -
ALI: Du konstant bevægelse j stedet for at have en
indeks til at kontrollere det.
Det er ikke så slemt.
Vi bruger en lignende form for logik.
Så hvis du går tilbage -
oh, men det kommer til at miste det.
Okay, du er bare at skrive det igen.
Hvis du opdager, at vi har 1 << j antal gange, og vi var
forøgelse j hver eneste gang ved et trin, men denne gang i stedet
de laver tilvæksten af ​​j øverst inde i for-løkken.
Så i stedet for altid at flytte det ned -
ROB: Den allerførste iteration af for-løkken, vi har j er 10000.
Den næste iteration af for-løkken er 01.000.
Den næste iteration er, at.
Og 1 er bare at holde formerings ned, indtil vi ramte den meget
ende, hvor nu er det her.
Det næste, er en kommer til at blive skubbet ud, og j er ikke længere større
end eller lig med en.
Jeg kunne også sætte større end 0, samme forskel.
Og så det er det.
Spørgsmål?
Yeah.
>> SPEAKER 51: [uhørligt]
ROB: Så det er det samme som -
har du set j + = 3?
Så det er det samme som j = j + 3?
Du kan gøre det for stort set alle erhvervsdrivende i C. Så j >> = 3 er
lig med j = j >> 3.
Så det virker også med bitvise operatører.
Og jeg skulle ikke have sat 31 her.
Jeg burde have sat numBits - 1.
ALI: Yay, ingen magiske tal.
Okay, det er 4:00, så hvis du fyre nødt til at gå - men giver det mening?
Tror du fyre har andre spørgsmål?
ROB: Jeg blev også vil smide i, at hvis vi ønskede -
har han diskuteret ternære operatør på alle?
ALI: Nej.
Det er okay.
ROB: Så du kan se på det til næste gang.
ALI: Okay, virkelig?
Nu er du bare vise frem.
ROB: Nej, nu det er -
Dette er, hvad får folk interesseret, og nu vil de gå kigge ind i den.
Så nu, der gør det samme, i én arbejdsgang.
Så først kontrollere, er I & j 1?
Er det sandt?
Hvis det er tilfældet, udskrive en 1, andet, udskrive en 0.
ALI: Men gør det på den anden måde er helt fint så godt.
Det har den samme logik.
Så det er ikke ligesom man er -
ROB: På dette punkt kan vi slippe af med de krøllede parenteser, fordi det er kun
en one-line til loop.
ALI: Okay, er så det mening?
Det var lidt af et spring.
Men det var bare lidt syntaks, så mere.
>> Cool?
Andre spørgsmål?
ROB: Okay.
ALI: Okay, cool.
Tak for at komme til afsnittet.