DOUG LLYOYD: Så hexadecimale tal, som hvis vi havde brug for en anden base nummer
Ordningen ret?
Tja, de fleste vestlige kulturer, som du sikkert er bekendt,
bruge decimal system-- bund 10, til at repræsentere numeriske data.
Vi har cifrene 0, 1, 2, 3, 5, 6, 7,8,9.
Og hvis vi har brug for at repræsentere værdier højere end ni,
vi kan kombinere disse cifre ved hjælp af begrebet pladsværdi.
Så for 10, har vi en 1 cifret efterfulgt af et 0-cifret
og vi intuitivt forstår at det, vi laver
der er vi multiplicere de første 1 med 10,
og derefter tilsætte 0 for i alt 10.
Computere gøre noget temmelig lignende, som du sikkert kender,
med den binære system-- basis 2.
Forskellen at der er at der kun er 2 cifre
at arbejde med-- 0 og 1.
Og så vores sted værdier, stedet for at være en,
ti, hundrede, tusinde, da de ville være i decimal systemet,
er en, to, fire, otte, og så videre.
Her er ting selv, disse 0'er og 1'er, især
hvis vi bliver dataloger og vi laver en masse programmering
eller arbejder med computere, var at gå skal se en masse binære tal.
Og disse 0'er og 1'er i store kæder kan være meget vanskeligt at analysere.
Vi kan ikke bare se på en streng af 0'er og 1-og nødvendigvis ved
præcis, hvad det er.
Men det er stadig nyttigt at kunne udtrykkelige data på samme måde
at en computer gør.
Vi har dette begreb af hexadecimal system, som er
bunden 16, i stedet for basen 10 eller bunden 2.
Hvilket betyder, at vi har 16 cifre at arbejde med i stedet for 10 eller 2.
Og det er en langt mere kortfattet måde at udtrykke
binær information i et computersystem, det er meget mere menneskelig forståeligt.
Så vi har cifrene 0 til 9, og derefter
vi har også disse ekstra seks digits-- a, b, c, d, e, f og, som udgør 10,
vores opfattelse af 10, 11, 12, 13, 14 og 15, i decimal.
Nogle gange, ved den måde, vil du også se disse A til F s som kapital A
gennem F, som er den måde jeg har tendens til at gøre det.
Det er bare min foretrukne stil, men enten er fint,
de begge repræsenterer temmelig set det samme.
>> Så hvorfor er hexadecimal cool?
Hvorfor har vi brug for at bruge denne andre yderligere base?
Vi har allerede 2 og 10, hvorfor har vi brug 16?
Nå 16 er en potens af 2, og så hver hexadecimalt ciffer, 0 til f,
svarer til et unikt bestilling, eller enestående arrangement
4 binære cifre, 4 bit.
Og så i den forstand kan vi udtrykke meget lange, komplekse, binære tal
i hexadecimal i en langt mere koncis måde,
uden at miste information eller at skulle gør særligt besværlige konverteringer
på disse numre.
>> Så, som jeg lige har sagt, hver hexadecimalt ciffer
svarer til et unikt arrangement af 4 binære cifre.
Så den binære streng 0000 svarer til hexadecimal ciffer 0.
0110 svarer til hexadecimal ciffer 6.
Og 1111 svarer til hexadecimal tal f.
Hvis du kigger på dette skema, især
Hvis du kigger på den venstre side af diagrammet,
du kan allerede se, at der er en lidt af en tvetydighed problem her.
Decimal 0 er temmelig meget skelnes fra hexadecimal 0,
bortset fra det faktum, at det er under en kolonne, der siger hexadecimal.
>> Men vi vil nok ikke altid har denne kolonne der.
Generelt når vi udtrykker numre i hexadecimal notation
til klart at skelne dem fra decimal notation,
vi normalt præfiks dem med præfikset 0x.
0x betyder intet i virkeligheden det er bare en anelse for os som mennesker
at det, vi er ved at se, eller ved at starte parsing,
er et hexadecimalt tal.
Naturligvis for de højere cifre a, b, c, d og f, som svarer til 10-15
det er ret entydig, der er det er et hexadecimalt tal.
Og i virkeligheden, enhver hexadecimal nummer, der har breve i det,
er sandsynligvis temmelig indlysende som et hexadecimalt tal.
Men stadig, for klarhedens skyld er det
altid en god ide at præfiks, hver gang du
henviser til et ciffer som et hexadecimalt nummer ved at foranstille en 0x.
>> Så binært, som vi sagt, har sted værdier.
Der er dem sted, et toere sted, et fours sted, og en eights sted.
Og decimal har også placere værdier, de dem, tiere, hundreder, og tusinder
at vi alle kan huske fra folkeskolen.
Og hexadecimal er ingen undtagelse her, virkelig.
Det har også sted værdier, men i stedet af at være beføjelser 2 eller beføjelser på 10,
de er beføjelser 16.
>> Så vi se en række som denne vi temmelig tydeligt ved, det er 397, ikke?
Tja, hvis vi ser en række som denne, Vi ved, at dette ikke er 397 længere.
Dette er den hexadecimale nummer tre-9-7.
Det er ikke 397, betyder det noget anderledes,
fordi vi bruger kræfter 16 som alle af vores sted værdier i stedet for beføjelser
10.
Faktisk, det sted værdier her ville være dem sted, det Sixteens sted,
og de to-100-50-seksere sted, som svarer til vores idé om en dem
sted, TEN sted, og en flere hundrede sted, hvis antallet var 397.
Men da det er 0x 397, har vi en dem sted, Sixteens sted,
og en to-100-50-seksere sted.
Eller en 16 til 0 sted, som er 1.
En 16 til den første strøm sted, 16.
En 16 kvadreret sted, 256 og så videre, og så videre, og så videre.
Så dette nummer er virkelig 3 gange 16 kvadreret, plus 9 gange 16 plus 7.
Jeg har ikke gøre det math her, men det er ikke 397, det er meget, meget større end det.
>> Ligeledes kunne vi have 0x ADC, godt, der er en gange 16 kvadreret.
Eller hvis vi oversætter det til vores forestilling af decimaltal, der er 10 gange
16 kvadreret, plus d gange 16 eller plus 13 gange 16.
Og du behøver ikke bekymre dig, hvis du ikke har huskes at d er 13, eller noget lignende,
der er ikke for mange af disse brev cifre
og det vil blive intuitiv temmelig hurtigt.
Så igen er det 10 gange 16 kvadreret, plus 13 gange 16 plus 12 gange 1.
Så 0x ADC.
>> Så, som jeg sagde, hver gruppe 4 binære cifre
svarer til en enkelt hexadecimal tal,
og så det er faktisk rigtig let at ændre frem og tilbage
mellem hex og binær.
Hvis du har denne lange række af binære cifre, alt hvad du behøver at gøre
er at starte gruppere dem ret til venstre som grupper af 4.
Og så kan du konsolidere dem i hexadecimale tal,
stærkt begrænse antallet af cifre, du er nødt til at behandle mentalt.
I stedet for 32 0'er og 1'er, som vi vil se i en anden,
du kan være i stand til at få det ned til blot 8 hexadecimale cifre, en masse
mere kortfattet.
>> Hitlisterne et par dias ryggen vil hjælpe dig med at finde ud af denne kortlægning,
selv, igen vil du huske det temmelig hurtigt.
Vi vil gå igennem et eksempel lige nu.
Så hvis vi har en række som denne, dette virkelig store binære tal,
eller hvad der synes at være et stort binært tal.
Og grunden til at jeg siger det, det er bare so-- det er et monstrum, ikke?
Der er så mange 0'er og 1 er der.
Men vi gør nok ikke virkelig har en fornemmelse af, hvad
størrelsen af ​​dette antal er.
Vi har ikke nogen idé om, hvad det ville svare til en decimal.
Og i virkeligheden, vi vil ikke engang se, hvad det svarer til i decimal lige nu.
Vi kan være i stand til udtrykke dette på en måde,
ville give os nogle flere oplysninger om, hvor stort dette antal er.
>> Så lad os gå til at konverteringen.
Det første, vi har brug for at gøre, er at vi vil gruppere
disse cifre ud i grupper 4, startende fra højre
og arbejde til venstre.
Der tilfældigvis er 32 cifre her, hvilket betyder, at vi har
en dejlig ren pause på 8 grupper af fire.
Husk, at hver gruppe af 4 her, unikt svarer
til en hexadecimal ciffer.
Så vi starter igen opbygge vores nummer fra højre, og arbejder til venstre.
Nå, hvad er 1101?
Godt vi gør det math i vores hoved, vi har 1 i ottere sted, en 1
i firere sted, et 0 i toere sted, og en 1 i dem sted.
Det er 8 plus 4 plus 1, som vi ville vide som 13.
Men vi sandsynligvis ikke ville skrive 13 ud, fordi vi arbejder med hexadecimal.
Vi er nødt til at konvertere den til det hexadecimale svarende til 13, hvilket er d.
>> 0011, Det er en 0 i ottere sted, et 0 i fours sted,
en 1 i toere sted, og en 1 i dem sted.
Det er 3.
Jeg mener holde gør dette igen, vi har her 9.
Og så 11, men det er b, tilbagekaldelse.
2, 10-- eller en-- 6 og 4.
Og så meget store streng af 0 s og 1 s af toppen
er mere præcist udtrykt i hexadecimal som 0x 46a2b93d.
>> Nå, OK, har vi lært en ny køligt dygtighed, hvad er pointen?
Vi kan ikke bruge det hele tid, da vi kommer til at snart se,
vi bruger hexadecimal helt et parti som programmører.
Ikke nødvendigvis for Formålet med at gøre matematik med det,
men fordi en masse gange lageradresser i vores system
er repræsenteret i hexadecimal.
Det er en virkelig kortfattet måde at udtrykke ellers besværlige, binære tal.
Og så, igen, kan du not-- du sandsynligvis
ikke kommer til at gøre nogen matematik med det, du er ikke
vil være multiplicere hexadecimale tal sammen,
eller gør noget underligt sådan.
Men det er en nyttig færdighed at have så du kan udtrykke og forstå
hukommelse adresser og andre måder at anvende data i C.
>> Jeg er Doug Lloyd, det er CS50.