DOUG LLYOYD: Så hexadecimala tal, som om vi behövde en annan bastalet systemet rätt? Tja, de flesta västerländska kulturer, som ni förmodligen bekant, Använd decimal system-- bas 10, för att representera numeriska data. Vi har siffrorna 0, 1, 2, 3, 5, 6, 7,8,9. Och om vi behöver för att representera värden högre än nio, vi kan kombinera dessa siffror använder begreppet plats värde. Så för 10, har vi en 1 siffra följt av en 0-siffrigt och vi intuitivt förstå att vad vi gör det är att vi ska multiplicera den första en av 10, och sedan tillsätta 0 för totalt 10. Datorer gör något ganska liknande, eftersom du är förmodligen bekant, med det binära system-- basen 2. Skillnaden varvid det finns att det bara finns två siffror att arbeta with-- 0 och en. Och så våra rum värderingar, istället för att vara en, tio, hundra, tusen, eftersom de skulle vara i decimalsystemet, är en, två, fyra, åtta, och så vidare. Här är det dock, dessa 0 s och 1 s, särskilt om vi är datavetare och vi gör en hel del programmering eller arbetar med datorer, var att gå att få se en hel del av binära tal. Och dessa 0: s och 1 s i stora kedjor kan vara mycket svårt att tolka. Vi kan inte bara titta på en rad 0: or och 1: or och med nödvändighet känner exakt vad det är. Men det är fortfarande bra att kunna Express-data på samma sätt att en dator gör. Vi har denna föreställning om hexadecimalt system, som är bas 16, i stället för basen 10 eller basen 2. Vilket innebär att vi har 16 siffror att arbeta med i stället för 10 eller 2. Och det är en mycket mer koncist sätt att uttrycka binär information i ett datorsystem, det är mycket mer mänsklig förståeligt. Så vi har siffrorna 0 genom 9, och sedan vi har också dessa extra sex digits-- a, b, c, d, e och f, vilka representerar 10, vår uppfattning om 10, 11, 12, 13, 14 och 15, i decimal. Ibland, förresten, du ska också se dessa A till F-talet som kapital A till F, som är den som jag brukar göra det. Det är bara jag föredrar stil, men antingen är bra, De båda representerar ganska ungefär samma sak. Så varför är hexadecimal coolt? Varför behöver vi använda denna andra ytterligare bas? Vi har redan 2 och 10, varför behöver vi 16? Väl 16 är en potens av 2, och så varje hexadecimal siffra, 0 till f, motsvarar en unik beställning, eller unika arrangemang av 4 binära siffror, 4 bitar. Och så i det avseendet, kan vi uttrycka mycket långa, komplexa, binära tal i hexadecimal i en mycket mer koncist sätt, utan att förlora information eller att behöva göra särskilt besvärliga omvandlingar på dessa siffror. Så, som jag sa, varje hexadecimal siffra motsvarar en unik arrangemang av 4 binära siffror. Så den binära strängen 0000 motsvarar hexadecimal siffra 0. 0110 motsvarar hexadecimal siffra 6. Och 1111 motsvarar till hexadecimal siffra f. Om du tittar på det här diagrammet, särskilt Om du tittar på den vänstra sidan av diagrammet, Du kan redan nu se att det finns en bit av en tvetydighet problem här. Decimal 0 är ganska mycket omöjlig att skilja från hexadecimalt 0, annat än det faktum att det är under en kolumn som säger hexadecimal. Men vi förmodligen kommer inte alltid har den kolumnen där. Generellt när vi uttrycker siffror i hexadecimal notation att tydligt skilja dem från decimalform, vi brukar prefix dem med prefixet 0x. 0x betyder ingenting i verkligheten, det är bara en ledtråd till oss som människor att det vi håller på att se, eller tänker börja tolkning, är ett hexadecimalt tal. Uppenbarligen för de högre siffrorna a, b, c, d och f, vilka motsvarar 10-15 det är ganska entydig som är det är ett hexadecimalt tal. Och faktiskt, alla hexadecimal nummer som har bokstäver i det, är förmodligen ganska uppenbart som ett hexadecimalt tal. Men ändå, för tydlighetens skull, är det alltid en bra idé att prefix varje gång du hänvisar till en siffra som ett hexadecimalt Antalet genom att inleda en 0x. Så, binär, som vi sade, har plats värden. Där är de plats, en tvåor plats, en fyra plats, och en åttor plats. Och decimal har också plats värderingar, ettor, tiotals, hundratals och tusentals att vi alla kanske minns från grundskolan. Och hexadecimal är ingen undantag här, egentligen. Det har också plats värderingar utan i stället att vara befogenheter 2 eller befogenheter 10, de är befogenheter 16. Så vi ser en rad som denna vi ganska tydligt vet att det är 397, eller hur? Tja, om vi se ett antal som denna, Vi vet att detta är inte 397 längre. Detta är det hexadecimala nummer tre-9-7. Det är inte 397, betyder det något annat, eftersom vi använder befogenheter 16 som alla våra rum värden i stället för makt 10. I själva verket, den plats värdena här skulle vara de platsen, sixteens plats, och de två-100-50-sexor plats, som motsvarar vår uppfattning om en ettor plats, tiotals plats, och ett hundra plats, om antalet var 397. Men eftersom det är 0x 397, har vi a ettor plats, sixteens plats, och en två-100-50-sexor plats. Eller, en 16 till 0 plats, vilket är en. En 16 till den första effekt plats, 16. En 16 kvadrat plats, 256, och så vidare, och så vidare, och så vidare. Så det här numret är verkligen 3 gånger 16 kvadrat, plus 9 gånger 16, plus 7. Jag gjorde inte matten här, men det är inte 397, det är mycket, mycket större än så. På liknande sätt skulle vi ha 0x ADC, Ja, det är en gånger 16 kvadrat. Eller om vi översätter det till vår uppfattning av decimaltal, det är 10 gånger 16 kvadrat, plus d gånger 16, eller plus 13 gånger 16. Och oroa dig inte om du inte har memorerat att d är 13 eller nåt sånt, det finns inte alltför många av dessa brev siffror och det kommer att bli intuitiv ganska snabbt. Så även detta är 10 gånger 16 kvadrat, plus 13 gånger 16 plus 12 gånger 1. Så 0x ADC. Så som sagt, varje grupp 4 binära siffror motsvarar en enskild hexadecimal siffra, och så är det faktiskt riktigt lätt att ändra fram och tillbaka mellan hex och binärt. Om du har denna långa rad binära siffror, allt du behöver göra är att börja gruppera dem rätt till vänster som grupper av 4. Och då kan du konsolidera dem i hexadecimala tal, vilket allvarligt begränsar antalet siffror du måste bearbeta mentalt. I stället för 32 0 s och 1 s, som vi ser i en andra, du kanske kunna få ner till bara åtta hexadecimala siffror, en hel del mer koncis. Diagrammen några bilder Back hjälpa dig att räkna ut denna kartläggning, men, återigen du kommer memorera det ganska snabbt. Vi ska gå igenom ett exempel just nu. Så om vi har ett antal som denna, detta verkligen stora binära tal, eller vad som verkar vara ett stort binärt tal. Och anledningen till att jag säger det, är det bara so-- det är en koloss, eller hur? Det finns så många 0: s och 1 s där. Men vi gör nog inte verkligen har en känsla för vad storleken på detta nummer verkligen är. Vi har ingen aning om vad det skulle motsvara ett decimaltal. Och faktum är att vi inte ens se vad det motsvarar i decimal just nu. Vi skulle kunna uttrycka detta på ett sätt som skulle ge oss lite mer information om hur stor denna siffra är. Så låt oss gå till den omvandlingsprocessen. Det första vi behöver göra är att vi vill gruppera dessa siffror ut i grupper av 4, utgående från den högra och arbetar till vänster. Det råkar vara 32 siffror här, vilket innebär att vi har en trevlig ren rast på 8 grupper om fyra. Kom ihåg att varje grupp av 4 här unikt motsvarar till en hexadecimal siffra. Så vi börjar igen bygga vår nummer från höger, och arbetar kvar. Tja vad är 1101? Jo vi gör matten i vårt huvud, Vi har en i åttor plats, en 1 i fyra rum, en 0 i tvåor plats, och en 1 i sådana rum. Det är 8 plus 4 plus 1, som vi skulle veta som 13. Men vi förmodligen inte skulle skriva 13, eftersom vi arbetar med hexadecimal. Vi måste konvertera den till det hexadecimala ekvivalent av 13, vilket är d. 0011, ja det är en 0 i åttor plats, en 0 i fyra rum, 1 i tvåor plats, och en 1 i sådana rum. Det är 3. Jag menar hålla på så här igen, har vi här 9. Och sedan 11, men det är b, minns. 2, 10-- eller en-- 6, och 4. Och så att mycket stora strängen av 0 s och 1 tals toppen är mer kortfattat uttryckt i hexadecimal som 0x 46a2b93d. Tja, OK, vi har lärt oss en ny kyla skicklighet, vad är poängen? Vi kanske inte använda detta alla tid, eftersom vi kommer att snart se, Vi använder hexadecimal helt en hel del som programmerare. Inte nödvändigtvis för Syftet med att göra matematik med det, men eftersom många gånger minnesadresser i vårt system är representerade i hexadecimal. Det är ett riktigt koncist sätt att uttrycka annars besvärliga, binära tal. Och så, återigen, kan du inte-- du förmodligen kommer inte att göra någon matematik med det, är du inte kommer att bli multiplicera hexadecimala tal tillsammans, eller gör något konstigt så. Men det är en användbar färdighet att ha så att du kan uttrycka och förstå minne adresser och andra sätt att använda data i C. Jag är Doug Lloyd, är detta CS50.