1 00:00:00,000 --> 00:00:05,511 2 00:00:05,511 --> 00:00:08,510 DOUG LLYOYD: Så hexadecimale tal, som hvis vi havde brug for en anden base nummer 3 00:00:08,510 --> 00:00:09,970 Ordningen ret? 4 00:00:09,970 --> 00:00:13,000 Tja, de fleste vestlige kulturer, som du sikkert er bekendt, 5 00:00:13,000 --> 00:00:16,560 bruge decimal system-- bund 10, til at repræsentere numeriske data. 6 00:00:16,560 --> 00:00:20,520 Vi har cifrene 0, 1, 2, 3, 5, 6, 7,8,9. 7 00:00:20,520 --> 00:00:23,890 Og hvis vi har brug for at repræsentere værdier højere end ni, 8 00:00:23,890 --> 00:00:26,800 vi kan kombinere disse cifre ved hjælp af begrebet pladsværdi. 9 00:00:26,800 --> 00:00:30,115 Så for 10, har vi en 1 cifret efterfulgt af et 0-cifret 10 00:00:30,115 --> 00:00:32,240 og vi intuitivt forstår at det, vi laver 11 00:00:32,240 --> 00:00:35,500 der er vi multiplicere de første 1 med 10, 12 00:00:35,500 --> 00:00:37,689 og derefter tilsætte 0 for i alt 10. 13 00:00:37,689 --> 00:00:40,480 Computere gøre noget temmelig lignende, som du sikkert kender, 14 00:00:40,480 --> 00:00:42,409 med den binære system-- basis 2. 15 00:00:42,409 --> 00:00:44,700 Forskellen at der er at der kun er 2 cifre 16 00:00:44,700 --> 00:00:46,770 at arbejde med-- 0 og 1. 17 00:00:46,770 --> 00:00:49,033 Og så vores sted værdier, stedet for at være en, 18 00:00:49,033 --> 00:00:52,600 ti, hundrede, tusinde, da de ville være i decimal systemet, 19 00:00:52,600 --> 00:00:57,690 er en, to, fire, otte, og så videre. 20 00:00:57,690 --> 00:01:00,842 Her er ting selv, disse 0'er og 1'er, især 21 00:01:00,842 --> 00:01:03,800 hvis vi bliver dataloger og vi laver en masse programmering 22 00:01:03,800 --> 00:01:06,924 eller arbejder med computere, var at gå skal se en masse binære tal. 23 00:01:06,924 --> 00:01:11,660 Og disse 0'er og 1'er i store kæder kan være meget vanskeligt at analysere. 24 00:01:11,660 --> 00:01:16,610 Vi kan ikke bare se på en streng af 0'er og 1-og nødvendigvis ved 25 00:01:16,610 --> 00:01:17,810 præcis, hvad det er. 26 00:01:17,810 --> 00:01:21,980 Men det er stadig nyttigt at kunne udtrykkelige data på samme måde 27 00:01:21,980 --> 00:01:23,480 at en computer gør. 28 00:01:23,480 --> 00:01:26,580 Vi har dette begreb af hexadecimal system, som er 29 00:01:26,580 --> 00:01:29,840 bunden 16, i stedet for basen 10 eller bunden 2. 30 00:01:29,840 --> 00:01:34,420 Hvilket betyder, at vi har 16 cifre at arbejde med i stedet for 10 eller 2. 31 00:01:34,420 --> 00:01:37,180 Og det er en langt mere kortfattet måde at udtrykke 32 00:01:37,180 --> 00:01:41,210 binær information i et computersystem, det er meget mere menneskelig forståeligt. 33 00:01:41,210 --> 00:01:43,520 Så vi har cifrene 0 til 9, og derefter 34 00:01:43,520 --> 00:01:49,480 vi har også disse ekstra seks digits-- a, b, c, d, e, f og, som udgør 10, 35 00:01:49,480 --> 00:01:56,050 vores opfattelse af 10, 11, 12, 13, 14 og 15, i decimal. 36 00:01:56,050 --> 00:01:59,787 Nogle gange, ved den måde, vil du også se disse A til F s som kapital A 37 00:01:59,787 --> 00:02:01,620 gennem F, som er den måde jeg har tendens til at gøre det. 38 00:02:01,620 --> 00:02:04,560 Det er bare min foretrukne stil, men enten er fint, 39 00:02:04,560 --> 00:02:07,870 de begge repræsenterer temmelig set det samme. 40 00:02:07,870 --> 00:02:09,090 >> Så hvorfor er hexadecimal cool? 41 00:02:09,090 --> 00:02:11,580 Hvorfor har vi brug for at bruge denne andre yderligere base? 42 00:02:11,580 --> 00:02:14,310 Vi har allerede 2 og 10, hvorfor har vi brug 16? 43 00:02:14,310 --> 00:02:21,650 Nå 16 er en potens af 2, og så hver hexadecimalt ciffer, 0 til f, 44 00:02:21,650 --> 00:02:25,440 svarer til et unikt bestilling, eller enestående arrangement 45 00:02:25,440 --> 00:02:29,060 4 binære cifre, 4 bit. 46 00:02:29,060 --> 00:02:34,570 Og så i den forstand kan vi udtrykke meget lange, komplekse, binære tal 47 00:02:34,570 --> 00:02:36,440 i hexadecimal i en langt mere koncis måde, 48 00:02:36,440 --> 00:02:41,080 uden at miste information eller at skulle gør særligt besværlige konverteringer 49 00:02:41,080 --> 00:02:42,480 på disse numre. 50 00:02:42,480 --> 00:02:44,880 >> Så, som jeg lige har sagt, hver hexadecimalt ciffer 51 00:02:44,880 --> 00:02:48,630 svarer til et unikt arrangement af 4 binære cifre. 52 00:02:48,630 --> 00:02:53,670 Så den binære streng 0000 svarer til hexadecimal ciffer 0. 53 00:02:53,670 --> 00:03:00,340 0110 svarer til hexadecimal ciffer 6. 54 00:03:00,340 --> 00:03:05,225 Og 1111 svarer til hexadecimal tal f. 55 00:03:05,225 --> 00:03:07,100 Hvis du kigger på dette skema, især 56 00:03:07,100 --> 00:03:09,099 Hvis du kigger på den venstre side af diagrammet, 57 00:03:09,099 --> 00:03:11,970 du kan allerede se, at der er en lidt af en tvetydighed problem her. 58 00:03:11,970 --> 00:03:15,229 Decimal 0 er temmelig meget skelnes fra hexadecimal 0, 59 00:03:15,229 --> 00:03:18,020 bortset fra det faktum, at det er under en kolonne, der siger hexadecimal. 60 00:03:18,020 --> 00:03:22,130 >> Men vi vil nok ikke altid har denne kolonne der. 61 00:03:22,130 --> 00:03:25,420 Generelt når vi udtrykker numre i hexadecimal notation 62 00:03:25,420 --> 00:03:28,130 til klart at skelne dem fra decimal notation, 63 00:03:28,130 --> 00:03:31,860 vi normalt præfiks dem med præfikset 0x. 64 00:03:31,860 --> 00:03:35,990 0x betyder intet i virkeligheden det er bare en anelse for os som mennesker 65 00:03:35,990 --> 00:03:39,190 at det, vi er ved at se, eller ved at starte parsing, 66 00:03:39,190 --> 00:03:40,750 er et hexadecimalt tal. 67 00:03:40,750 --> 00:03:45,590 Naturligvis for de højere cifre a, b, c, d og f, som svarer til 10-15 68 00:03:45,590 --> 00:03:48,840 det er ret entydig, der er det er et hexadecimalt tal. 69 00:03:48,840 --> 00:03:51,620 Og i virkeligheden, enhver hexadecimal nummer, der har breve i det, 70 00:03:51,620 --> 00:03:54,642 er sandsynligvis temmelig indlysende som et hexadecimalt tal. 71 00:03:54,642 --> 00:03:56,350 Men stadig, for klarhedens skyld er det 72 00:03:56,350 --> 00:03:58,290 altid en god ide at præfiks, hver gang du 73 00:03:58,290 --> 00:04:01,835 henviser til et ciffer som et hexadecimalt nummer ved at foranstille en 0x. 74 00:04:01,835 --> 00:04:04,370 75 00:04:04,370 --> 00:04:06,810 >> Så binært, som vi sagt, har sted værdier. 76 00:04:06,810 --> 00:04:10,040 Der er dem sted, et toere sted, et fours sted, og en eights sted. 77 00:04:10,040 --> 00:04:13,640 Og decimal har også placere værdier, de dem, tiere, hundreder, og tusinder 78 00:04:13,640 --> 00:04:15,910 at vi alle kan huske fra folkeskolen. 79 00:04:15,910 --> 00:04:18,050 Og hexadecimal er ingen undtagelse her, virkelig. 80 00:04:18,050 --> 00:04:22,660 Det har også sted værdier, men i stedet af at være beføjelser 2 eller beføjelser på 10, 81 00:04:22,660 --> 00:04:25,050 de er beføjelser 16. 82 00:04:25,050 --> 00:04:29,410 >> Så vi se en række som denne vi temmelig tydeligt ved, det er 397, ikke? 83 00:04:29,410 --> 00:04:33,420 Tja, hvis vi ser en række som denne, Vi ved, at dette ikke er 397 længere. 84 00:04:33,420 --> 00:04:36,730 Dette er den hexadecimale nummer tre-9-7. 85 00:04:36,730 --> 00:04:39,680 Det er ikke 397, betyder det noget anderledes, 86 00:04:39,680 --> 00:04:44,180 fordi vi bruger kræfter 16 som alle af vores sted værdier i stedet for beføjelser 87 00:04:44,180 --> 00:04:45,560 10. 88 00:04:45,560 --> 00:04:50,570 Faktisk, det sted værdier her ville være dem sted, det Sixteens sted, 89 00:04:50,570 --> 00:04:55,080 og de to-100-50-seksere sted, som svarer til vores idé om en dem 90 00:04:55,080 --> 00:04:59,180 sted, TEN sted, og en flere hundrede sted, hvis antallet var 397. 91 00:04:59,180 --> 00:05:03,620 Men da det er 0x 397, har vi en dem sted, Sixteens sted, 92 00:05:03,620 --> 00:05:05,780 og en to-100-50-seksere sted. 93 00:05:05,780 --> 00:05:09,460 Eller en 16 til 0 sted, som er 1. 94 00:05:09,460 --> 00:05:12,420 En 16 til den første strøm sted, 16. 95 00:05:12,420 --> 00:05:17,080 En 16 kvadreret sted, 256 og så videre, og så videre, og så videre. 96 00:05:17,080 --> 00:05:24,400 Så dette nummer er virkelig 3 gange 16 kvadreret, plus 9 gange 16 plus 7. 97 00:05:24,400 --> 00:05:28,980 Jeg har ikke gøre det math her, men det er ikke 397, det er meget, meget større end det. 98 00:05:28,980 --> 00:05:34,050 >> Ligeledes kunne vi have 0x ADC, godt, der er en gange 16 kvadreret. 99 00:05:34,050 --> 00:05:38,220 Eller hvis vi oversætter det til vores forestilling af decimaltal, der er 10 gange 100 00:05:38,220 --> 00:05:44,160 16 kvadreret, plus d gange 16 eller plus 13 gange 16. 101 00:05:44,160 --> 00:05:47,410 Og du behøver ikke bekymre dig, hvis du ikke har huskes at d er 13, eller noget lignende, 102 00:05:47,410 --> 00:05:49,201 der er ikke for mange af disse brev cifre 103 00:05:49,201 --> 00:05:52,820 og det vil blive intuitiv temmelig hurtigt. 104 00:05:52,820 --> 00:05:59,800 Så igen er det 10 gange 16 kvadreret, plus 13 gange 16 plus 12 gange 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 sagde, hver gruppe 4 binære cifre 107 00:06:07,750 --> 00:06:10,000 svarer til en enkelt hexadecimal tal, 108 00:06:10,000 --> 00:06:12,570 og så det er faktisk rigtig let at ændre frem og tilbage 109 00:06:12,570 --> 00:06:14,690 mellem hex og binær. 110 00:06:14,690 --> 00:06:18,310 Hvis du har denne lange række af binære cifre, alt hvad du behøver at gøre 111 00:06:18,310 --> 00:06:21,320 er at starte gruppere dem ret til venstre som grupper af 4. 112 00:06:21,320 --> 00:06:26,550 Og så kan du konsolidere dem i hexadecimale tal, 113 00:06:26,550 --> 00:06:30,910 stærkt begrænse antallet af cifre, du er nødt til at behandle mentalt. 114 00:06:30,910 --> 00:06:33,680 I stedet for 32 0'er og 1'er, som vi vil se i en anden, 115 00:06:33,680 --> 00:06:37,630 du kan være i stand til at få det ned til blot 8 hexadecimale cifre, en masse 116 00:06:37,630 --> 00:06:39,200 mere kortfattet. 117 00:06:39,200 --> 00:06:43,500 >> Hitlisterne et par dias ryggen vil hjælpe dig med at finde ud af denne kortlægning, 118 00:06:43,500 --> 00:06:45,660 selv, igen vil du huske det temmelig hurtigt. 119 00:06:45,660 --> 00:06:47,320 Vi vil gå igennem et eksempel lige nu. 120 00:06:47,320 --> 00:06:51,507 Så hvis vi har en række som denne, dette virkelig store binære tal, 121 00:06:51,507 --> 00:06:53,340 eller hvad der synes at være et stort binært tal. 122 00:06:53,340 --> 00:06:56,260 Og grunden til at jeg siger det, det er bare so-- det er et monstrum, ikke? 123 00:06:56,260 --> 00:06:58,959 Der er så mange 0'er og 1 er der. 124 00:06:58,959 --> 00:07:01,000 Men vi gør nok ikke virkelig har en fornemmelse af, hvad 125 00:07:01,000 --> 00:07:02,870 størrelsen af ​​dette antal er. 126 00:07:02,870 --> 00:07:06,150 Vi har ikke nogen idé om, hvad det ville svare til en decimal. 127 00:07:06,150 --> 00:07:09,744 Og i virkeligheden, vi vil ikke engang se, hvad det svarer til i decimal lige nu. 128 00:07:09,744 --> 00:07:11,660 Vi kan være i stand til udtrykke dette på en måde, 129 00:07:11,660 --> 00:07:15,640 ville give os nogle flere oplysninger om, hvor stort dette antal er. 130 00:07:15,640 --> 00:07:17,270 >> Så lad os gå til at konverteringen. 131 00:07:17,270 --> 00:07:19,311 Det første, vi har brug for at gøre, er at vi vil gruppere 132 00:07:19,311 --> 00:07:23,050 disse cifre ud i grupper 4, startende fra højre 133 00:07:23,050 --> 00:07:24,120 og arbejde til venstre. 134 00:07:24,120 --> 00:07:27,260 Der tilfældigvis er 32 cifre her, hvilket betyder, at vi har 135 00:07:27,260 --> 00:07:33,210 en dejlig ren pause på 8 grupper af fire. 136 00:07:33,210 --> 00:07:36,200 Husk, at hver gruppe af 4 her, unikt svarer 137 00:07:36,200 --> 00:07:37,760 til en hexadecimal ciffer. 138 00:07:37,760 --> 00:07:42,080 Så vi starter igen opbygge vores nummer fra højre, og arbejder til venstre. 139 00:07:42,080 --> 00:07:44,890 Nå, hvad er 1101? 140 00:07:44,890 --> 00:07:49,220 Godt vi gør det math i vores hoved, vi har 1 i ottere sted, en 1 141 00:07:49,220 --> 00:07:54,310 i firere sted, et 0 i toere sted, og en 1 i dem sted. 142 00:07:54,310 --> 00:07:58,820 Det er 8 plus 4 plus 1, som vi ville vide som 13. 143 00:07:58,820 --> 00:08:02,400 Men vi sandsynligvis ikke ville skrive 13 ud, fordi vi arbejder med hexadecimal. 144 00:08:02,400 --> 00:08:07,982 Vi er nødt til at konvertere den til det hexadecimale svarende til 13, hvilket er d. 145 00:08:07,982 --> 00:08:12,940 >> 0011, Det er en 0 i ottere sted, et 0 i fours sted, 146 00:08:12,940 --> 00:08:15,190 en 1 i toere sted, og en 1 i dem sted. 147 00:08:15,190 --> 00:08:16,880 Det er 3. 148 00:08:16,880 --> 00:08:20,180 Jeg mener holde gør dette igen, vi har her 9. 149 00:08:20,180 --> 00:08:23,850 Og så 11, men det er b, tilbagekaldelse. 150 00:08:23,850 --> 00:08:30,570 2, 10-- eller en-- 6 og 4. 151 00:08:30,570 --> 00:08:34,669 Og så meget store streng af 0 s og 1 s af toppen 152 00:08:34,669 --> 00:08:38,549 er mere præcist udtrykt i hexadecimal som 0x 46a2b93d. 153 00:08:38,549 --> 00:08:42,309 154 00:08:42,309 --> 00:08:45,870 >> Nå, OK, har vi lært en ny køligt dygtighed, hvad er pointen? 155 00:08:45,870 --> 00:08:49,560 Vi kan ikke bruge det hele tid, da vi kommer til at snart se, 156 00:08:49,560 --> 00:08:52,370 vi bruger hexadecimal helt et parti som programmører. 157 00:08:52,370 --> 00:08:55,060 Ikke nødvendigvis for Formålet med at gøre matematik med det, 158 00:08:55,060 --> 00:08:58,470 men fordi en masse gange lageradresser i vores system 159 00:08:58,470 --> 00:09:00,440 er repræsenteret i hexadecimal. 160 00:09:00,440 --> 00:09:04,390 Det er en virkelig kortfattet måde at udtrykke ellers besværlige, binære tal. 161 00:09:04,390 --> 00:09:06,440 Og så, igen, kan du not-- du sandsynligvis 162 00:09:06,440 --> 00:09:07,640 ikke kommer til at gøre nogen matematik med det, du er ikke 163 00:09:07,640 --> 00:09:09,848 vil være multiplicere hexadecimale tal sammen, 164 00:09:09,848 --> 00:09:11,770 eller gør noget underligt sådan. 165 00:09:11,770 --> 00:09:16,120 Men det er en nyttig færdighed at have så du kan udtrykke og forstå 166 00:09:16,120 --> 00:09:23,290 hukommelse adresser og andre måder at anvende data i C. 167 00:09:23,290 --> 00:09:26,240 >> Jeg er Doug Lloyd, det er CS50. 168 00:09:26,240 --> 00:09:28,028