1. Codificación octal
Hablando de codificaciones... Como sabes, en la vida cotidiana usamos la notación decimal : todos nuestros números se representan usando 10 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Hay 10 números, por lo que el sistema se llama decimal.
Pero los programadores son grandes inventores. Inmediatamente se les ocurrieron codificaciones que usan una cantidad diferente de símbolos. Por ejemplo, 16, 8 y 2.
La codificación alternativa que usa 8 símbolos es la más fácil: simplemente suelte el 8 y el 9 y obtendrá una codificación octal (el sistema de numeración octal ).
Y sí, puede usar el sistema octal para especificar literales numéricos. Si, por supuesto, realmente lo necesitas. Es más fácil de lo que parece. Solo necesita escribir el número 0 antes del número.
En otras palabras, Java trata cualquier literal entero que comience con 0 como un valor octal.
Ejemplos:
Código | notas |
---|---|
|
x es 13: 1*8+5 |
|
x es 21: 2*8+5 |
|
x es 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
Esto no compilará: 8 no es uno de los símbolos usados en la codificación octal. |
Es poco probable que necesite escribir números octales en su código, pero debe saber cuáles son. Después de todo, tendrás que leer el código escrito por otros. Y como se mencionó anteriormente, los programadores son grandes inventores.
Bueno, recuerda que no puedes simplemente escribir 0 delante de cada número.
2. Codificación binaria
La codificación binaria es aún más interesante. Si octal tiene solo los dígitos 0-7, entonces binario tiene solo 0 y 1. ¿Por qué es necesaria esta codificación?
Esto tiene todo que ver con la estructura interna de una computadora. Todo en una computadora funciona con electricidad, y resulta que la forma más eficiente de almacenar y transmitir algo usando electricidad es usar dos estados: o no hay electricidad en el cable (cero) y hay electricidad (uno).
Este es el origen de la popularidad del sistema numérico binario.
En principio, no se usa muy a menudo en Java: Java se considera un lenguaje de alto nivel, completamente abstraído del hardware en el que se ejecuta. De hecho, ¿realmente le importa qué formato se utiliza para almacenar y procesar datos dentro de una computadora?
Pero en las últimas décadas, los programadores han llegado a amar la codificación binaria (y otras codificaciones basadas en ella). Como resultado, Java tiene operadores que toman números binarios como entradas. Y la precisión de los números de coma flotante depende de su representación binaria.
Básicamente, es mejor para usted saber acerca de esta codificación que no saberlo.
Y como fue el caso con la codificación octal, Java tiene una forma de codificar literales utilizando el sistema binario. Es decir, literales compuestos solo por 0 y 1. Para que el compilador de Java entienda que el código contiene un literal numérico codificado en binario en lugar de simplemente un número decimal que consta de ceros y unos, todos los literales binarios se identifican con el prefijo 0b (la 'b' proviene de la palabra binario) .
Ejemplos:
Código | notas |
---|---|
|
х es 4: 1*4+0*2+0 |
|
х es 15: 1*8+1*4+1*2+1 |
|
х es 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 +1*2 2 +1*2+1; |
|
Esto no compilará: 2 no es uno de los símbolos utilizados en la codificación binaria. |
3. Codificación hexadecimal
Además de las codificaciones octales y binarias, los literales también se pueden escribir en hexadecimal. Esta es una codificación muy popular.
Esto se debe a que, aunque la notación binaria es lo más parecida posible a cómo se almacenan realmente los números, es demasiado difícil para los humanos trabajar de manera efectiva con dichos números: en binario, el número un millón contiene 20 dígitos, no 7.
Es por eso que a los programadores se les ocurrió el sistema hexadecimal. Después de todo, 16 es 2 elevado a la cuarta potencia, por lo que exactamente 4 bits corresponden a un dígito hexadecimal. En términos generales, cada 4 bits ahora se pueden escribir como un solo dígito hexadecimal.
La codificación hexadecimal también tiene su propio prefijo único: 0x . Ejemplos:
Número decimal | notación binaria | notación hexadecimal |
---|---|---|
17 | 0b 0001 0001 | 0x 1 1 |
4 1 | 0b 0010 1 00 1 | 0x 2 9 |
85 | 0b 0101 0101 | 0x 5 5 |
256 | 0b 1 0000 0000 | 0x 1 0 0 |
Ok, dices, está bastante claro cómo obtuvimos el sistema octal: simplemente eliminamos los números 8 y 9, pero ¿dónde obtenemos los 6 símbolos adicionales para el sistema hexadecimal? ¡Me gustaria verlos!
Todo es sencillo. Las primeras 6 letras del alfabeto inglés se tomaron como los 6 símbolos faltantes: A (10), B (11), C (12), D (13), E (14), F (15).
Ejemplos:
notación hexadecimal | notación binaria | Número decimal |
---|---|---|
0x 1 | 0b 0000 0001 | 1 |
0x9 _ | 0b 0000 1001 | 9 |
0x A | 0b 0000 1010 | 10 |
0xB _ | 0b 0000 1011 | 11 |
0xC _ | 0b 0000 1100 | 12 |
0xD _ | 0b 0000 1101 | 13 |
0x mi | 0b 0000 1110 | 14 |
0xF _ | 0b 0000 1111 | 15 |
0x 1F _ | 0b 0001 1111 | 31 |
0x AF _ | 0b 1010 1111 | 175 |
0x F F | 0b 1111 1111 | 255 |
0x F F F | 0b 1111 1111 1111 | 4095 |
4. Cómo convertir un número de hexadecimal
Convertir un número de hexadecimal a decimal es muy fácil. Digamos que tienes el número 0 x A F C F . ¿Cuánto es eso en decimal?
Primero, tenemos un sistema numérico posicional, lo que significa que la contribución de cada dígito al número total aumenta en un factor de 16 a medida que nos movemos de derecha a izquierda:
A * 16 3 + F * 16 2 + C * 16 1 + F
El símbolo A corresponde al número 10, la letra C corresponde al número 12 y la letra F representa quince. Obtenemos:
10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15
Elevando 16 a las distintas potencias que corresponden a los dígitos, obtenemos:
10 * 4096 + 15 * 256 + 12 * 16 + 15
Sumamos todo y obtenemos:
45007
Ya sabes cómo se almacena este número en la memoria:
0x A F C F
Pero ahora vamos a convertirlo a binario. En binario sería:
0b 1010 1111 1100 1111
Cada conjunto de cuatro bits corresponde exactamente a un carácter hexadecimal. Eso es muy conveniente. Sin ninguna multiplicación o exponenciación".
GO TO FULL VERSION