Notación para números binarios como 1000100B - 1

"¡Hola, amigo!"

"¡Hola, Bilaabo!"

"Quiero contarles un poco acerca de los diferentes sistemas de numeración".

"Ya has oído que la gente usa el sistema decimal. Estos son los datos principales de este sistema:

1)  Se usan 10 dígitos para escribir números: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  El número 543 significa 5 centenas + 4 decenas + 3 unidades.

"Esto es equivalente a escribir 5*100 + 4*10 + 3*1, que se puede escribir como 5*10 2 + 4*10 1 + 3*10 0 .

Tenga en cuenta que miles, centenas, decenas y unidades son potencias del número 10.

1) Uno es 10 elevado a cero.

2)  Diez es 10 elevado a la primera potencia.

3) Cien es 10 elevado a la segunda potencia.

4)  Mil es 10 en tercera potencia, etc.

"Sí. Lo tengo".

"Pero ahora imagina que solo tenemos 8 dígitos. Luego tenemos el sistema octal. Estos son sus datos principales:"

1)  Se usan 8 dígitos para escribir números: 0, 1, 2, 3, 4, 5, 6, 7.

2)  El número 543 8 significa 5*8 2 +4*8 1 +3*8 0 . En otras palabras, es 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Escribí 8 y 10 como subíndices para indicar cuántos dígitos se usan para representar el número.

"Creo que lo entiendo. Creo que podría convertir un número del sistema octal a decimal. Pero probablemente no podría hacerlo al revés".

"No es tan difícil. Imagina que necesitas usar varios camiones para mover un montón de arena. Tienes camiones de volteo, camiones ordinarios y camiones muy pequeños. Pero los camiones no pueden ir si no están llenos".

"¿Como lo harias?"

“Primero llenaba volquetes, ya que son los más grandes. Luego, cuando veía que no había suficiente arena para llenar el camión, cambiaba a los vehículos más pequeños. Y luego a los aún más pequeños”.

"En realidad es muy similar aquí. Intentemos convertir el número 355 10 nuevamente a octal".

"Primero, lo dividimos por 64 (8 2 ) y obtenemos 5 con un resto de 35. Esto significa que el primer dígito de nuestro número es 5. Luego dividimos el resto por 8 (8 1 ) y obtenemos 4 con un resto de 3. Por lo tanto, obtenemos el número 543 8 ".

"Por cierto, también puedes moverte en la otra dirección. Después de todo, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Nuestras decenas octales " y "centenas" deben dividirse por 8. Por lo tanto, el resto de la división por 8 serán nuestros dígitos octales".

"Primero, dividamos 355 entre 8. Obtenemos 44 con un resto de 3. Es decir, 355 = 44 * 8 + 3. Y 44 se puede representar como 5 * 8 + 4. Por lo tanto, 355 = (5 * 8 + 4)*8+3; Estos son nuestros dígitos: 5, 4, 3. El número que buscamos es 543 8 .

"Creo que lo entiendo, pero tendré que practicar un poco para entender todo por completo".

"La programación a menudo implica el uso de números con diferentes bases (es decir, la cantidad de dígitos utilizados en el sistema de numeración). Los más populares son 2, 8, 10, 16 y 64".

"Pero, ¿por qué es esto necesario? ¿Por qué necesitamos números representados por 2, 8, 16 o 64 dígitos?"

"Se trata de cómo funciona internamente el procesador. De manera muy simple, si la corriente fluye a través de un cable, decimos que su valor es 1; si no hay corriente, entonces su valor es 0. Todos los números se almacenan en celdas de memoria. Estos Las celdas tienen un diseño muy básico y solo pueden almacenar 0 o 1".

"Pero tal simplificación (solo 0 o 1) hizo posible que los elementos dentro del procesador y la memoria fueran muy pequeños. Los procesadores y módulos de memoria modernos incluyen miles de millones de elementos diferentes. Y su área a menudo no es más que un centímetro cuadrado".

"Vaya. Ahora lo sé".

"Ahora pasamos a los números binarios. Aquí tenemos lo mismo que con octal, solo que más fácil".

1)  Se usan 2 dígitos para escribir números: 0, 1.

2)  El número 101 2 significa 1*2 2 + 0*2 1 + 1*2 0 . En otras palabras, es 1*4+0*2+1*1 =4+1=51 10

"Sí. Lo recuerdo. Una celda, que puede tener un valor de 0 o 1, se llama bit. Pero no puede almacenar mucha información, por lo que se combinan en grupos de 8. Estos grupos se llaman bytes. "

"Exactamente. Un byte es un grupo de ocho bits. Puede almacenar los siguientes valores: 00000000, 00000001, ... 11111111. Estos valores corresponden a los números decimales 0,1, ... 255. Lo que nos da un total de 256 valores".

¿Cuál es el entero más grande en Java? O más bien, ¿cuál es su tipo?

"A long. A long consta de 8 bytes. Es decir, 64 bits. Puede almacenar valores desde -2 63 hasta 2 63 -1.

"Sí. No mencionaré cómo convertir números de decimal a binario o viceversa. De lo contrario, la lección sería demasiado larga".

"En cambio, hablemos un poco más sobre el sistema hexadecimal".

"Sí, es muy interesante. Para los sistemas binario y octal, simplemente nos deshicimos de los dígitos, comenzando con dos y ocho, respectivamente. Pero, ¿qué hacemos aquí? ¿Agregar nuevos dígitos?"

"¡Exactamente! Mira esto:"

1) Se usan 16 dígitos para escribir números: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) El número 543 16 significa 5*16 2 + 4*16 1 + 3*16 0 . En otras palabras, es 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Entonces, ¿acabamos de agregar letras como dígitos? O_o"

"Sí. ¿Y cuál es el problema? ¿Por qué inventar nuevos números cuando las letras funcionan perfectamente bien? Compruébalo:"

dígito hexadecimal valor decimal
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
mi 14
F 15

"Tampoco voy a hablar sobre la conversión de decimal a hexadecimal. Pero aquí hay un hecho interesante. Un dígito hexadecimal está representado por exactamente 4 bits, con valores de 0 a 15. Entonces, un byte se puede escribir con ocho dígitos binarios (0 o 1) o dos dígitos hexadecimales".

"Aquí hay un ejemplo:"

Número decimal Número binario número hexadecimal
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
dieciséis 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 f

"La representación hexadecimal se convierte fácilmente a binaria (y viceversa). Es por eso que la representación interna de bytes de un número rara vez se da en binario (usando 0 y 1) en la programación. Eso sería demasiado largo y difícil de entender. Notación hexadecimal es mucho más legible y compacto."

"Estoy de acuerdo. Incluso a mí me gustó".

"Por cierto, Java te permite escribir números en varios sistemas de numeración directamente en el código:"

Base Característica distintiva Ejemplos Números inválidos
2 0b  al principio del número 0b 00001111 0b 11111 2 1
8 0  al principio del número 0 1234343 0 12 8
10 Ninguno 95459 909 un
dieciséis 0x  al principio del número 0x 10ff 0x 1c _

"Excelente lección. Gracias, Bilaabo".