1 00:00:00,000 --> 00:00:05,511 2 00:00:05,511 --> 00:00:08,510 DOUG LLYOYD: Så hexadecimala tal, som om vi behövde en annan bastalet 3 00:00:08,510 --> 00:00:09,970 systemet rätt? 4 00:00:09,970 --> 00:00:13,000 Tja, de flesta västerländska kulturer, som ni förmodligen bekant, 5 00:00:13,000 --> 00:00:16,560 Använd decimal system-- bas 10, för att representera numeriska data. 6 00:00:16,560 --> 00:00:20,520 Vi har siffrorna 0, 1, 2, 3, 5, 6, 7,8,9. 7 00:00:20,520 --> 00:00:23,890 Och om vi behöver för att representera värden högre än nio, 8 00:00:23,890 --> 00:00:26,800 vi kan kombinera dessa siffror använder begreppet plats värde. 9 00:00:26,800 --> 00:00:30,115 Så för 10, har vi en 1 siffra följt av en 0-siffrigt 10 00:00:30,115 --> 00:00:32,240 och vi intuitivt förstå att vad vi gör 11 00:00:32,240 --> 00:00:35,500 det är att vi ska multiplicera den första en av 10, 12 00:00:35,500 --> 00:00:37,689 och sedan tillsätta 0 för totalt 10. 13 00:00:37,689 --> 00:00:40,480 Datorer gör något ganska liknande, eftersom du är förmodligen bekant, 14 00:00:40,480 --> 00:00:42,409 med det binära system-- basen 2. 15 00:00:42,409 --> 00:00:44,700 Skillnaden varvid det finns att det bara finns två siffror 16 00:00:44,700 --> 00:00:46,770 att arbeta with-- 0 och en. 17 00:00:46,770 --> 00:00:49,033 Och så våra rum värderingar, istället för att vara en, 18 00:00:49,033 --> 00:00:52,600 tio, hundra, tusen, eftersom de skulle vara i decimalsystemet, 19 00:00:52,600 --> 00:00:57,690 är en, två, fyra, åtta, och så vidare. 20 00:00:57,690 --> 00:01:00,842 Här är det dock, dessa 0 s och 1 s, särskilt 21 00:01:00,842 --> 00:01:03,800 om vi är datavetare och vi gör en hel del programmering 22 00:01:03,800 --> 00:01:06,924 eller arbetar med datorer, var att gå att få se en hel del av binära tal. 23 00:01:06,924 --> 00:01:11,660 Och dessa 0: s och 1 s i stora kedjor kan vara mycket svårt att tolka. 24 00:01:11,660 --> 00:01:16,610 Vi kan inte bara titta på en rad 0: or och 1: or och med nödvändighet känner 25 00:01:16,610 --> 00:01:17,810 exakt vad det är. 26 00:01:17,810 --> 00:01:21,980 Men det är fortfarande bra att kunna Express-data på samma sätt 27 00:01:21,980 --> 00:01:23,480 att en dator gör. 28 00:01:23,480 --> 00:01:26,580 Vi har denna föreställning om hexadecimalt system, som är 29 00:01:26,580 --> 00:01:29,840 bas 16, i stället för basen 10 eller basen 2. 30 00:01:29,840 --> 00:01:34,420 Vilket innebär att vi har 16 siffror att arbeta med i stället för 10 eller 2. 31 00:01:34,420 --> 00:01:37,180 Och det är en mycket mer koncist sätt att uttrycka 32 00:01:37,180 --> 00:01:41,210 binär information i ett datorsystem, det är mycket mer mänsklig förståeligt. 33 00:01:41,210 --> 00:01:43,520 Så vi har siffrorna 0 genom 9, och sedan 34 00:01:43,520 --> 00:01:49,480 vi har också dessa extra sex digits-- a, b, c, d, e och f, vilka representerar 10, 35 00:01:49,480 --> 00:01:56,050 vår uppfattning om 10, 11, 12, 13, 14 och 15, i decimal. 36 00:01:56,050 --> 00:01:59,787 Ibland, förresten, du ska också se dessa A till F-talet som kapital A 37 00:01:59,787 --> 00:02:01,620 till F, som är den som jag brukar göra det. 38 00:02:01,620 --> 00:02:04,560 Det är bara jag föredrar stil, men antingen är bra, 39 00:02:04,560 --> 00:02:07,870 De båda representerar ganska ungefär samma sak. 40 00:02:07,870 --> 00:02:09,090 >> Så varför är hexadecimal coolt? 41 00:02:09,090 --> 00:02:11,580 Varför behöver vi använda denna andra ytterligare bas? 42 00:02:11,580 --> 00:02:14,310 Vi har redan 2 och 10, varför behöver vi 16? 43 00:02:14,310 --> 00:02:21,650 Väl 16 är en potens av 2, och så varje hexadecimal siffra, 0 till f, 44 00:02:21,650 --> 00:02:25,440 motsvarar en unik beställning, eller unika arrangemang 45 00:02:25,440 --> 00:02:29,060 av 4 binära siffror, 4 bitar. 46 00:02:29,060 --> 00:02:34,570 Och så i det avseendet, kan vi uttrycka mycket långa, komplexa, binära tal 47 00:02:34,570 --> 00:02:36,440 i hexadecimal i en mycket mer koncist sätt, 48 00:02:36,440 --> 00:02:41,080 utan att förlora information eller att behöva göra särskilt besvärliga omvandlingar 49 00:02:41,080 --> 00:02:42,480 på dessa siffror. 50 00:02:42,480 --> 00:02:44,880 >> Så, som jag sa, varje hexadecimal siffra 51 00:02:44,880 --> 00:02:48,630 motsvarar en unik arrangemang av 4 binära siffror. 52 00:02:48,630 --> 00:02:53,670 Så den binära strängen 0000 motsvarar hexadecimal siffra 0. 53 00:02:53,670 --> 00:03:00,340 0110 motsvarar hexadecimal siffra 6. 54 00:03:00,340 --> 00:03:05,225 Och 1111 motsvarar till hexadecimal siffra f. 55 00:03:05,225 --> 00:03:07,100 Om du tittar på det här diagrammet, särskilt 56 00:03:07,100 --> 00:03:09,099 Om du tittar på den vänstra sidan av diagrammet, 57 00:03:09,099 --> 00:03:11,970 Du kan redan nu se att det finns en bit av en tvetydighet problem här. 58 00:03:11,970 --> 00:03:15,229 Decimal 0 är ganska mycket omöjlig att skilja från hexadecimalt 0, 59 00:03:15,229 --> 00:03:18,020 annat än det faktum att det är under en kolumn som säger hexadecimal. 60 00:03:18,020 --> 00:03:22,130 >> Men vi förmodligen kommer inte alltid har den kolumnen där. 61 00:03:22,130 --> 00:03:25,420 Generellt när vi uttrycker siffror i hexadecimal notation 62 00:03:25,420 --> 00:03:28,130 att tydligt skilja dem från decimalform, 63 00:03:28,130 --> 00:03:31,860 vi brukar prefix dem med prefixet 0x. 64 00:03:31,860 --> 00:03:35,990 0x betyder ingenting i verkligheten, det är bara en ledtråd till oss som människor 65 00:03:35,990 --> 00:03:39,190 att det vi håller på att se, eller tänker börja tolkning, 66 00:03:39,190 --> 00:03:40,750 är ett hexadecimalt tal. 67 00:03:40,750 --> 00:03:45,590 Uppenbarligen för de högre siffrorna a, b, c, d och f, vilka motsvarar 10-15 68 00:03:45,590 --> 00:03:48,840 det är ganska entydig som är det är ett hexadecimalt tal. 69 00:03:48,840 --> 00:03:51,620 Och faktiskt, alla hexadecimal nummer som har bokstäver i det, 70 00:03:51,620 --> 00:03:54,642 är förmodligen ganska uppenbart som ett hexadecimalt tal. 71 00:03:54,642 --> 00:03:56,350 Men ändå, för tydlighetens skull, är det 72 00:03:56,350 --> 00:03:58,290 alltid en bra idé att prefix varje gång du 73 00:03:58,290 --> 00:04:01,835 hänvisar till en siffra som ett hexadecimalt Antalet genom att inleda en 0x. 74 00:04:01,835 --> 00:04:04,370 75 00:04:04,370 --> 00:04:06,810 >> Så, binär, som vi sade, har plats värden. 76 00:04:06,810 --> 00:04:10,040 Där är de plats, en tvåor plats, en fyra plats, och en åttor plats. 77 00:04:10,040 --> 00:04:13,640 Och decimal har också plats värderingar, ettor, tiotals, hundratals och tusentals 78 00:04:13,640 --> 00:04:15,910 att vi alla kanske minns från grundskolan. 79 00:04:15,910 --> 00:04:18,050 Och hexadecimal är ingen undantag här, egentligen. 80 00:04:18,050 --> 00:04:22,660 Det har också plats värderingar utan i stället att vara befogenheter 2 eller befogenheter 10, 81 00:04:22,660 --> 00:04:25,050 de är befogenheter 16. 82 00:04:25,050 --> 00:04:29,410 >> Så vi ser en rad som denna vi ganska tydligt vet att det är 397, eller hur? 83 00:04:29,410 --> 00:04:33,420 Tja, om vi se ett antal som denna, Vi vet att detta är inte 397 längre. 84 00:04:33,420 --> 00:04:36,730 Detta är det hexadecimala nummer tre-9-7. 85 00:04:36,730 --> 00:04:39,680 Det är inte 397, betyder det något annat, 86 00:04:39,680 --> 00:04:44,180 eftersom vi använder befogenheter 16 som alla våra rum värden i stället för makt 87 00:04:44,180 --> 00:04:45,560 10. 88 00:04:45,560 --> 00:04:50,570 I själva verket, den plats värdena här skulle vara de platsen, sixteens plats, 89 00:04:50,570 --> 00:04:55,080 och de två-100-50-sexor plats, som motsvarar vår uppfattning om en ettor 90 00:04:55,080 --> 00:04:59,180 plats, tiotals plats, och ett hundra plats, om antalet var 397. 91 00:04:59,180 --> 00:05:03,620 Men eftersom det är 0x 397, har vi a ettor plats, sixteens plats, 92 00:05:03,620 --> 00:05:05,780 och en två-100-50-sexor plats. 93 00:05:05,780 --> 00:05:09,460 Eller, en 16 till 0 plats, vilket är en. 94 00:05:09,460 --> 00:05:12,420 En 16 till den första effekt plats, 16. 95 00:05:12,420 --> 00:05:17,080 En 16 kvadrat plats, 256, och så vidare, och så vidare, och så vidare. 96 00:05:17,080 --> 00:05:24,400 Så det här numret är verkligen 3 gånger 16 kvadrat, plus 9 gånger 16, plus 7. 97 00:05:24,400 --> 00:05:28,980 Jag gjorde inte matten här, men det är inte 397, det är mycket, mycket större än så. 98 00:05:28,980 --> 00:05:34,050 >> På liknande sätt skulle vi ha 0x ADC, Ja, det är en gånger 16 kvadrat. 99 00:05:34,050 --> 00:05:38,220 Eller om vi översätter det till vår uppfattning av decimaltal, det är 10 gånger 100 00:05:38,220 --> 00:05:44,160 16 kvadrat, plus d gånger 16, eller plus 13 gånger 16. 101 00:05:44,160 --> 00:05:47,410 Och oroa dig inte om du inte har memorerat att d är 13 eller nåt sånt, 102 00:05:47,410 --> 00:05:49,201 det finns inte alltför många av dessa brev siffror 103 00:05:49,201 --> 00:05:52,820 och det kommer att bli intuitiv ganska snabbt. 104 00:05:52,820 --> 00:05:59,800 Så även detta är 10 gånger 16 kvadrat, plus 13 gånger 16 plus 12 gånger 1. 105 00:05:59,800 --> 00:06:03,640 Så 0x ADC. 106 00:06:03,640 --> 00:06:07,750 >> Så som sagt, varje grupp 4 binära siffror 107 00:06:07,750 --> 00:06:10,000 motsvarar en enskild hexadecimal siffra, 108 00:06:10,000 --> 00:06:12,570 och så är det faktiskt riktigt lätt att ändra fram och tillbaka 109 00:06:12,570 --> 00:06:14,690 mellan hex och binärt. 110 00:06:14,690 --> 00:06:18,310 Om du har denna långa rad binära siffror, allt du behöver göra 111 00:06:18,310 --> 00:06:21,320 är att börja gruppera dem rätt till vänster som grupper av 4. 112 00:06:21,320 --> 00:06:26,550 Och då kan du konsolidera dem i hexadecimala tal, 113 00:06:26,550 --> 00:06:30,910 vilket allvarligt begränsar antalet siffror du måste bearbeta mentalt. 114 00:06:30,910 --> 00:06:33,680 I stället för 32 0 s och 1 s, som vi ser i en andra, 115 00:06:33,680 --> 00:06:37,630 du kanske kunna få ner till bara åtta hexadecimala siffror, en hel del 116 00:06:37,630 --> 00:06:39,200 mer koncis. 117 00:06:39,200 --> 00:06:43,500 >> Diagrammen några bilder Back hjälpa dig att räkna ut denna kartläggning, 118 00:06:43,500 --> 00:06:45,660 men, återigen du kommer memorera det ganska snabbt. 119 00:06:45,660 --> 00:06:47,320 Vi ska gå igenom ett exempel just nu. 120 00:06:47,320 --> 00:06:51,507 Så om vi har ett antal som denna, detta verkligen stora binära tal, 121 00:06:51,507 --> 00:06:53,340 eller vad som verkar vara ett stort binärt tal. 122 00:06:53,340 --> 00:06:56,260 Och anledningen till att jag säger det, är det bara so-- det är en koloss, eller hur? 123 00:06:56,260 --> 00:06:58,959 Det finns så många 0: s och 1 s där. 124 00:06:58,959 --> 00:07:01,000 Men vi gör nog inte verkligen har en känsla för vad 125 00:07:01,000 --> 00:07:02,870 storleken på detta nummer verkligen är. 126 00:07:02,870 --> 00:07:06,150 Vi har ingen aning om vad det skulle motsvara ett decimaltal. 127 00:07:06,150 --> 00:07:09,744 Och faktum är att vi inte ens se vad det motsvarar i decimal just nu. 128 00:07:09,744 --> 00:07:11,660 Vi skulle kunna uttrycka detta på ett sätt som 129 00:07:11,660 --> 00:07:15,640 skulle ge oss lite mer information om hur stor denna siffra är. 130 00:07:15,640 --> 00:07:17,270 >> Så låt oss gå till den omvandlingsprocessen. 131 00:07:17,270 --> 00:07:19,311 Det första vi behöver göra är att vi vill gruppera 132 00:07:19,311 --> 00:07:23,050 dessa siffror ut i grupper av 4, utgående från den högra 133 00:07:23,050 --> 00:07:24,120 och arbetar till vänster. 134 00:07:24,120 --> 00:07:27,260 Det råkar vara 32 siffror här, vilket innebär att vi har 135 00:07:27,260 --> 00:07:33,210 en trevlig ren rast på 8 grupper om fyra. 136 00:07:33,210 --> 00:07:36,200 Kom ihåg att varje grupp av 4 här unikt motsvarar 137 00:07:36,200 --> 00:07:37,760 till en hexadecimal siffra. 138 00:07:37,760 --> 00:07:42,080 Så vi börjar igen bygga vår nummer från höger, och arbetar kvar. 139 00:07:42,080 --> 00:07:44,890 Tja vad är 1101? 140 00:07:44,890 --> 00:07:49,220 Jo vi gör matten i vårt huvud, Vi har en i åttor plats, en 1 141 00:07:49,220 --> 00:07:54,310 i fyra rum, en 0 i tvåor plats, och en 1 i sådana rum. 142 00:07:54,310 --> 00:07:58,820 Det är 8 plus 4 plus 1, som vi skulle veta som 13. 143 00:07:58,820 --> 00:08:02,400 Men vi förmodligen inte skulle skriva 13, eftersom vi arbetar med hexadecimal. 144 00:08:02,400 --> 00:08:07,982 Vi måste konvertera den till det hexadecimala ekvivalent av 13, vilket är d. 145 00:08:07,982 --> 00:08:12,940 >> 0011, ja det är en 0 i åttor plats, en 0 i fyra rum, 146 00:08:12,940 --> 00:08:15,190 1 i tvåor plats, och en 1 i sådana rum. 147 00:08:15,190 --> 00:08:16,880 Det är 3. 148 00:08:16,880 --> 00:08:20,180 Jag menar hålla på så här igen, har vi här 9. 149 00:08:20,180 --> 00:08:23,850 Och sedan 11, men det är b, minns. 150 00:08:23,850 --> 00:08:30,570 2, 10-- eller en-- 6, och 4. 151 00:08:30,570 --> 00:08:34,669 Och så att mycket stora strängen av 0 s och 1 tals toppen 152 00:08:34,669 --> 00:08:38,549 är mer kortfattat uttryckt i hexadecimal som 0x 46a2b93d. 153 00:08:38,549 --> 00:08:42,309 154 00:08:42,309 --> 00:08:45,870 >> Tja, OK, vi har lärt oss en ny kyla skicklighet, vad är poängen? 155 00:08:45,870 --> 00:08:49,560 Vi kanske inte använda detta alla tid, eftersom vi kommer att snart se, 156 00:08:49,560 --> 00:08:52,370 Vi använder hexadecimal helt en hel del som programmerare. 157 00:08:52,370 --> 00:08:55,060 Inte nödvändigtvis för Syftet med att göra matematik med det, 158 00:08:55,060 --> 00:08:58,470 men eftersom många gånger minnesadresser i vårt system 159 00:08:58,470 --> 00:09:00,440 är representerade i hexadecimal. 160 00:09:00,440 --> 00:09:04,390 Det är ett riktigt koncist sätt att uttrycka annars besvärliga, binära tal. 161 00:09:04,390 --> 00:09:06,440 Och så, återigen, kan du inte-- du förmodligen 162 00:09:06,440 --> 00:09:07,640 kommer inte att göra någon matematik med det, är du inte 163 00:09:07,640 --> 00:09:09,848 kommer att bli multiplicera hexadecimala tal tillsammans, 164 00:09:09,848 --> 00:09:11,770 eller gör något konstigt så. 165 00:09:11,770 --> 00:09:16,120 Men det är en användbar färdighet att ha så att du kan uttrycka och förstå 166 00:09:16,120 --> 00:09:23,290 minne adresser och andra sätt att använda data i C. 167 00:09:23,290 --> 00:09:26,240 >> Jag är Doug Lloyd, är detta CS50. 168 00:09:26,240 --> 00:09:28,028