1 00:00:00,000 --> 00:00:05,511 2 00:00:05,511 --> 00:00:08,510 DOUG LLYOYD: Så heksadesimale tall, som om vi trengte en annen basetall 3 00:00:08,510 --> 00:00:09,970 ordningen ikke sant? 4 00:00:09,970 --> 00:00:13,000 Vel, de fleste vestlige kulturer, som du sikkert er kjent, 5 00:00:13,000 --> 00:00:16,560 bruke desimal system-- basen 10, for å representere numeriske data. 6 00:00:16,560 --> 00:00:20,520 Vi har sifrene 0, 1, 2, 3, 5, 6, 7,8,9. 7 00:00:20,520 --> 00:00:23,890 Og hvis vi trenger å representere verdier høyere enn ni, 8 00:00:23,890 --> 00:00:26,800 vi kan kombinere disse sifrene bruker begrepet sted verdi. 9 00:00:26,800 --> 00:00:30,115 Så for 10, har vi en 1 sifret etterfulgt av en 0 sifret 10 00:00:30,115 --> 00:00:32,240 og vi intuitivt forstår at det vi gjør 11 00:00:32,240 --> 00:00:35,500 det er vi multiplisere det første en med 10, 12 00:00:35,500 --> 00:00:37,689 og deretter legge til 0 for totalt 10. 13 00:00:37,689 --> 00:00:40,480 Datamaskiner gjøre noe ganske lignende, som du er sikkert kjent, 14 00:00:40,480 --> 00:00:42,409 med det binære system-- base 2. 15 00:00:42,409 --> 00:00:44,700 Forskjellen der er at det er bare to sifre 16 00:00:44,700 --> 00:00:46,770 å arbeide with-- 0 og 1. 17 00:00:46,770 --> 00:00:49,033 Og så våre sted verdier, stedet for å være en, 18 00:00:49,033 --> 00:00:52,600 ti, hundre, tusen, som de ville være i desimalsystemet, 19 00:00:52,600 --> 00:00:57,690 er ett, to, fire, åtte, og så videre. 20 00:00:57,690 --> 00:01:00,842 Her er tingen selv, disse 0 og 1-ere, spesielt 21 00:01:00,842 --> 00:01:03,800 hvis vi blir dataforskere og vi gjør mye programmering 22 00:01:03,800 --> 00:01:06,924 eller arbeider med datamaskiner, var å gå å se mye av binære tall. 23 00:01:06,924 --> 00:01:11,660 Og disse 0 og 1-ere i store kjedene kan være svært vanskelig å analysere. 24 00:01:11,660 --> 00:01:16,610 Vi kan ikke bare se på en rekke 0 og 1-ere og nødvendigvis vet 25 00:01:16,610 --> 00:01:17,810 nøyaktig hva det er. 26 00:01:17,810 --> 00:01:21,980 Men det er likevel nyttig å kunne ekspress data på samme måte 27 00:01:21,980 --> 00:01:23,480 at en datamaskin gjør. 28 00:01:23,480 --> 00:01:26,580 Vi har denne oppfatningen av heksadesimale systemet, som er 29 00:01:26,580 --> 00:01:29,840 basen 16, i stedet for basen 10 eller base 2. 30 00:01:29,840 --> 00:01:34,420 Noe som betyr at vi har 16 siffer å arbeide med i stedet for 10 eller to. 31 00:01:34,420 --> 00:01:37,180 Og det er en mye mer konsis måte å uttrykke 32 00:01:37,180 --> 00:01:41,210 binær informasjon om et datasystem, det er mye mer menneskelig forståelig. 33 00:01:41,210 --> 00:01:43,520 Så vi har sifrene 0 til 9, og deretter 34 00:01:43,520 --> 00:01:49,480 vi har også disse ekstra seks digits-- en, b, c, d, e og f, som representerer 10, 35 00:01:49,480 --> 00:01:56,050 våre forestillinger om 10, 11, 12, 13, 14 og 15, i desimal. 36 00:01:56,050 --> 00:01:59,787 Noen ganger, forresten, vil du også se disse a til f-tallet som hovedstad A 37 00:01:59,787 --> 00:02:01,620 til F, som er slik jeg pleier å gjøre det. 38 00:02:01,620 --> 00:02:04,560 Det er bare min foretrukne stil, men enten er fine, 39 00:02:04,560 --> 00:02:07,870 de begge representerer ganske mye det samme. 40 00:02:07,870 --> 00:02:09,090 >> Så hvorfor er heksadesimale kult? 41 00:02:09,090 --> 00:02:11,580 Hvorfor trenger vi å bruke denne annen tilleggsbase? 42 00:02:11,580 --> 00:02:14,310 Vi har allerede to og 10, hvorfor trenger vi 16? 43 00:02:14,310 --> 00:02:21,650 Vel 16 er en potens av 2, og så hver heksadesimalsiffer, 0 til f, 44 00:02:21,650 --> 00:02:25,440 korresponderer med en unik bestilling, eller unikt arrangement 45 00:02:25,440 --> 00:02:29,060 av 4 binære siffer, 4 biter. 46 00:02:29,060 --> 00:02:34,570 Og så i den forstand, kan vi uttrykke meget lange, komplekse binære tall 47 00:02:34,570 --> 00:02:36,440 i heksadesimal i en mye mer konsis måte, 48 00:02:36,440 --> 00:02:41,080 uten å miste informasjon eller å måtte gjøre spesielt tungvint konverter 49 00:02:41,080 --> 00:02:42,480 på disse tallene. 50 00:02:42,480 --> 00:02:44,880 >> Så, som jeg sa, hver heksadesimalsiffer 51 00:02:44,880 --> 00:02:48,630 korresponderer med en unik arrangement av 4 binære siffer. 52 00:02:48,630 --> 00:02:53,670 Så det binære strengen 0000 tilsvarer heksadesimalsiffer 0. 53 00:02:53,670 --> 00:03:00,340 0110 tilsvarer heksadesimalsiffer 6. 54 00:03:00,340 --> 00:03:05,225 Og 1111 tilsvarer å heksadesimalsiffer f. 55 00:03:05,225 --> 00:03:07,100 Hvis du ser på denne oversikten, spesielt 56 00:03:07,100 --> 00:03:09,099 hvis du ser på venstre side av diagrammet, 57 00:03:09,099 --> 00:03:11,970 du kan allerede se det er en litt av en tvetydighet problem her. 58 00:03:11,970 --> 00:03:15,229 Desimal 0 er ganske mye utvisket fra heksadesimale 0, 59 00:03:15,229 --> 00:03:18,020 annet enn det faktum at det er under en kolonne som sier heksadesimale. 60 00:03:18,020 --> 00:03:22,130 >> Men vi vil sannsynligvis ikke alltid har den kolonnen der. 61 00:03:22,130 --> 00:03:25,420 Vanligvis når vi uttrykker numre i heksadesimal notasjon 62 00:03:25,420 --> 00:03:28,130 å skille klart dem fra titallssystemet, 63 00:03:28,130 --> 00:03:31,860 vi vanligvis prefiks dem med prefikset 0x. 64 00:03:31,860 --> 00:03:35,990 0x betyr ingenting i virkeligheten, det er bare et hint til oss som mennesker 65 00:03:35,990 --> 00:03:39,190 at det vi er i ferd med å se, eller skal begynne parsing, 66 00:03:39,190 --> 00:03:40,750 er et heksadesimalt tall. 67 00:03:40,750 --> 00:03:45,590 Tydeligvis for de høyere tallene a, b, c, d og f, som tilsvarer 10-15 68 00:03:45,590 --> 00:03:48,840 det er ganske entydig som er det er et heksadesimalt tall. 69 00:03:48,840 --> 00:03:51,620 Og faktisk, et heksadesimalt nummer som har bokstaver i den, 70 00:03:51,620 --> 00:03:54,642 er sannsynligvis ganske opplagt som et heksadesimalt tall. 71 00:03:54,642 --> 00:03:56,350 Men, likevel, for Av klarhetshensyn er det 72 00:03:56,350 --> 00:03:58,290 alltid en god idé å prefiks hver gang du 73 00:03:58,290 --> 00:04:01,835 referere til et siffer som heksadesimale nummer med prefikset en 0x. 74 00:04:01,835 --> 00:04:04,370 75 00:04:04,370 --> 00:04:06,810 >> Så, binære, som vi sa, har plass verdier. 76 00:04:06,810 --> 00:04:10,040 Det er de sted, et toere sted, en firere sted, og en åttere sted. 77 00:04:10,040 --> 00:04:13,640 Og desimal har også sted verdier, enere, tiere, hundre og tusenvis 78 00:04:13,640 --> 00:04:15,910 at vi alle kan huske fra grunnskolen. 79 00:04:15,910 --> 00:04:18,050 Og heksadesimale er ingen Unntaket her, egentlig. 80 00:04:18,050 --> 00:04:22,660 Den har også plass verdier, men i stedet av å være potenser av 2 eller krefter 10, 81 00:04:22,660 --> 00:04:25,050 de er krefter 16. 82 00:04:25,050 --> 00:04:29,410 >> Så vi ser et tall som dette vi ganske tydelig vet at det er 397, ikke sant? 83 00:04:29,410 --> 00:04:33,420 Vel, hvis vi ser et tall som dette, vi vet at dette er ikke 397 lenger. 84 00:04:33,420 --> 00:04:36,730 Dette er den heksadesimale nummer tre-9-7. 85 00:04:36,730 --> 00:04:39,680 Det er ikke 397, det betyr noe annerledes, 86 00:04:39,680 --> 00:04:44,180 fordi vi bruker krefter av 16 som alle av våre sted verdier i stedet for krefter 87 00:04:44,180 --> 00:04:45,560 av 10. 88 00:04:45,560 --> 00:04:50,570 Faktisk, stedet verdier her ville være de sted, sixteens sted, 89 00:04:50,570 --> 00:04:55,080 og to-hundre-fifty-seksere sted, som tilsvarer vår idé om en seg 90 00:04:55,080 --> 00:04:59,180 sted, tiere sted, og en hundrevis sted, hvis antallet var 397. 91 00:04:59,180 --> 00:05:03,620 Men siden det er 0x 397, har vi en som sted, sixteens sted, 92 00:05:03,620 --> 00:05:05,780 og en to-hundre-fifty-seksere sted. 93 00:05:05,780 --> 00:05:09,460 Eller, en 16 til 0 stedet, som er en. 94 00:05:09,460 --> 00:05:12,420 En 16 til den første effekt sted, 16. 95 00:05:12,420 --> 00:05:17,080 A 16 kvadrerte plass, 256, og så videre, og så videre, og så videre. 96 00:05:17,080 --> 00:05:24,400 Så dette nummeret er egentlig 3 ganger 16 squared, pluss 9 ganger 16, pluss 7. 97 00:05:24,400 --> 00:05:28,980 Jeg gjorde ikke gjøre regnestykket her, men det er ikke 397, det er mye, mye større enn det. 98 00:05:28,980 --> 00:05:34,050 >> På samme måte kan vi ha 0x ADC, vel det er en ganger 16 kvadrat. 99 00:05:34,050 --> 00:05:38,220 Eller hvis vi oversette det til vår forestilling av desimaltall, det er 10 ganger 100 00:05:38,220 --> 00:05:44,160 16 kvadrat, pluss d ganger 16, eller pluss 13 ganger 16. 101 00:05:44,160 --> 00:05:47,410 Og ikke bekymre deg hvis du ikke har lagret at d er 13, eller noe sånt, 102 00:05:47,410 --> 00:05:49,201 det er ikke for mange av disse brev sifre 103 00:05:49,201 --> 00:05:52,820 og det vil bli intuitivt ganske raskt. 104 00:05:52,820 --> 00:05:59,800 Så igjen dette er 10 ganger 16 kvadrat, pluss 13 ganger 16, pluss 12 ganger 1. 105 00:05:59,800 --> 00:06:03,640 Så 0x ADC. 106 00:06:03,640 --> 00:06:07,750 >> Så, som jeg sa, hver gruppe 4 binære sifre 107 00:06:07,750 --> 00:06:10,000 svarer til en enkelt heksadesimale siffer, 108 00:06:10,000 --> 00:06:12,570 og så det er faktisk veldig enkelt å endre frem og tilbake 109 00:06:12,570 --> 00:06:14,690 mellom hex og binære. 110 00:06:14,690 --> 00:06:18,310 Hvis du har denne lang rekke binære siffer, alt du trenger å gjøre 111 00:06:18,310 --> 00:06:21,320 blir begynne å gruppere dem rett til venstre som grupper av fire. 112 00:06:21,320 --> 00:06:26,550 Og så kan du konsolidere dem inn heksadesimale tall, 113 00:06:26,550 --> 00:06:30,910 sterkt begrense antall sifre du har til å behandle mentalt. 114 00:06:30,910 --> 00:06:33,680 I stedet for 32 0 og 1-ere, som vi skal se i et sekund, 115 00:06:33,680 --> 00:06:37,630 du kan være i stand til å få det ned til kun 8 heksadesimale tall, mye 116 00:06:37,630 --> 00:06:39,200 mer konsis. 117 00:06:39,200 --> 00:06:43,500 >> Listene noen lysbilder tilbake, vil hjelpe deg med å finne ut av dette kartlegging, 118 00:06:43,500 --> 00:06:45,660 selv, igjen vil du huske det ganske raskt. 119 00:06:45,660 --> 00:06:47,320 Vi vil gå gjennom et eksempel akkurat nå. 120 00:06:47,320 --> 00:06:51,507 Så hvis vi har et tall som dette, dette virkelig stort antall binære, 121 00:06:51,507 --> 00:06:53,340 eller hva synes å være et stort binært tall. 122 00:06:53,340 --> 00:06:56,260 Og grunnen til at jeg sier det, er det bare so-- det er en Behemoth, ikke sant? 123 00:06:56,260 --> 00:06:58,959 Det er så mange 0 og 1-ere der. 124 00:06:58,959 --> 00:07:01,000 Men vi sannsynligvis ikke virkelig har en følelse av hva 125 00:07:01,000 --> 00:07:02,870 størrelsen av dette nummeret er virkelig. 126 00:07:02,870 --> 00:07:06,150 Vi har ikke noen anelse om hva det ville tilsvare en desimal. 127 00:07:06,150 --> 00:07:09,744 Og faktisk vi vil ikke engang se hva det tilsvarer i desimal akkurat nå. 128 00:07:09,744 --> 00:07:11,660 Vi kan være i stand til å uttrykke dette på en måte som 129 00:07:11,660 --> 00:07:15,640 ville gi oss litt mer informasjon om hvor stort dette tallet er. 130 00:07:15,640 --> 00:07:17,270 >> Så la oss gå til at konverteringsprosessen. 131 00:07:17,270 --> 00:07:19,311 Det første vi trenger å gjøre er vi ønsker å gruppere 132 00:07:19,311 --> 00:07:23,050 disse tallene ut i grupper av 4, fra høyre 133 00:07:23,050 --> 00:07:24,120 og arbeider til venstre. 134 00:07:24,120 --> 00:07:27,260 Det måtte være 32 sifre her, noe som betyr at vi har 135 00:07:27,260 --> 00:07:33,210 en fin ren pause på 8 grupper på fire. 136 00:07:33,210 --> 00:07:36,200 Husk at hver gruppe av 4 her, unikt tilsvarer 137 00:07:36,200 --> 00:07:37,760 til et heksadesimalt siffer. 138 00:07:37,760 --> 00:07:42,080 Så vi vil starte på nytt å bygge vår nummer fra høyre, og arbeider venstre. 139 00:07:42,080 --> 00:07:44,890 Vel, hva er 1 101? 140 00:07:44,890 --> 00:07:49,220 Vel vi gjøre regnestykket i hodet, vi har en i åttere sted, en 1 141 00:07:49,220 --> 00:07:54,310 i firere sted, en 0 i toere plass, og en en i seg sted. 142 00:07:54,310 --> 00:07:58,820 Det er 8 pluss 4 pluss 1, som vi ville vite som 13. 143 00:07:58,820 --> 00:08:02,400 Men vi sannsynligvis ikke ville skrive 13 ut, fordi vi jobber med heksadesimale. 144 00:08:02,400 --> 00:08:07,982 Vi trenger å konvertere den til heksadesimale tilsvarende 13, som er f. 145 00:08:07,982 --> 00:08:12,940 >> 0011, vel det er en 0 i åttere sted, 0 i firere sted, 146 00:08:12,940 --> 00:08:15,190 en 1 i toere sted, og en en i seg sted. 147 00:08:15,190 --> 00:08:16,880 Det er 3. 148 00:08:16,880 --> 00:08:20,180 Jeg mener fortsette å gjøre dette igjen, har vi her 9. 149 00:08:20,180 --> 00:08:23,850 Og deretter 11, men det er b, tilbakekalling. 150 00:08:23,850 --> 00:08:30,570 2, 10-- a-- eller 6, og 4. 151 00:08:30,570 --> 00:08:34,669 Og så veldig store string av 0-er og 1-ere på toppen 152 00:08:34,669 --> 00:08:38,549 er mer presist uttrykt i heksadesimal som 0x 46a2b93d. 153 00:08:38,549 --> 00:08:42,309 154 00:08:42,309 --> 00:08:45,870 >> Vel, OK, vi har lært en ny kult spill, hva er poenget? 155 00:08:45,870 --> 00:08:49,560 Vi kan ikke bruke alt dette tid, som vi kommer til å snart se, 156 00:08:49,560 --> 00:08:52,370 vi bruker heksadesimale ganske mye som programmerere. 157 00:08:52,370 --> 00:08:55,060 Ikke nødvendigvis for Hensikten med å gjøre matte med det, 158 00:08:55,060 --> 00:08:58,470 men fordi mange ganger minneadresser i vårt system 159 00:08:58,470 --> 00:09:00,440 er representert i heksadesimal. 160 00:09:00,440 --> 00:09:04,390 Det er en veldig konsis måte å uttrykke ellers tungvinte, binære tall. 161 00:09:04,390 --> 00:09:06,440 Og så, igjen, kan du not-- du antakelig 162 00:09:06,440 --> 00:09:07,640 ikke kommer til å gjøre noe matte med det, er du ikke 163 00:09:07,640 --> 00:09:09,848 kommer til å være å multiplisere heksadesimale tall sammen, 164 00:09:09,848 --> 00:09:11,770 eller gjør noe merkelig sånn. 165 00:09:11,770 --> 00:09:16,120 Men det er en nyttig ferdighet å ha slik at du kan uttrykke og forstå 166 00:09:16,120 --> 00:09:23,290 hukommelse adresser og annen måter å bruke data i C. 167 00:09:23,290 --> 00:09:26,240 >> Jeg er Doug Lloyd, dette er CS50. 168 00:09:26,240 --> 00:09:28,028