1 00:00:00,000 --> 00:00:05,511 2 00:00:05,511 --> 00:00:08,510 DOUG LLYOYD: Então números hexadecimais, como se precisássemos de outro número base 3 00:00:08,510 --> 00:00:09,970 direito esquema? 4 00:00:09,970 --> 00:00:13,000 Bem, a maioria das culturas ocidentais, como você provavelmente está familiarizado, 5 00:00:13,000 --> 00:00:16,560 usar a base system-- decimal 10, para representar os dados numéricos. 6 00:00:16,560 --> 00:00:20,520 Temos os dígitos 0, 1, 2, 3, 5, 6, 7,8,9. 7 00:00:20,520 --> 00:00:23,890 E se é preciso representar valores superiores a nove, 8 00:00:23,890 --> 00:00:26,800 nós podemos combinar esses dígitos utilizando a noção de valor local. 9 00:00:26,800 --> 00:00:30,115 Portanto, para 10, temos um 1 dígitos seguido de um dígito 0 10 00:00:30,115 --> 00:00:32,240 e nós intuitivamente entender que o que estamos fazendo 11 00:00:32,240 --> 00:00:35,500 há que estamos multiplicando o primeiro 1 por 10, 12 00:00:35,500 --> 00:00:37,689 e, em seguida, adição de 0 durante um total de 10. 13 00:00:37,689 --> 00:00:40,480 Computadores fazer algo bonito semelhante, como você provavelmente está familiarizado, 14 00:00:40,480 --> 00:00:42,409 com a base system-- binário 2. 15 00:00:42,409 --> 00:00:44,700 A diferença não ser que existem apenas dois dígitos 16 00:00:44,700 --> 00:00:46,770 para trabalhar com-- 0 e 1. 17 00:00:46,770 --> 00:00:49,033 E assim os nossos valores de lugar, em vez de ser um, 18 00:00:49,033 --> 00:00:52,600 dez, cem, mil, como eles seria no sistema decimal, 19 00:00:52,600 --> 00:00:57,690 são um, dois, quatro, oito, e assim por diante. 20 00:00:57,690 --> 00:01:00,842 Aqui está a coisa, porém, aqueles 0 e 1, especialmente de 21 00:01:00,842 --> 00:01:03,800 se estamos sendo cientistas da computação e estamos fazendo um monte de programação 22 00:01:03,800 --> 00:01:06,924 ou trabalhar com computadores, foram indo estar vendo um monte de números binários. 23 00:01:06,924 --> 00:01:11,660 E aquelas de 0 e 1 no grandes cadeias pode ser muito difícil de analisar. 24 00:01:11,660 --> 00:01:16,610 Não podemos simplesmente olhar para uma série de 0 e 1 e necessariamente saber 25 00:01:16,610 --> 00:01:17,810 exatamente o que é. 26 00:01:17,810 --> 00:01:21,980 Mas ainda é útil para ser capaz dados expressos da mesma forma 27 00:01:21,980 --> 00:01:23,480 que um computador faz. 28 00:01:23,480 --> 00:01:26,580 Nós temos essa noção da sistema hexadecimal, que é 29 00:01:26,580 --> 00:01:29,840 base 16, em vez de base 10 ou base 2. 30 00:01:29,840 --> 00:01:34,420 O que significa que temos 16 dígitos a trabalhar com o em vez de 10 ou 2. 31 00:01:34,420 --> 00:01:37,180 E é uma muito mais forma concisa para expressar 32 00:01:37,180 --> 00:01:41,210 informação binária num sistema de computador, é muito mais humana compreensível. 33 00:01:41,210 --> 00:01:43,520 Portanto, temos os dígitos De 0 a 9, e depois 34 00:01:43,520 --> 00:01:49,480 temos também estes extras seis digits-- um, b, c, d, e, f, as quais representam 10, 35 00:01:49,480 --> 00:01:56,050 nossa noção de 10, 11, 12, 13, 14 e 15, em decimal. 36 00:01:56,050 --> 00:01:59,787 Às vezes, pelo caminho, você também vai veja estes um meio de F como capital de um 37 00:01:59,787 --> 00:02:01,620 a F, que é a maneira que eu tendem a fazê-lo. 38 00:02:01,620 --> 00:02:04,560 É apenas o meu preferido estilo, mas de qualquer é bom, 39 00:02:04,560 --> 00:02:07,870 ambos representam bonita a mesma coisa. 40 00:02:07,870 --> 00:02:09,090 >> Então, por que é legal hexadecimal? 41 00:02:09,090 --> 00:02:11,580 Por que precisamos usar este outra base adicional? 42 00:02:11,580 --> 00:02:14,310 Nós já temos 2 e 10, por que precisamos de 16? 43 00:02:14,310 --> 00:02:21,650 Bem 16 é uma potência de 2, e assim cada dígito hexadecimal, de 0 a f, 44 00:02:21,650 --> 00:02:25,440 corresponde a uma única ordenação, ou arranjo original 45 00:02:25,440 --> 00:02:29,060 de 4 dígitos binários, 4 bits. 46 00:02:29,060 --> 00:02:34,570 E então, nesse sentido, podemos expressar , números complexos, binários muito longas 47 00:02:34,570 --> 00:02:36,440 em hexadecimal numa muito maneira mais concisa, 48 00:02:36,440 --> 00:02:41,080 sem perda de informações ou ter que fazer conversões particularmente pesados 49 00:02:41,080 --> 00:02:42,480 esses números. 50 00:02:42,480 --> 00:02:44,880 >> Então, como eu disse, cada dígito hexadecimal 51 00:02:44,880 --> 00:02:48,630 corresponde a uma única arranjo de 4 dígitos binários. 52 00:02:48,630 --> 00:02:53,670 Assim, a cadeia binária 0000 corresponde ao hexadecimal dígitos 0. 53 00:02:53,670 --> 00:03:00,340 0110 corresponde a 6 dígitos hexadecimal. 54 00:03:00,340 --> 00:03:05,225 E 1111 corresponde para hexadecimal dígitos f. 55 00:03:05,225 --> 00:03:07,100 Se você está olhando este gráfico, particularmente 56 00:03:07,100 --> 00:03:09,099 se você está olhando para o lado esquerdo do gráfico, 57 00:03:09,099 --> 00:03:11,970 você já pode ver que há uma pouco de um problema de ambigüidade aqui. 58 00:03:11,970 --> 00:03:15,229 Decimal 0 é muito bonito indistinguíveis de hexadecimal 0, 59 00:03:15,229 --> 00:03:18,020 além do fato de que ele está sob uma coluna que diz hexadecimal. 60 00:03:18,020 --> 00:03:22,130 >> Mas nós provavelmente não vai sempre que tem ali coluna. 61 00:03:22,130 --> 00:03:25,420 Geralmente, quando estamos expressando números em notação hexadecimal 62 00:03:25,420 --> 00:03:28,130 distinguir claramente los de notação decimal, 63 00:03:28,130 --> 00:03:31,860 nós geralmente prefixo-los com o prefixo 0x. 64 00:03:31,860 --> 00:03:35,990 0x significa nada, na realidade, é apenas uma pista para nós como seres humanos 65 00:03:35,990 --> 00:03:39,190 que o que estamos prestes a ver, ou prestes a iniciar a análise, 66 00:03:39,190 --> 00:03:40,750 é um número hexadecimal. 67 00:03:40,750 --> 00:03:45,590 Obviamente, para os dígitos mais elevados, b, c, d, e, f, o que corresponde a 10-15 68 00:03:45,590 --> 00:03:48,840 é bastante inequívoca que é que é um número hexadecimal. 69 00:03:48,840 --> 00:03:51,620 E, de fato, qualquer hexadecimal número que tem cartas na mesma, 70 00:03:51,620 --> 00:03:54,642 é provavelmente bastante óbvio como um número hexadecimal. 71 00:03:54,642 --> 00:03:56,350 Mas, ainda assim, para o razões de clareza, é 72 00:03:56,350 --> 00:03:58,290 sempre uma boa idéia prefixar cada vez que você 73 00:03:58,290 --> 00:04:01,835 referem-se a um dígito como hexadecimal número prefixando um 0x. 74 00:04:01,835 --> 00:04:04,370 75 00:04:04,370 --> 00:04:06,810 >> Então, binário, como nós disse, tem valores de lugar. 76 00:04:06,810 --> 00:04:10,040 Há o lugar queridos, um lugar dois, um lugar de quatro, e um lugar oitos. 77 00:04:10,040 --> 00:04:13,640 E também tem lugar decimal valores, os unidades, dezenas, centenas, e milhares 78 00:04:13,640 --> 00:04:15,910 que todos nós pode lembrar da escola de classe. 79 00:04:15,910 --> 00:04:18,050 E hexadecimal há exceção aqui, realmente. 80 00:04:18,050 --> 00:04:22,660 Ele também tem valores de lugar, mas em vez de ser potências de 2 ou potências de 10, 81 00:04:22,660 --> 00:04:25,050 eles são potências de 16. 82 00:04:25,050 --> 00:04:29,410 >> Assim, vemos um número como este nós sabe muito claramente que é 397, certo? 83 00:04:29,410 --> 00:04:33,420 Bem, se nós vemos um número como este, sabemos que isso não é 397 mais. 84 00:04:33,420 --> 00:04:36,730 Este é o hexadecimal número de três 9-7. 85 00:04:36,730 --> 00:04:39,680 Não é 397, isto significa algo diferente, 86 00:04:39,680 --> 00:04:44,180 porque nós estamos usando os poderes de 16 como todo dos nossos valores lugar, em vez de poderes 87 00:04:44,180 --> 00:04:45,560 de 10. 88 00:04:45,560 --> 00:04:50,570 Na verdade, os valores de lugar aqui faria ser o lugar mais, o lugar sixteens, 89 00:04:50,570 --> 00:04:55,080 eo lugar de dois-duzentos e cinquenta e seis, que corresponde à nossa idéia de um queridos 90 00:04:55,080 --> 00:04:59,180 lugar, dezenas lugar, e uma centenas lugar, se o número foi de 397. 91 00:04:59,180 --> 00:05:03,620 Mas já que é 0x 397, temos um lugar queridos lugar, sixteens, 92 00:05:03,620 --> 00:05:05,780 e um lugar de dois-duzentos e cinquenta e seis. 93 00:05:05,780 --> 00:05:09,460 Ou, um 16 a 0 o lugar, que é um. 94 00:05:09,460 --> 00:05:12,420 A 16 de primeiro lugar de energia, 16. 95 00:05:12,420 --> 00:05:17,080 A 16 quadrado lugar, 256, e assim por diante, e assim por diante, e assim por diante. 96 00:05:17,080 --> 00:05:24,400 Então esse número é realmente 3 vezes 16 quadrado, mais 9 vezes 16, mais sete. 97 00:05:24,400 --> 00:05:28,980 Eu não fazer a matemática aqui, mas não é 397, é muito, muito maior do que isso. 98 00:05:28,980 --> 00:05:34,050 >> Da mesma forma, poderíamos ter adc 0x, bem que é um vezes 16 ao quadrado. 99 00:05:34,050 --> 00:05:38,220 Ou se traduzir isso para a nossa noção de números decimais, que é 10 vezes 100 00:05:38,220 --> 00:05:44,160 16 ao quadrado, além d vezes 16, ou mais de 13 vezes 16. 101 00:05:44,160 --> 00:05:47,410 E não se preocupe se você não tiver memorizado que d é 13, ou qualquer coisa assim, 102 00:05:47,410 --> 00:05:49,201 não há muitos destes dígitos de letra 103 00:05:49,201 --> 00:05:52,820 e ele vai se tornar intuitivo muito rapidamente. 104 00:05:52,820 --> 00:05:59,800 Então, novamente este é 10 vezes 16 ao quadrado, além de 13 vezes 16, mais 12 vezes 1. 105 00:05:59,800 --> 00:06:03,640 Adc Então 0x. 106 00:06:03,640 --> 00:06:07,750 >> Então, como eu disse, todos os grupo de 4 dígitos binários 107 00:06:07,750 --> 00:06:10,000 corresponde a uma única dígito hexadecimal, 108 00:06:10,000 --> 00:06:12,570 e por isso é realmente muito fácil de mudar frente e para trás 109 00:06:12,570 --> 00:06:14,690 entre hexadecimal e binário. 110 00:06:14,690 --> 00:06:18,310 Se você tem essa longa seqüência de dígitos binários, tudo que você precisa fazer 111 00:06:18,310 --> 00:06:21,320 é começar agrupando-direita para a esquerda como grupos de 4. 112 00:06:21,320 --> 00:06:26,550 E então você pode consolidar -los em números hexadecimais, 113 00:06:26,550 --> 00:06:30,910 limitando severamente o número de dígitos você tem que processar mentalmente. 114 00:06:30,910 --> 00:06:33,680 Em vez de 32 0 e 1s, como veremos em um segundo, 115 00:06:33,680 --> 00:06:37,630 você pode ser capaz de obtê-lo para baixo a apenas 8 dígitos hexadecimais, um monte 116 00:06:37,630 --> 00:06:39,200 mais concisa. 117 00:06:39,200 --> 00:06:43,500 >> Os gráficos de alguns slides volta vai ajudá-lo a descobrir esse mapeamento, 118 00:06:43,500 --> 00:06:45,660 embora, novamente você vai memorizá-lo muito rapidamente. 119 00:06:45,660 --> 00:06:47,320 Nós vamos passar por um exemplo agora. 120 00:06:47,320 --> 00:06:51,507 Então, se temos um número como este, este realmente grande número binário, 121 00:06:51,507 --> 00:06:53,340 ou o que parece ser um grande número binário. 122 00:06:53,340 --> 00:06:56,260 E a razão de eu dizer isso, é apenas assim-- é um gigante, certo? 123 00:06:56,260 --> 00:06:58,959 Há tantos 0 e 1 de lá. 124 00:06:58,959 --> 00:07:01,000 Mas nós provavelmente não fazer realmente ter uma noção do que 125 00:07:01,000 --> 00:07:02,870 a magnitude deste número realmente é. 126 00:07:02,870 --> 00:07:06,150 Não temos qualquer ideia do que corresponderia a uma casa decimal. 127 00:07:06,150 --> 00:07:09,744 E, de fato, não vai mesmo ver o que corresponde a em decimal no momento. 128 00:07:09,744 --> 00:07:11,660 Poderíamos ser capazes de expressar isto de uma maneira que 129 00:07:11,660 --> 00:07:15,640 nos daria um pouco mais de informação sobre o quão grande esse número é. 130 00:07:15,640 --> 00:07:17,270 >> Então vamos para o processo de conversão. 131 00:07:17,270 --> 00:07:19,311 A primeira coisa que precisamos a fazer é que queremos grupo 132 00:07:19,311 --> 00:07:23,050 esses dígitos para fora em grupos de 4, a partir da direita 133 00:07:23,050 --> 00:07:24,120 e trabalhar à esquerda. 134 00:07:24,120 --> 00:07:27,260 Acontece que existem 32 dígitos aqui, o que significa que temos 135 00:07:27,260 --> 00:07:33,210 uma pausa agradável limpo de 8 grupos de quatro. 136 00:07:33,210 --> 00:07:36,200 Lembre-se que cada grupo de 4 aqui, única corresponde 137 00:07:36,200 --> 00:07:37,760 a um dígito hexadecimal. 138 00:07:37,760 --> 00:07:42,080 Então, vamos começar de novo a construir a nossa número da direita e trabalhando esquerda. 139 00:07:42,080 --> 00:07:44,890 Bem, o que é 1101? 140 00:07:44,890 --> 00:07:49,220 Bem, fazer a matemática para fora na nossa cabeça, temos um no lugar oitos, a 1 141 00:07:49,220 --> 00:07:54,310 no lugar de quatro, um 0 nos pares lugar, e um 1 na casa das unidades. 142 00:07:54,310 --> 00:07:58,820 Isso é 8 + 4 + 1, que saberíamos como 13. 143 00:07:58,820 --> 00:08:02,400 Mas nós provavelmente não iria escrever em 13º, porque estamos a trabalhar com hexadecimal. 144 00:08:02,400 --> 00:08:07,982 Nós precisamos convertê-lo para o hexadecimal equivalente a 13, o qual é d. 145 00:08:07,982 --> 00:08:12,940 >> 0011, bem, isso é um 0 no lugar oitos, um 0 em quatro lugar, 146 00:08:12,940 --> 00:08:15,190 a 1 no lugar dois, e um 1 na casa das unidades. 147 00:08:15,190 --> 00:08:16,880 Isso é 3. 148 00:08:16,880 --> 00:08:20,180 Quero dizer continuar fazendo isso novamente, temos aqui 9. 149 00:08:20,180 --> 00:08:23,850 E depois de 11, mas isso é b, recall. 150 00:08:23,850 --> 00:08:30,570 2, 10-- ou um-- 6, e 4. 151 00:08:30,570 --> 00:08:34,669 E assim que muito grande cadeia de 0 e 1. de topo 152 00:08:34,669 --> 00:08:38,549 é mais concisamente expressos em hexadecimal como 0x 46a2b93d. 153 00:08:38,549 --> 00:08:42,309 154 00:08:42,309 --> 00:08:45,870 >> Bem, OK, nós aprendemos um novo habilidade legal, qual é o ponto? 155 00:08:45,870 --> 00:08:49,560 Nós não poderia usar isso o tempo, como vamos ver em breve, 156 00:08:49,560 --> 00:08:52,370 usamos hexadecimal bastante muito como programadores. 157 00:08:52,370 --> 00:08:55,060 Não necessariamente para o propósito de fazer matemática com ele, 158 00:08:55,060 --> 00:08:58,470 mas porque um monte de vezes endereços de memória em nosso sistema 159 00:08:58,470 --> 00:09:00,440 são representados em hexadecimal. 160 00:09:00,440 --> 00:09:04,390 É realmente uma maneira concisa para expressar caso contrário pesados, números binários. 161 00:09:04,390 --> 00:09:06,440 E assim, mais uma vez, você pode não-- você provavelmente está 162 00:09:06,440 --> 00:09:07,640 não vai fazer qualquer matemática com ele, você não está 163 00:09:07,640 --> 00:09:09,848 vai ser multiplicando números hexadecimais em conjunto, 164 00:09:09,848 --> 00:09:11,770 ou fazer qualquer coisa estranha assim. 165 00:09:11,770 --> 00:09:16,120 Mas é uma habilidade útil para ter para que você possa expressar e entender 166 00:09:16,120 --> 00:09:23,290 memória endereços e outras usando formas de dados em C. 167 00:09:23,290 --> 00:09:26,240 >> Eu sou Doug Lloyd, este é CS50. 168 00:09:26,240 --> 00:09:28,028