DOUG LLYOYD: números hexadecimales Así, como si necesitábamos otro número base derecho esquema? Bueno, la mayoría de las culturas occidentales, como usted probablemente está familiarizado, utilizar la base system-- decimal 10, para representar datos numéricos. Tenemos los dígitos 0, 1, 2, 3, 5, 6, 7,8,9. Y si tenemos que representar valores superiores a nueve, podemos combinar esos dígitos utilizando el concepto de valor posicional. Así que por 10, tenemos un 1 dígitos seguido de un 0 dígitos y que intuitivamente entendemos que lo que estamos haciendo no estamos multiplicando la primera 1 por 10, y luego añadiendo 0 para un total de 10. Computadoras hacer algo bonito similar, ya que probablemente esté familiarizado, con la base 2 system-- binario. La diferencia que exista que hay sólo 2 dígitos para trabajar con-- 0 y 1. Y para que nuestros valores de lugar, en lugar de ser uno, diez, cien, mil, ya que sería en el sistema decimal, son uno, dos, cuatro, ocho, y así sucesivamente. Aquí está la cosa, sin embargo, aquellos de 0 y 1, en especial de si estamos siendo los informáticos y estamos haciendo un montón de programación o trabajar con ordenadores, íbamos estar viendo un montón de números binarios. Y los de de 0 y 1 en las grandes cadenas puede ser muy difícil de analizar. No podemos mirar a una serie de 0 de 1 y de y necesariamente saber exactamente lo que es. Pero aún así es útil poder datos expresos de la misma manera que hace una computadora. Tenemos esta idea de la sistema hexadecimal, que es base 16, en lugar de la base 10 o la base 2. Lo que significa que tenemos 16 dígitos para trabajar con en lugar de 10 o 2. Y es una mucho más forma concisa de expresar información binaria en un sistema informático, es mucho más humano comprensible. Así que tenemos los dígitos Del 0 al 9, y luego también tenemos éstos adicional de seis digits-- una, b, c, d, e, y f, que representan 10, nuestra noción de 10, 11, 12, 13, 14 y 15, en decimal. A veces, por cierto, usted también ver éstos el pase de f como mayúscula a través de F, que es el como yo tiendo a hacerlo. Es sólo mi preferido estilo, pero tampoco está bien, ambos representan bastante lo mismo. ¿Por qué es fresco hexadecimal? ¿Por qué necesitamos para utilizar este otra base adicional? Ya tenemos 2 y 10, ¿por qué necesitamos 16? Bueno 16 es una potencia de 2, y así cada dígito hexadecimal, 0 a f, corresponde a un único ordenar, o disposición única de 4 dígitos binarios, 4 bits. Y así, en ese sentido, podemos expresar muy largos, números binarios y complejos en hexadecimal en una tanto de manera más concisa, sin perder información o tener que hacer conversiones particularmente engorrosos en esos números. Así que, como acabo de decir, cada dígito hexadecimal corresponde a un único disposición de 4 dígitos binarios. Así que la cadena binaria 0000 corresponde al dígito hexadecimal 0. 0110 corresponde al dígito hexadecimal 6. Y 1111 corresponde a hexadecimal dígitos f. Si usted está buscando en este gráfico, en particular si usted está buscando en el lado izquierdo de la tabla, ya se puede ver que hay una poco de un problema de ambigüedad aquí. Decimal 0 es más o menos indistinguible de hexadecimal 0, aparte del hecho de que es bajo una columna que dice hexadecimal. Pero probablemente no lo hará siempre tener esa columna allí. En general, cuando estamos expresando números en notación hexadecimal distinguir claramente desde la notación decimal, que por lo general les anteponemos con el prefijo 0x. 0x no significa nada en la realidad, es sólo una pista para nosotros como seres humanos que lo que estamos a punto de ver, oa punto de comenzar el análisis, es un número hexadecimal. Obviamente para los dígitos más altos a, b, c, d, y f, que corresponden 10-15 es bastante ambigua que es eso es un número hexadecimal. Y de hecho, cualquier hexadecimal número que tiene las letras en el mismo, es probablemente bastante obvio como un número hexadecimal. Pero, aún así, para la aras de la claridad, es siempre es una buena idea prefijo cada vez que referirse a un dígito hexadecimal como una número anteponiendo un 0x. Así, binario, como hemos Dicho esto, tiene valores de lugar. Ahí está el lugar de las unidades, un lugar de dos en dos, un lugar a cuatro patas, y un lugar ochos. Y decimal también tiene lugar los valores, las unidades, decenas, cientos y miles que todos podamos recordar desde la escuela primaria. Y hexadecimal hay excepción aquí, de verdad. También cuenta con valores de lugar, pero en lugar de ser potencias de 2 o potencias de 10, que son potencias de 16. Así que vemos una serie como esta nos bastante claramente sabe que es 397, ¿verdad? Bueno, si vemos una serie como esta, sabemos que esto no es 397 más. Este es el hexadecimal número tres-nueve-siete. No es 397, significa algo diferente, porque estamos utilizando potencias de 16 como todos de nuestros valores de lugar en lugar de poderes de 10. De hecho, los valores de lugar aquí haría ser el lugar de las unidades, el lugar sixteens, y el lugar de doscientos cincuenta y seis, que corresponden a nuestra idea de unos queridos lugar, decenas lugar, y unos cientos lugar, si el número era de 397. Pero ya que está 0x 397, tenemos un lugar, los sixteens lugar, y un lugar de doscientos cincuenta y seis. O bien, un 16 a la 0 lugar, que es 1. Un 16 para el primer lugar el poder, 16. Un 16 cuadrados lugar, 256, y así sucesivamente, y así sucesivamente, y así sucesivamente. Así que este número es realmente 3 veces 16 cuadrado, además de 9 veces 16, más 7. Yo no he hecho los cálculos aquí, pero no es 397, que es mucho, mucho más grande que eso. Del mismo modo, podríamos tener adc 0x, así que es un momento 16 al cuadrado. O si traducimos eso a nuestra noción de los números decimales, eso es 10 veces 16 al cuadrado, más d veces 16 o más 13 veces 16. Y no te preocupes si no has aprendido de memoria que d es 13, ni nada de eso, no hay demasiados de estos dígitos de letras y se convertirá en intuitiva con bastante rapidez. Así que de nuevo esto es 10 veces 16 al cuadrado, además 13 veces 16, más 12 veces 1. Adc Así 0x. Así que, como he dicho, cada grupo de 4 dígitos binarios corresponde a un solo dígito hexadecimal, y lo que es realmente muy fácil cambiar de ida y vuelta entre hexadecimal y binario. Si usted tiene esta larga cadena de dígitos binarios, lo único que tienen que hacer es empezar a agruparlos derecho a izquierda como grupos de 4. Y entonces usted puede consolidar en números hexadecimales, limitando severamente el número de dígitos que tiene que procesar mentalmente. En lugar de 32 de 0 y de 1, como veremos en un segundo, es posible que pueda conseguirlo abajo a sólo 8 dígitos hexadecimales, mucho más conciso. Las tablas de algunas diapositivas espalda se le ayudará a averiguar este mapeo, aunque, de nuevo Usted memorizarlo con bastante rapidez. Vamos a ir a través de un ejemplo en este momento. Así que si tenemos una serie como esta, esto realmente gran número binario, o lo que parece ser un número binario grande. Y la razón por la que digo eso, es Sólo así que-- es un gigante, ¿no? Hay tantos de 0 y 1 de allí. Pero probablemente no lo hacemos realmente tienen un sentido de lo la magnitud de este número es en realidad. No tenemos idea de lo que correspondería a un decimal. Y, de hecho, no vamos a ver hasta qué corresponde en decimal en este momento. Podríamos ser capaces de expresar esto de una manera que nos daría algo más de información acerca de lo grande que es este número. Así que vamos a ir a ese proceso de conversión. La primera cosa que necesitamos que hacer es que queremos grupo estos dígitos hacia fuera en grupos de 4, comenzando por la derecha y trabajando hacia la izquierda. Sucede que hay 32 dígitos aquí, lo que significa que tenemos un buen descanso limpia de 8 grupos de 4. Recuerde que cada grupo de 4 aquí, singularmente corresponde a un dígito hexadecimal. Así que vamos a empezar de nuevo la construcción de nuestra número de la derecha, y de trabajo se fue. Bueno lo que es 1101? Bueno hacemos las matemáticas en nuestra cabeza, tenemos 1 en el lugar ochos, un 1 en el lugar cuatro patas, un 0 en las parejas lugar, y un 1 en el lugar de las unidades. Eso es 8 más 4 más 1, que sabríamos como 13. Pero probablemente no escribiríamos 13 hacia fuera, porque estamos trabajando con hexadecimal. Tenemos que convertirlo al formato hexadecimal equivalente de 13, que es d. 0011, así que es un 0 en el lugar ochos, un 0 en cuatro patas lugar, un 1 en el lugar de dos en dos, y un 1 en el lugar de las unidades. Eso es 3. Me refiero a seguir haciendo esto una vez más, que tenemos aquí 9. Y luego 11, pero eso es b, el recuerdo. 2, 10-- o A-- 6 y 4. Y para que gran cadena de de 0 y 1 de la parte superior de se expresa de forma más concisa en hexadecimal como 0x 46a2b93d. Bueno, está bien, hemos aprendido una nueva habilidad fresco, ¿qué sentido tiene? Puede que no utilice esto todo el tiempo, como vamos a ver pronto, usamos hexadecimal bastante mucho como programadores. No necesariamente para el propósito de hacer matemáticas con él, sino porque muchas veces direcciones de memoria en nuestro sistema están representados en hexadecimal. Es una manera muy concisa de expresar de lo contrario, números binarios engorroso. Y así, una vez más, es posible que no-- usted está probablemente No vamos a hacer ninguna matemáticas con ella, usted no está va a ser la multiplicación números hexadecimales juntos, o hacer cualquier extraño como eso. Pero es una habilidad útil tener para que pueda expresar y comprender direcciones de memoria, y otra formas de utilización de los datos en C. Soy Doug Lloyd, esto es CS50.