El lenguaje con el que trabaja el procesador de un sistema de cómputo se denomina lenguaje máquina.
Para efectuar una operación, el procesador necesita una secuencia de señales eléctricas almacenadas como unos y ceros (sistema binario) en la memoria, por lo que a este lenguaje también se le denomina lenguaje binario. Una y sólo una secuencia de estas señales (conjunto de bits) realiza determinada operación.
De aquí la importancia de saber manipular sistemas numéricos de diferentes bases para comprender la representación de datos y operaciones de bajo nivel en un sistema de cómputo.
Uno de los conjuntos de símbolos que más se utilizan en un procesador son aquellos que se introducen a través del teclado.
Desde la aparición de los primeros procesadores ha existido la necesidad de tener una codificación para estos símbolos. Dado que las computadoras intercambian entre sí infinidad de datos, esta codificación es deseable que sea idéntica para todos ellos; sin embargo, no es así; es por ello que se tienen diversos tipos de codificación, dependiendo del sistema operativo que se utilice.
Código ASCII
Una de las codificaciones de letras que más trascendencia ha tenido es la codificación ASCII (American Standard Code for Information Interchange). Esta codificación permite transformar letras, dígitos y códigos especiales en código binario.
Utiliza grupos de 7 bits por carácter (27=128), lo que permite describir el alfabeto con letras mayúsculas y minúsculas y símbolos comunes.
El código ASCII extendido usa 8 bits por carácter, lo que añade otros 128 caracteres posibles (28=256). Este juego de códigos más amplio permite agregar símbolos de otros lenguajes y varios símbolos gráficos.
El código ASCII fue publicado como estándar por primera vez en 1967 y fue actualizado por última vez en 1986.
En la actualidad define códigos para 33 caracteres no imprimibles, de los cuales la mayoría son caracteres de control obsoletos que tienen efecto sobre cómo se procesa el texto; además, define 95 caracteres imprimibles (empezando por el carácter espacio).
(s. a.) (s. f.). Figura hecha con código ASCII [dibujo]. Tomado de http://www.elblog.info/2008/02/
Código EBCDIC
EBCDIC (Extended Binary Coded Decimal Interchange Code) es un código binario que representa caracteres alfanuméricos, controles y signos de puntuación. Fue desarrollado por IBM, en 1964.
Cada carácter está compuesto por 8 bits; por lo tanto, EBCDIC define un total de 256 caracteres.
Giragus. (2012). León creado con arte ASCII [dibujo]. Tomado de https://commons.wikimedia.org/wiki/File:Le%C3%B3n_ASCII.JPG
Unicode
Unicode es un estándar industrial cuyo objetivo es proporcionar el medio por el cual un texto, en cualquier forma e idioma, pueda ser codificado para el uso informático.
La codificación Unicode se ha transformado en un estándar adoptado por las principales empresas de hardware y software. Con el paso del tiempo se espera que sea la única representación utilizada.
El estándar pretende ser lo más genérico posible y, por lo tanto, en lugar de fijar un único tamaño para la representación, su codificación la divide en tres posibles formas: 8 bits, 16 bits y 32 bits.
Estas codificaciones son diferentes, pero todas son parte del estándar y se conocen con los nombres de UTF-8, UTF-16 y UTF-32, respectivamente.
(s. a.) (s. f.). Logo de Unicode [logotipo]. Tomado de https://commons.wikimedia.org/wiki/File:Unicode_logo.svg
Almacenamiento en memoria
Una vez definida la codificación de todas las letras y símbolos adicionales, cada carácter (letra, número o símbolo) se representa mediante una secuencia de códigos, en los que cada número corresponde a un carácter.
Esta codificación es utilizada por los editores de texto plano o lenguajes de programación para la representación de texto; es decir, cuando se crea un documento, en la pantalla se ven caracteres; sin embargo, cuando se guarda el archivo estos caracteres se almacenan de forma numérica (según la codificación de la máquina); cuando se recupera el archivo (cuando se vuelve a leer), los números almacenados se transforman en las letras correspondientes y se muestran en la pantalla como caracteres.
Un número en base diez puede ser representado de la siguiente manera:
dn dn-1 … d2 d1 d0 . d–1 d–2 … dm–1 dm
Donde d hace referencia a un dígito decimal (dígitos de 0 a 9) y n hace referencia a la posición del número a la izquierda del punto decimal (parte entera) y m hace referencia a la posición del número a la derecha del punto decimal (parte fraccionaria).
Conversión de números entre diferentes bases
Como se mencionó anteriormente, las computadoras ocupan sistema base 2 para representar instrucciones y cantidades.
Empero, la representación de cantidades en sistema binario utiliza demasiados dígitos, por lo que se pueden manejar utilizando otras bases, como las bases octal o hexadecimal.
El sistema binario representa cantidades utilizando dos dígitos: 0 y 1. El sistema octal representa cantidades utilizando ocho dígitos: 0, 1, 2, 3, 4, 5, 6, 7. El sistema hexadecimal representa cantidades utilizando 16 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Conversión de números enteros de base diez a base b
Un número entero en base diez puede ser representado de la siguiente manera:
dn dn-1 … d2 d1 d0
Donde d hace referencia a un número decimal (dígitos de 0 a 9) y n hace referencia a la posición del número a partir del punto decimal (parte entera).
Para representar un número entero base 10 a base b, es necesario dividir el número decimal (dividendo) entre la base (divisor) hasta que el resultado (cociente) sea cero. Los residuos que se van obteniendo con la división forman la representación del número en la base deseada.
Conversión de números reales de base diez a base b
Para representar un número real base 10 a base b, es necesario dividir la parte entera del número decimal (dividendo) entre la base (divisor) hasta que el resultado (cociente) sea cero y multiplicar la parte fraccionaria del número (multiplicando) por la base (multiplicador). Los residuos obtenidos forman la representación del número en la base deseada.
Conversión de números enteros de base b a base diez
Un número entero en base diez está representado de la siguiente manera:
dn dn-1 … d2 d1 d0
Donde d hace referencia a un número decimal (dígito de 0 a 9) y n hace referencia a la posición del número a partir del punto decimal (parte entera).
La magnitud de un número esta determinada por la sumatoria del dígito multiplicado por la base elevada a la posición del dígito, es decir:
Número = dnbn + dn-1bn-1 + … + d2b2 + d1b1 + d0b0
La fórmula anterior se puede simplificar como…
Donde:
Número = El número en base diez.
d = Dígito iésimo de la cantidad a transformar.
b = Base elegida.
i = Posición que inicia en 0 y termina en n (el número de dígitos menos uno).
Considerando las tablas de posición para los sistemas binario, octal y hexadecimal se tiene:
(512) |
(256) |
(128) |
(64) |
(32) |
(16) |
(8) |
(4) |
(2) |
(1) |
(512) |
(512) |
(8) |
(1) |
||||||
(512) |
(16) |
(1) |
De la tabla anterior se puede observar lo siguiente:
Si se agrupan 3 dígitos binarios se obtiene un dígito octal.
Si se agrupan 4 dígitos binarios se obtiene un dígito hexadecimal.
Conversión de sistema binario a sistema octal
Dado un número binario, se separa en conjuntos de tres elementos (a partir del punto). A cada conjunto se le asocian los valores por posición 4, 2, 1, y con ellos se obtiene el dígito octal equivalente.
Ejemplo:
Dado el número 111110010002, obtener el número equivalente en sistema octal.
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
3 |
7 |
1 |
0 |
Por lo tanto, el número 111110010002 es igual al número 37108.
Conversión de sistema binario a sistema hexadecimal
Dado un número binario, se separa en conjuntos de cuatro elementos (a partir del punto). A cada conjunto se le asocian los valores por posición 8, 4, 2, 1, y con ellos se obtiene el dígito hexadecimal equivalente.
Ejemplo:
Dado el número 111110010002, obtener el número equivalente en sistema hexadecimal.
8 |
4 |
2 |
1 |
8 |
4 |
2 |
1 |
8 |
4 |
2 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
7 |
C |
8 |
Por lo tanto, el número 111110010002 es igual al número 7C816.
Conversión de sistema octal a sistema binario
Dado un número octal, se asocia a cada dígito octal tres dígitos binarios; la unión de estos grupos de dígitos formará la cantidad equivalente en sistema binario.
Octal |
Binario |
0 |
000 |
1 |
001 |
2 |
010 |
3 |
011 |
4 |
100 |
5 |
101 |
6 |
110 |
7 |
111 |
Conversión de sistema hexadecimal a sistema binario
Dado un número hexadecimal, se asocia a cada dígito hexadecimal cuatro dígitos binarios; la unión de estos grupos de dígitos formará la cantidad equivalente en sistema binario.
Hexadecimal |
Binario |
0 |
0000 |
1 |
0001 |
2 |
0010 |
3 |
0011 |
4 |
0100 |
5 |
0101 |
6 |
0110 |
7 |
0111 |
Hexadecimal |
Binario |
8 |
1000 |
9 |
1001 |
A |
1010 |
B |
1011 |
C |
1100 |
D |
1101 |
E |
1110 |
F |
1111 |
Para representar un número entero en la computadora se utiliza el sistema de numeración binaria (base 2), debido a que la memoria sólo puede almacenar dos valores: cero o uno.
A pesar de que el almacenamiento en memoria se realiza con números binarios, las operaciones se pueden realizar en una base diferente.
Suma y resta en base b
Es posible realizar operaciones básicas para una base dada de manera similar a como se realizan en base 10, lo único que hay que tomar en cuenta es que el número de dígitos permitidos lo establece la base en la que se esté trabajando.
Las operaciones básicas entre números en base 10 utilizan dígitos de 0 a 9 (10 dígitos).
Para representar números en base 2 sólo es posible utilizar los dígitos de 0 y 1 (2 dígitos).
Para representar números en base 8 es posible utilizar dígitos de 0 a 7 (8 dígitos).
Para representar números en base 16 es posible utilizar dígitos de 0 a 9 y letras de la A a la F (16 dígitos).
Complemento aritmético
El complemento aritmético (ar) de un número real se refiere a la cantidad que le falta a dicho número para ser igual a una unidad del orden inmediato superior.
El complemento aritmético ar (o complemento a la base) de un número real se obtiene a partir de la siguiente fórmula:
ar = rn - |N|
Donde:
ar: complemento aritmético de un número real base r.
r: es la base del número.
n: número de dígitos de la parte entera del número.
N: el número dado.
Además, para un número en complemento, el bit de signo es parte del número, ya que sólo los números negativos se guardan en complemento; por lo tanto, se puede afirmar que el número es negativo.
Complemento aritmético menos uno
El complemento aritmético menos uno (ar-1 o complemento a la base disminuida) de un número real se calcula con base en la siguiente fórmula:
ar-1 = rn - r-m - |N|
Donde:
ar-1: complemento aritmético de un número real base r.
r: es la base del número.
n: número de dígitos de la parte entera del número.
m: número de dígitos de la parte fraccionaria del núm.
N: el número dado.
Como se puede observar, en magnitud y signo se realiza la operación de manera directa, es decir, 193-98 y se obtiene el resultado.
En complemento a2, en lugar de restar se suma el primer número más el complemento del segundo, es decir, 123 + 902. El resultado se acota a tres dígitos (debido a que es la magnitud máxima de los operandos) y se obtiene el resultado.
En complemento a2-1 se suma el primer número más el complemento a la base disminuida del segundo, es decir, 123 + 901. El resultado se acota a tres dígitos y se le suma uno (puesto que la suma se realizó a la base disminuida en uno) y se obtiene el resultado.
En complemento a2, en lugar de restar se suma el primer número más el complemento del segundo, es decir, 123 + 875. En este caso, el resultado (al ser un número negativo) se tiene en complemento; por lo tanto, se obtiene el complemento del complemento para obtener el número en magnitud y signo. Recordar que un número en complemento por defecto es negativo. Al calcular el complemento del complemento se obtiene el resultado.
En complemento a2-1 se suma el primer número más el complemento a la base disminuida del segundo, es decir, 123 + 874. Al resultado se le suma uno (puesto que la suma se realizó a la base disminuida en uno), se obtiene su complemento (puesto que el número está en complemento al ser negativo) y se obtiene el resultado.
Dependiendo de la arquitectura de la computadora, los números enteros pueden ocupar 16 o 32 bits en memoria, en donde el primer bit registra el signo y los restantes registran la capacidad del entero.
Un número entero que ocupa 32 bits se distribuye en la memoria de la siguiente manera:
1 bit para el signo del número
31 bits para el número
+/- |
n30 |
n29 |
n28 |
n27 |
n26 |
n25 |
n24 |
n23 |
n22 |
n21 |
n20 |
n19 |
n18 |
n17 |
n16 |
n15 |
n14 |
n13 |
n12 |
n11 |
n10 |
n9 |
n8 |
n7 |
n6 |
n5 |
n4 |
n3 |
n2 |
n1 |
n0 |
Es importante tener en cuenta que un número entero puede superar la capacidad de almacenamiento determinada y esto provoca pérdida de información (parcial o total).
Representación de un número entero en complemento ar en memoria
Dependiendo de la arquitectura de la computadora, un dato puede ser almacenado en memoria con su complemento (especialmente cuando el número es negativo).
Se desea representar en memoria el número entero -1101110101110012 en complemento ar.
Para representar el complemento del número es necesario expresarlo con el número máximo de elementos que pueden ser almacenados en memoria, es decir, para el caso de una arquitectura de 32 bits el número quedaría expresado como sigue:
00000000000000001101110101110012
Una vez que se posee el número completo se obtiene el complemento ar:
00000000000000001101110101110012= 111111111111110010001010001112
La representación en memoria del número entero es:
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
Representación de un número real en la memoria
En la práctica se está constantemente trabajando con números reales, sin embargo, estos números no siempre se pueden representar de manera exacta, debido a que el número de dígitos está limitado por el tamaño de palabra de cada máquina.
Por lo tanto, los números necesariamente son redondeados o truncados, y con ello se provoca un error.
Para realizar el registro de un número real en memoria se puede utilizar la notación de punto flotante normalizado o la notación de punto flotante no normalizada.
Un número A puede ser expresado en notación científica no normalizada, es decir, expresar el número como una potencia de 10:
A = C x 10n
Donde C >= 1 y n es un entero positivo, negativo o cero (n ∈ Z).
Por ejemplo, si se desea expresar el número 836.238 en la forma de punto flotante no normalizada, el número quedaría: 836238 x 10-3
Un número A puede ser expresado en notación científica normalizada, es decir, expresar el número como una potencia de 10:
A = C x 10n
Donde C < 1 y n es un entero positivo, negativo o cero (n ∈ Z).
Por ejemplo, si se desea expresar el número 836.238 en la forma de punto flotante normalizada el número quedaría: 0.836238 x 103
Los números binarios también pueden ser representados en notación científica normalizada (notación de punto flotante normalizada) de la siguiente manera:
A = M x 2n
Donde n es un entero positivo, negativo o cero (expresado en binario) y M es la mantisa (dígitos significativos del número), que debe ser menor a 1.
Expresar los siguientes números en su forma científica normalizada:
A = M x 2n
11111.012
11111.012 = 0.11111012 x 2101
-0.000000111011012
-0.000000111011012 = -0.111011012 x 2-110
Un número flotante ocupa 32 bits (4 bytes) en la memoria y se distribuyen de la siguiente manera:
1 bit para el signo de la mantisa
1 bit para el signo del exponente
7 bits para el exponente entero (en binario)
23 bits para la mantisa (en binario)
+ |
+ |
e6 |
e5 |
e4 |
e3 |
e2 |
e1 |
e0 |
m0 |
m1 |
m2 |
m3 |
m4 |
m5 |
m6 |
m7 |
m8 |
m9 |
m10 |
m11 |
m12 |
m13 |
m14 |
m15 |
m16 |
m17 |
m18 |
m19 |
m20 |
m21 |
m22 |
NOTA: Como la mantisa siempre empieza con uno, no hay necesidad de almacenar este dígito.
Como pudiste estudiar, todos los elementos de una computadora se guardan como una combinación de ceros y unos, es decir, en forma binaria. Tanto los números como los caracteres se expresan en forma binaria dentro del espacio de memoria reservado. Los caracteres se guardan en variables de 8 bits, lo que permite almacenar un carácter utilizando cualquier codificación (UTF-8, ECDBIC, ASCII, etc.). Los números enteros se pueden guardar en localidades de memoria que van de los 8 a los 64 bits. Los números reales se guardan en localidades de memoria de 32 o 64 bits.
La computadora está constantemente haciendo conversión entre bases al mostrar o almacenar la información. Cuando se guarda un carácter o un número, la computadora convierte ese elemento a binario. Cuando se recupera (lee) información, la computadora convierte el elemento almacenado en binario a otras bases (8, 10, 16); por lo tanto, es importante saber convertir de base 2 a todas las demás bases y entre ellas también.
Hasta el momento haz realizado conversiones de diferentes sistemas númericos para representar datos y operaciones, ahora es momento de que refuerces cuales son los recursos para manejar el lenguaje máquina.
Fuentes de información
Jiménez, J. A. (2008). Matemáticas para la computación. México: Alfaomega.
Tanenbaum, A. S. (2000). Organización de computadoras, un enfoque estructurado. México: Prentice Hall.
Cómo citar
Solano, J. A. (2018). Lenguaje binario. Unidades de Apoyo para el Aprendizaje. CUAED/Facultad de Ingeniería-UNAM. Consultado el (fecha) de (vínculo)