Logo DIE

Lenguaje Binario

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


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.



Realizar conversiones de y hacia diferentes sistemas numéricos para la representación de datos y operaciones en un sistema de cómputo.

Representación en memoria de tipos de dato carácter


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).



Figura hecha con código ASCII

(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.



León creado con arte ASCII

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.



Figura hecha con código ASCII

(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.






Representación numérica


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…

Fórmula


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).


Relación entre los sistemas binario, octal, decimal y hexadecimal


Considerando las tablas de posición para los sistemas binario, octal y hexadecimal se tiene:

 

(512)
28

(256)
28

(128)
27

(64)
28

(32)
25

(16)
24

(8)
23

(4)
22

(2)
21

(1)
20

(512)
83

(512)
82

(8)
81

(1)
80

(512)
162

(16)
161

(1)
160

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

Representación numérica en magnitud y signo y en complemento a r


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.





Representación de un número entero en memoria




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.



ícono

Actividad 1. Almacenamiento de información en memoria

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.



ícono

Actividad 2. Conversión de bases

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.

ícono

Autoevaluación. Recursos para manejar el lenguaje máquina

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)