Cuando empecé a estudiar programación, una de mis principales dudas era: "¿cómo puede la máquina entender las instrucciones de un lenguaje?" O me preguntaba: ""¿Cómo pueden los circuitos, el procesador y la memoria convertir algunas líneas de código en un programa o aplicación móvil?" ¿Alguna vez te has hecho esta pregunta?
Para entender un poco mejor, investigué sobre el tema y en las primeras clases de la universidad me encontré con el llamado sistema binario. Ahora estarás pensando: "Ah, entonces fue ahí donde las cosas comenzaron a tener más sentido". La respuesta es "NO!"
¿Cómo? Sí, te lo explico... no tuvo sentido, porque en realidad todo se volvió muy confuso y casi me explota la cabeza tratando de calcular la conversión de números binarios en papel. Ante esta situación, hice lo que cualquier persona haría: investigué en Google y estudié en Alura xD.
Acompáñame y comprenderás qué son los números binarios. ¡Vamos allá!
Sabemos que los números forman parte de nuestro día a día y lidiamos con ellos desde que nos despertamos hasta que nos dormimos. Como el precio de la comida, o incluso la cantidad de horas que pasas frente a tu computadora en un juego online.
Con los números es posible representar muchas cosas y también convertir estas representaciones numéricas en información, o incluso constituir una forma de comunicación (puede ser un número de teléfono, dirección, cuenta bancaria, entre otros ejemplos).
Piensa conmigo: "Si nosotros, los seres humanos, usamos números para diferentes abstracciones del mundo real, ¿por qué sería diferente con las máquinas?"
Por lo tanto, tiene sentido construir máquinas o soluciones de acuerdo a nuestra comprensión de la realidad, es decir, que tengan alguna conexión con nuestra forma de organizar el mundo real, y por eso también usamos números para dar instrucciones a las computadoras.
Por cierto, ahora entiendo que nos comunicamos con las máquinas a través de números. Pero... ¿las máquinas calculan los números de la misma manera que aprendemos en la escuela?
Ahora debes haber notado un detalle muy importante. Usamos 10 dígitos, los números 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 para crear, cuantificar o incluso organizar cualquier cosa. Se llama sistema decimal, son números que tienen base 10 y su clasificación está relacionada con la posición que ocupan.
¿Te parece complicado ahora? Veámoslo desde otro punto de vista.
Observemos el número 12 en decimal:
Para formar el decimal 12, es necesario multiplicar cada dígito por 10 elevado a su posición (el 2 está en la posición 0 y el 1 está en la posición 1). Después de eso, sumamos los factores y obtenemos su valor decimal.
A veces, al mirar los números, el cálculo no parece tener mucho sentido. Veamos de otra manera:
Creo que ahora podemos visualizarlo mejor, ¿no? Para las computadoras, la formación del patrón numérico es muy similar. Sin embargo, las máquinas entienden los números en un sistema binario.
El sistema binario funciona de la misma manera que el decimal. Sin embargo, el decimal tiene 10 dígitos como base, y el binario solo tiene dos dígitos. La regla de formación es la misma: cada dígito es su valor multiplicado por 2 elevado a su posición en el número total menos uno. Después de calcular el valor de cada dígito, simplemente súmalos para obtener el valor final en decimal. ¿Veamos un ejemplo práctico?
Ya tenemos el número 12 en decimal, pero hay una representación del mismo en binario, y podemos obtener esta información convirtiendo los valores decimales a código binario. Veamos el siguiente diagrama para entender cómo funciona:
Primero dividimos el decimal 12 por 2, y su resultado es 6. ¿Correcto? "Está bien, pero ¿qué hay de ese 0 allí abajo?" El número 0 es el resto de la división, es lo que queda. Entonces necesitamos dividir todo el número hasta que no haya más unidades divisibles. El resto de la división corresponde al número binario, solo necesitamos invertir el orden y 12 en binario es igual a 1100.
Para comprender mejor este punto, necesitamos volver un poco la mirada hacia la historia de la computación.. En las computadoras de uso general, más cercanas a las computadoras actuales (podemos decir que son como el tatarabuelo de tu notebook o celular), la programación se realizaba con la conexión directa entre unidades físicas que enviaban señales eléctricas. Estas unidades físicas eran válvulas, y había que trabajar manualmente para enviar las instrucciones, encendiendo y apagando para enviar la información.
La ENIAC (Electronic Numerical Integrator and Computer, en español, computadora integradora numérica electrónica) es un ejemplo de estas computadoras de uso general que necesitaban ser encendidas y apagadas manualmente para ser programadas.
Sin embargo, la ENIAC era una máquina decimal y funcionaba con una memoria de 20 "acumuladores" que guardaban un número decimal de 10 dígitos en cada unidad. Había un anillo de 10 válvulas que representaba cada dígito y cuando una válvula estaba en el estado ENCENDIDO, representaba uno de esos 10 dígitos. Así se hacían los cálculos, en medio de la conexión o desconexión de cables y un enredo de conexiones entre interruptores.
Podemos ver que programar no era tan fácil, ¡requería esfuerzo físico y mental! ¿Te imaginas: programador bodybuilder?
Debido a estas características, era difícil trabajar y encontrar mano de obra para operar computadoras como la ENIAC. En este sentido, uno de los consultores del proyecto ENIAC fue el matemático Von Neumann, quien imaginó una forma de facilitar el proceso de programación con la propuesta de un nuevo programa informático almacenado a mediados de la década de 1940. La EDVAC (Electronic Discrete Variable Automatic Computer, en traducción libre, calculadora electrónica automática de variable discreta) y más tarde el IAS (las siglas vienen del nombre del instituto de Princeton, Institute for Advanced Study - Instituto de estudios avanzados) combinaron una arquitectura que también optimizó el procesamiento de datos.
¿Cuál es la relación entre esto y el código binario? ¿Cómo transferir la información del sistema binario a la máquina?, o mejor dicho, ¿cómo entender las computadoras en el sistema binario?
Matemáticos como Von Neumann y Alan Turing se apropiaron de conceptos de Leibniz (sistema de numeración binaria) y George Boole (álgebra booleana), y los aplicaron en sus estudios sobre arquitectura de computadoras y criptografía, trabajos que forman la base de la computación actual. De esta forma, se puede observar que el sistema binario no fue inventado para las computadoras o es algo exclusivo de la computación, sino que su aplicación en el contexto de las computadoras, la conversión de binario a decimal que realizan las máquinas y la codificación es una combinación de arquitectura computacional y lógica matemática.
En este sentido, es muy importante entender que las instrucciones necesitan ser procesadas por una máquina que está formada por circuitos y componentes electrónicos (muy diferente al ser humano, que puede recibir diferentes estímulos y procesar información de manera compleja). Junto con la segunda generación de computadoras y transistores (¡adios, válvulas!), esto genera algunas "limitaciones" ya que las máquinas identifican los estados de acuerdo con las señales eléctricas, que son apagado y encendido, nuestro 0 y 1, o simplemente el sistema binario (¡ta-da!).
Entonces, ¿las máquinas solo funcionan con el sistema binario, solo 01, encendido o apagado? La respuesta es "sí" y "no", centrémonos ahora en el código binario...
Como vimos, el decimal tiene 10 símbolos para representar números infinitos, los números binarios tienen base 2, es decir, dos dígitos que también hacen combinaciones infinitas y pueden representar un sinfín de cosas solo con el 0 y 1. ¡Cada letra de este artículo, todos los píxeles de los gifs e imágenes estáticas que elegí, archivos de texto leídos, videos, audio, todo se construye con el código binario!
En la computación, toda la información es procesada por la máquina a través del código binario, que utiliza como base el sistema binario para convertir los valores de 0 y 1 de los pulsos eléctricos en información. Fíjate en la imagen de abajo, en ella tenemos la representación de 1 bit como encendido (ON) y abajo tenemos 8 dígitos que representan 1 Byte formado por los bits 10101100 (creo que ahora lo entiendes, ¿no?).
Bueno, entendemos esa parte, pero ¿qué es y cómo construir un código binario?
El código binario está compuesto por algunas combinaciones de 0 y 1. El "alfabeto" binario presenta algunas formas de organización de la información, como se puede observar en la siguiente tabla:
Nombre de la unidad | Base Dos | Número de bits |
---|---|---|
bit | 2¹ | 1 |
Byte | 2⁸ | 8 |
Kilobyte | 2¹⁰ | 1.024 |
megabyte | 2²⁰ | 1.048.576 |
gigabyte | 2³⁰ | 1.073.741.824 |
terabyte | 2⁴⁰ | 1.099.511.627.776 |
1 bit es el binary digit, que en traducción libre es el dígito binario. Esta es la unidad de información más pequeña en la computadora, que se puede compartir o almacenar con sus dos valores: 0 o 1.
Por su parte, el Byte, basado en la agrupación de 8 bits (arquitectura popularizada por IBM en la década de 1960), es una unidad de información digital para representar letras, símbolos o números, por ejemplo, y facilita su proceso de la información enviada a la computadora.
En pocas palabras, 1 byte es la suma de 8 bits:
bit + bit + bit + bit + bit + bit + bit + bit = 1 byte o 1 byte = 8 bits
Trabajar con textos también es otra forma de codificar, usamos mucho el código ASCII y el UTF-8, ¿quieres conocer un poco más?
El Código ASCII, American Standard Code for Information Interchange - Código Estándar Americano para el Intercambio de Información, es un esquema de codificación de caracteres alfanuméricos. Podemos representar letras, símbolos, números, espacio, comillas, entre otros. Hay varios tipos de esquemas y es común que nosotros, los brasileños, tengamos ciertos problemas al acentuar palabras, por ejemplo, por eso necesitamos seleccionar el patrón correcto y evitar estas ocurrencias.
UNICODE es el estándar de codificación de caracteres de Internet, se basó en ISO/IEC 10646 y fue diseñado para tratar los miles de sistemas de codificación que han surgido. Por eso, incorpora los estándares UTF, UTF-16, UTF-32 y UTF-8.
UTF-8 es ampliamente utilizado en la web y el estándar estavo presente en el 95% de todos los sitios en 2020. Cada carácter se representa utilizando de 1 a 4 bytes y una de sus ventajas es que es compatible con versiones antiguas de ASCII. Además, cada byte reserva algunos bits para la codificación, que es diferente de ASCII, y por lo tanto, hay menos posibilidades de que los bytes se corrompan al momento de la conversión a UTF-8.
Tenía curiosidad y lo probé para ver si funcionaba, ¿quieres probarlo tú también? Te desafío a convertir el binario a texto. Intentemos con el siguiente código:
|01000001 01101100 01110101 01110010 01100001|
Puedes usar la tabla ASCII y convertir bit a bit o puedes usar un conversor aquí en este enlace Conversor online de binario a UTF8.
Quizás realizar la conversión de decimal a binario y viceversa no tenga mucho sentido en la rutina de desarrollo, pero sin duda me ayudó mucho a visualizar el funcionamiento del sistema binario y como la relación de posicionamiento y desplazamiento de los dígitos es directamente relacionado con el funcionamiento de la memoria y el procesamiento de la información. Entender un poco más sobre las herramientas que utilizamos es un paso fundamental para aprovechar mejor los recursos disponibles y evitar incluso posibles errores en nuestro código. Después de todo... ¿quién nunca se ha encontrado con el problema de punto flotante causado por la conversión de decimal a binario?
¡Pero sin duda, lo más importante es que ahora podrás entender este chiste!
Camila Pessôa
¡Hola, soy Camila! Tengo 33 años, soy madre y entré en el campo de la tecnología a través de la robótica educativa. Participé en el Bootcamp {Reprograma} enfocado en Back-End/Node.js y estudio Sistemas de Información. Actualmente formo parte del equipo de Scuba y tengo una gran pasión por la educación y la tecnología, ¡porque creo que esta combinación es transformadora!
Marianna Costa
Brasileña, estudiante de ingeniería informática y formo parte del equipo Scuba Team en Alura Latam. Soy amante de la tecnología desde siempre y me enamoré del desarrollo front end. Soy muy curiosa y siempre estoy interesada en aprender sobre los diferentes temas. Me encanta compartir y recibir conocimiento porque creo firmemente que "compartir conocimiento es lo mismo que difundir desarrollo".
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
486.67
BOB |
66663.80
CLP |
297788.03
COP |
65.90
USD |
266.98
PEN |
1409.00
MXN |
2823.49
UYU |
Plan Anual |
737.76
BOB |
101057.87
CLP |
451426.78
COP |
99.90
USD |
404.73
PEN |
2135.95
MXN |
4280.23
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana