DOUG LLYOYD: Então números hexadecimais, como se precisássemos de outro número base
direito esquema?
Bem, a maioria das culturas ocidentais, como você provavelmente está familiarizado,
usar a base system-- decimal 10, para representar os dados numéricos.
Temos os dígitos 0, 1, 2, 3, 5, 6, 7,8,9.
E se é preciso representar valores superiores a nove,
nós podemos combinar esses dígitos utilizando a noção de valor local.
Portanto, para 10, temos um 1 dígitos seguido de um dígito 0
e nós intuitivamente entender que o que estamos fazendo
há que estamos multiplicando o primeiro 1 por 10,
e, em seguida, adição de 0 durante um total de 10.
Computadores fazer algo bonito semelhante, como você provavelmente está familiarizado,
com a base system-- binário 2.
A diferença não ser que existem apenas dois dígitos
para trabalhar com-- 0 e 1.
E assim os nossos valores de lugar, em vez de ser um,
dez, cem, mil, como eles seria no sistema decimal,
são um, dois, quatro, oito, e assim por diante.
Aqui está a coisa, porém, aqueles 0 e 1, especialmente de
se estamos sendo cientistas da computação e estamos fazendo um monte de programação
ou trabalhar com computadores, foram indo estar vendo um monte de números binários.
E aquelas de 0 e 1 no grandes cadeias pode ser muito difícil de analisar.
Não podemos simplesmente olhar para uma série de 0 e 1 e necessariamente saber
exatamente o que é.
Mas ainda é útil para ser capaz dados expressos da mesma forma
que um computador faz.
Nós temos essa noção da sistema hexadecimal, que é
base 16, em vez de base 10 ou base 2.
O que significa que temos 16 dígitos a trabalhar com o em vez de 10 ou 2.
E é uma muito mais forma concisa para expressar
informação binária num sistema de computador, é muito mais humana compreensível.
Portanto, temos os dígitos De 0 a 9, e depois
temos também estes extras seis digits-- um, b, c, d, e, f, as quais representam 10,
nossa noção de 10, 11, 12, 13, 14 e 15, em decimal.
Às vezes, pelo caminho, você também vai veja estes um meio de F como capital de um
a F, que é a maneira que eu tendem a fazê-lo.
É apenas o meu preferido estilo, mas de qualquer é bom,
ambos representam bonita a mesma coisa.
>> Então, por que é legal hexadecimal?
Por que precisamos usar este outra base adicional?
Nós já temos 2 e 10, por que precisamos de 16?
Bem 16 é uma potência de 2, e assim cada dígito hexadecimal, de 0 a f,
corresponde a uma única ordenação, ou arranjo original
de 4 dígitos binários, 4 bits.
E então, nesse sentido, podemos expressar , números complexos, binários muito longas
em hexadecimal numa muito maneira mais concisa,
sem perda de informações ou ter que fazer conversões particularmente pesados
esses números.
>> Então, como eu disse, cada dígito hexadecimal
corresponde a uma única arranjo de 4 dígitos binários.
Assim, a cadeia binária 0000 corresponde ao hexadecimal dígitos 0.
0110 corresponde a 6 dígitos hexadecimal.
E 1111 corresponde para hexadecimal dígitos f.
Se você está olhando este gráfico, particularmente
se você está olhando para o lado esquerdo do gráfico,
você já pode ver que há uma pouco de um problema de ambigüidade aqui.
Decimal 0 é muito bonito indistinguíveis de hexadecimal 0,
além do fato de que ele está sob uma coluna que diz hexadecimal.
>> Mas nós provavelmente não vai sempre que tem ali coluna.
Geralmente, quando estamos expressando números em notação hexadecimal
distinguir claramente los de notação decimal,
nós geralmente prefixo-los com o prefixo 0x.
0x significa nada, na realidade, é apenas uma pista para nós como seres humanos
que o que estamos prestes a ver, ou prestes a iniciar a análise,
é um número hexadecimal.
Obviamente, para os dígitos mais elevados, b, c, d, e, f, o que corresponde a 10-15
é bastante inequívoca que é que é um número hexadecimal.
E, de fato, qualquer hexadecimal número que tem cartas na mesma,
é provavelmente bastante óbvio como um número hexadecimal.
Mas, ainda assim, para o razões de clareza, é
sempre uma boa idéia prefixar cada vez que você
referem-se a um dígito como hexadecimal número prefixando um 0x.
>> Então, binário, como nós disse, tem valores de lugar.
Há o lugar queridos, um lugar dois, um lugar de quatro, e um lugar oitos.
E também tem lugar decimal valores, os unidades, dezenas, centenas, e milhares
que todos nós pode lembrar da escola de classe.
E hexadecimal há exceção aqui, realmente.
Ele também tem valores de lugar, mas em vez de ser potências de 2 ou potências de 10,
eles são potências de 16.
>> Assim, vemos um número como este nós sabe muito claramente que é 397, certo?
Bem, se nós vemos um número como este, sabemos que isso não é 397 mais.
Este é o hexadecimal número de três 9-7.
Não é 397, isto significa algo diferente,
porque nós estamos usando os poderes de 16 como todo dos nossos valores lugar, em vez de poderes
de 10.
Na verdade, os valores de lugar aqui faria ser o lugar mais, o lugar sixteens,
eo lugar de dois-duzentos e cinquenta e seis, que corresponde à nossa idéia de um queridos
lugar, dezenas lugar, e uma centenas lugar, se o número foi de 397.
Mas já que é 0x 397, temos um lugar queridos lugar, sixteens,
e um lugar de dois-duzentos e cinquenta e seis.
Ou, um 16 a 0 o lugar, que é um.
A 16 de primeiro lugar de energia, 16.
A 16 quadrado lugar, 256, e assim por diante, e assim por diante, e assim por diante.
Então esse número é realmente 3 vezes 16 quadrado, mais 9 vezes 16, mais sete.
Eu não fazer a matemática aqui, mas não é 397, é muito, muito maior do que isso.
>> Da mesma forma, poderíamos ter adc 0x, bem que é um vezes 16 ao quadrado.
Ou se traduzir isso para a nossa noção de números decimais, que é 10 vezes
16 ao quadrado, além d vezes 16, ou mais de 13 vezes 16.
E não se preocupe se você não tiver memorizado que d é 13, ou qualquer coisa assim,
não há muitos destes dígitos de letra
e ele vai se tornar intuitivo muito rapidamente.
Então, novamente este é 10 vezes 16 ao quadrado, além de 13 vezes 16, mais 12 vezes 1.
Adc Então 0x.
>> Então, como eu disse, todos os grupo de 4 dígitos binários
corresponde a uma única dígito hexadecimal,
e por isso é realmente muito fácil de mudar frente e para trás
entre hexadecimal e binário.
Se você tem essa longa seqüência de dígitos binários, tudo que você precisa fazer
é começar agrupando-direita para a esquerda como grupos de 4.
E então você pode consolidar -los em números hexadecimais,
limitando severamente o número de dígitos você tem que processar mentalmente.
Em vez de 32 0 e 1s, como veremos em um segundo,
você pode ser capaz de obtê-lo para baixo a apenas 8 dígitos hexadecimais, um monte
mais concisa.
>> Os gráficos de alguns slides volta vai ajudá-lo a descobrir esse mapeamento,
embora, novamente você vai memorizá-lo muito rapidamente.
Nós vamos passar por um exemplo agora.
Então, se temos um número como este, este realmente grande número binário,
ou o que parece ser um grande número binário.
E a razão de eu dizer isso, é apenas assim-- é um gigante, certo?
Há tantos 0 e 1 de lá.
Mas nós provavelmente não fazer realmente ter uma noção do que
a magnitude deste número realmente é.
Não temos qualquer ideia do que corresponderia a uma casa decimal.
E, de fato, não vai mesmo ver o que corresponde a em decimal no momento.
Poderíamos ser capazes de expressar isto de uma maneira que
nos daria um pouco mais de informação sobre o quão grande esse número é.
>> Então vamos para o processo de conversão.
A primeira coisa que precisamos a fazer é que queremos grupo
esses dígitos para fora em grupos de 4, a partir da direita
e trabalhar à esquerda.
Acontece que existem 32 dígitos aqui, o que significa que temos
uma pausa agradável limpo de 8 grupos de quatro.
Lembre-se que cada grupo de 4 aqui, única corresponde
a um dígito hexadecimal.
Então, vamos começar de novo a construir a nossa número da direita e trabalhando esquerda.
Bem, o que é 1101?
Bem, fazer a matemática para fora na nossa cabeça, temos um no lugar oitos, a 1
no lugar de quatro, um 0 nos pares lugar, e um 1 na casa das unidades.
Isso é 8 + 4 + 1, que saberíamos como 13.
Mas nós provavelmente não iria escrever em 13º, porque estamos a trabalhar com hexadecimal.
Nós precisamos convertê-lo para o hexadecimal equivalente a 13, o qual é d.
>> 0011, bem, isso é um 0 no lugar oitos, um 0 em quatro lugar,
a 1 no lugar dois, e um 1 na casa das unidades.
Isso é 3.
Quero dizer continuar fazendo isso novamente, temos aqui 9.
E depois de 11, mas isso é b, recall.
2, 10-- ou um-- 6, e 4.
E assim que muito grande cadeia de 0 e 1. de topo
é mais concisamente expressos em hexadecimal como 0x 46a2b93d.
>> Bem, OK, nós aprendemos um novo habilidade legal, qual é o ponto?
Nós não poderia usar isso o tempo, como vamos ver em breve,
usamos hexadecimal bastante muito como programadores.
Não necessariamente para o propósito de fazer matemática com ele,
mas porque um monte de vezes endereços de memória em nosso sistema
são representados em hexadecimal.
É realmente uma maneira concisa para expressar caso contrário pesados, números binários.
E assim, mais uma vez, você pode não-- você provavelmente está
não vai fazer qualquer matemática com ele, você não está
vai ser multiplicando números hexadecimais em conjunto,
ou fazer qualquer coisa estranha assim.
Mas é uma habilidade útil para ter para que você possa expressar e entender
memória endereços e outras usando formas de dados em C.
>> Eu sou Doug Lloyd, este é CS50.