Codigos Binarios

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 22

Sistemas binarios

Son aquellos sistemas de numeración en el que los números se representan


utilizando las cifras cero y uno ('0' y '1').

Historia
El antiguo matemático Indio “Pingala” presentó la primera descripción que se
conoce de un sistema de numeración binario en el siglo tercero antes de Cristo, lo cual
coincidió con su descubrimiento del concepto del número cero.

El sistema binario moderno fue documentado en su totalidad por Leibniz en el


siglo diecisiete. Leibniz usó el 0 y el 1, al igual que el sistema de numeración binario
actual.

En 1854, el matemático británico George Boole, publicó un artículo que marcó


un antes y un después, detallando un sistema de lógica que terminaría denominándose
Álgebra de Boole. Dicho sistema jugaría un papel fundamental en el desarrollo del
sistema binario actual, particularmente en el desarrollo de circuitos electrónicos.

En 1937, Claude Shannon realizó su tesis doctoral en el MIT, en la cual


implementaba el Álgebra de Boole y aritmética binaria utilizando relés y conmutadores
por primera vez en la historia. Titulada Un Análisis Simbólico de Circuitos
Conmutadores y Relés, la tesis de Shannon básicamente fundó el diseño práctico de
circuitos digitales.

En noviembre de 1937, George Stibitz, trabajando por aquel entonces en los


Laboratorios Bell, construyó un ordenador basado en relés - al cual apodó "Modelo K"
(porque lo construyó en una cocina, en inglés "kitchen")- que utilizaba la suma binaria
para realizar los cálculos. Los Laboratorios Bell autorizaron un completo programa de
investigación a finales de 1938, con Stibitz al mando. El 8 de enero de 1940 terminaron
el diseño de una Calculadora de Números Complejos, la cual era capaz de realizar
cálculos con números complejos. En una demostración en la conferencia de la Sociedad
Americana de Matemáticas, el 11 de septiembre de 1940, Stibitz logró enviar comandos
de manera remota a la Calculadora de Números Complejos a través de la línea
telefónica mediante un teletipo. Fue la primera máquina computadora utilizada de
manera remota a través de la línea de teléfono. Algunos participantes de la conferencia
que presenciaron la demostración fueron John Von Neumann, John Mauchly y Norbert
Wiener, el cual escribió acerca de dicho suceso en sus diferentes tipos de memorias en
la cual alcanzo diferentes logros.

Operaciones con números binarios


Suma de números Binarios

Las posibles combinaciones al sumar dos bits son

• 0+0=0
• 0+1=1
• 1+0=1
• 1+1=0 y se lleva 1

100110101
11010101
----------------
1000001010

Operamos como en el sistema decimal: comenzamos a sumar desde la derecha,


en nuestro ejemplo, 1 + 1 = 10, entonces escribimos 0 y "llevamos" 1 (Esto es lo que se
llama el arrastre, acarreo o carry en inglés). Se suma este 1 a la siguiente columna: 1 +
0 + 0 = 1, y seguimos hasta terminar todas la columnas (exactamente como en decimal).

Resta de números binarios

El algoritmo de la resta, en binario, es el mismo que en el sistema decimal. Pero


conviene repasar la operación de restar en decimal para comprender la operación
binaria, que es más sencilla. Los términos que intervienen en la resta se llaman
minuendo, sustraendo y diferencia.

Las restas básicas 0-0, 1-0 y 1-1 son evidentes:

• 0–0=0
• 1–0=1
• 1–1=0

La resta 0 - 1 se resuelve, igual que en el sistema decimal, tomando una unidad


prestada de la posición siguiente: 10 - 1 = 1 y me llevo 1, lo que equivale a decir en
decimal, 2 – 1 = 1 . Esa unidad prestada debe devolverse, sumándola, a la posición
siguiente. Veamos algunos ejemplos:

Restamos 17 - 10 = 7(2=345) Restamos 217 - 171 = 46 (3=690)

10001 11011001
-01010 -10101011
------ ---------
00111 00101110

A pesar de lo sencillo que es el procedimiento, es fácil confundirse. Tenemos


interiorizado el sistema decimal y hemos aprendido a restar mecánicamente, sin
detenernos a pensar en el significado del arrastre. Para simplificar las restas y reducir la
posibilidad de cometer errores hay varias soluciones:

Dividir los números largos en grupos. En el siguiente ejemplo, vemos cómo se


divide una resta larga en tres restas cortas: Restamos

100110011101 1001 1001 1101


-010101110010 -0101 -0111 -0010
------------- = ----- ----- -----
010000101011 0100 0010 1011
Utilizando el Complemento a dos. La resta de dos números binarios puede
obtenerse sumando al minuendo el complemento a dos del sustraendo. Veamos algunos
ejemplos: Hagamos la siguiente resta, 91 – 46 = 45, en binario:

1011011 1011011
-0101110 C246 = 1010010 +1010010
-------- --------
0101101 10101101

En el resultado nos sobra un bit, que se desborda por la izquierda. Pero, como el
número resultante no puede ser más largo que el minuendo, el bit sobrante se desprecia.

Un último ejemplo. Vamos a restar 219 – 23 = 196, directamente y utilizando el


complemento a dos:

11011011 11011011
-00010111 C223 = 11101001 +11101001
--------- --------
11000100 111000100

Y, despreciando el bit que se desborda por la izquierda, llegamos al resultado correcto:


11000100 en binario, 196 en decimal

Utilizando el complemento a 1. La resta de dos numeros binarios puede obtenerse


sumando al minuendo el complemento a uno del sustraendo y a su vez sumarle el bit de
overflow (bit que se desborda).

Producto de números binarios

El producto de números binarios es especialmente sencillo, ya que el 0


multiplicado por cualquier número da 0, y el 1 es el elemento neutro del producto.

Por ejemplo, multipliquemos 10110 por 1001:

10110 11010110111
1001 101011
--------- -----------------
10110 11010110111
00000 11010110111
00000 00000000000
10110 11010110111
--------- 00000000000
11000110 11010110111
------------------
10010000010111101

División de números binarios

La división en binario es similar a la decimal, la única diferencia es que a la hora


de hacer las restas, dentro de la división, estas deben ser realizadas en binario

Por ejemplo, vamos a dividir 100010010 (274) entre 1101 (13):


100010010 |1101
------
-0000 010101
-------
10001
- 1101
-------
001000
- 0000
-------
10000
- 1101
-----------
000111
- 0000
-------
01110
- 1101
-------
00001
------------

Conversión entre binarios y decimales


Binarios a decimales
Dado un número N, binario, para expresarlo en el sistema decimal, se debe
escribir cada número que lo compone, multiplicado por la base dos, elevado a la
posición que ocupa. Ejemplo.. 110012 = 2510<=>1 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 1 ×
20

Decimales a binarios

Se divide el número decimal entre 2 cuyo resultado entero se vuelve a dividir


entre 2 y así sucesivamente. Una vez llegados al 1 indivisible se cuentan el último
cociente, es decir el uno final (todo número binario excepto el 0 empieza por uno),
seguido de los residuos de las divisiones subsiguientes. Del más reciente hasta el
primero que resultó. Este número será el binario que buscamos. A continuación se
puede ver un ejemplo con el número decimal 100 pasado a binario.

100 |_2
0 50 |_2
0 25 |_2 --> 100 => 1100100
1 12 |_2
0 6 |_2
0 3 |_2
1 1

Otra forma de conversión consiste en un método parecido a la factorización en


números primos. Es relativamente fácil dividir cualquier número entre 2. Este método
consiste también en divisiones sucesivas. Dependiendo de si el número es par o impar,
colocaremos un cero o un uno en la columna de la derecha. si es impar, le restaremos
uno y seguiremos dividiendo por dos, hasta llegar a 1. Después, sólo nos queda coger el
último resultado de la columna izquierda (que siempre será 1) y todos los de la columna
de la derecha y ordenar los dígitos de abajo a arriba.

Ejemplo:

100|0
50|0
25|1 --> 1, 25-1=24 y seguimos dividiendo por 2.
12|0
6|0
3|1
1| ------->100 => 1100100

Código binario decimal (BCD)


Binary-coded decimal (BCD) es un sistema numérico usado en sistemas
computacionales y electrónicos para codificar números enteros positivos y facilitar las
operaciones aritméticas, es un código pesado debido a que con un orden específico
(8421).

En BCD cada cifra que representa a un dígito decimal (0, 1, ...8 y 9) se


representa con su equivalente binario en 4 bits (cuarteto) (esto es así porque 4 es el
número de bits necesario para representar el 9, el número más alto cifrable en BCD.

Como se observa con el BCD sólo se utilizan 10 de las 16 posibles


combinaciones que se pueden formar con números de 4 bits, por lo que el sistema
pierde capacidad de representación, aunque se facilita la compresión de los números.
Esto es porque el BCD solo se usa para representar cifras no números en su totalidad.
Esto quiere decir que para números de más de una cifra hacen falta dos números BCD
para componerlo. A primera vista esto puede parecer más engorroso pero en realidad de
cara al cálculo y la programación de sistemas digitales es sumamente práctico ya que
permite trabajar de hecho con números decimales ordinarios haciendo uso solo de los
dos bits posibles que otorga un circuito digital típico ON (1) / OFF (0). Algo que como
se verá resulta muy útil.

Desde que los sistemas informáticos empezaron a almacenar los datos en


conjuntos de ocho bits (octeto), hay dos maneras comunes de almacenar los datos BCD:

• Omisión de los cuatro bits más significativos(como sucede en el


EBCDIC)
• Almacenamiento de dos datos BCD, es el denominado BCD
"empaquetado", en el que también se incluye en primer lugar el signo,
por lo general con 1100 para el + y 1101 para el -.

De este modo, el número 127 sería representado como (11110001, 11110010,


11110111) en el EBCDIC o (00010010, 01111100) en el BCD empaquetado.
El BCD sigue siendo ampliamente utilizado para almacenar datos, en aritmética
binaria o en electrónica. Los números se pueden mostrar fácilmente en visualizadores de
siete segmentos enviando cada cuarteto BCD a un visualizador. La BIOS de un
ordenador personal almacena generalmente la fecha y la hora en formato del BCD,
probablemente por razones históricas se evitó la necesidad de su conversión en ASCII.

La ventaja del código BCD frente a la representación binaria clásica es que no


hay límite para el tamaño de un número. Los números que se representan en formato
binario están generalmente limitados por el número mayor que se pueda representar con
8, 16, 32 o 64 bits. Por el contrario utilizando BCD añadir un nuevo dígito sólo implica
añadir una nueva secuencia de 4 bits.

Código Gray
El Código Gray es un caso particular de código binario. Consiste en una
ordenación de 2n números binarios de tal forma que cada número sólo tenga un dígito
binario distinto a su predecesor.

Esta técnica de codificación se originó cuando los circuitos lógicos digitales se


realizaban con válvulas de vacío y dispositivos electromecánicos. Los contadores
necesitaban potencias muy elevadas a la entrada y generaban picos de ruido cuando
varios bits cambiaban simultáneamente. El uso de código Gray garantizó que en
cualquier transición variaría tan sólo un bit.

En la actualidad, el código Gray se sigue empleando para el diseño de cualquier


circuito electrónico combinacional mediante el uso de un Mapa de Karnaugh, ya que el
principio de diseño de buscar transiciones más simples y rápidas entre estados sigue
vigente, a pesar de que los problemas de ruido y potencia se hayan reducido.

Hay varios algoritmos para generar una secuencia de código Gray (y varios
códigos posibles resultantes, en función del orden que se desee seguir), pero el más
usado consiste en cambiar el bit menos significativo que genera un nuevo código. Este
es un código gray de cuatro bits generado con dicho algoritmo:

Dígito
Dígito decimal Código Gray Código Gray
decimal
0 0000 8 1100
1 0001 9 1101
2 0011 10 1111
3 0010 11 1110
4 0110 12 1010
5 0111 13 1011
6 0101 14 1001
7 0100 15 1000

El primer uso documentado de un código de estas características fue en una


demostración del telégrafo del ingeniero francés Émile Baudot, en 1878. Pero no fueron
patentados hasta 1953 por Frank Gray (que dio nombre al sistema de codificación), un
investigador de los laboratorios Bell.

Binario a Gray
Para pasar un número binario al código binario Gray, hay una regla fácil de
implementar en un lenguaje de programación:

1. Un número en binario siempre empieza en 1 --Los ceros a la


izquierda no cuentan--; Pues en Gray también. Ej: 1000011110000 en
binario se escribe 1xxxxXXXXxxxx.
2. Ahora nos fijamos en el segundo dígito. Si es igual al dígito
anterior se pone un 0 (no cambia); Si es diferente --como es el caso, pues
el dígito anterior era un 1 y el que observamos un 0-- se pondrá un 1
(cambia). Ej: El número del ejemplo anterior será: 11xxxXXXXxxxx.
3. En los casos sucesivos se repite el paso anterior, observando en el
número binario 'natural' el dígito anterior al que se evalúa. Ej: El número
del ejemplo anterior, pasado a código Gray será: 1100010001000.

Otros ejemplos:
1010 - 1111
111000 - 100100
011001 - 010101
110101010001 - 101111111001

Otra técnica sencilla para pasar de binario a Gray sin usar un lenguaje de programación
es esta:

1. aplicar un XOR (disyunción exclusiva, también se puede sumar


cada bit individualmente descartando cualquier acarreo) del número a sí
mismo pero con un acarreo a la derecha
2. eliminar el bit del extremo derecho

Ej: Pasar diez (1010) de binario a gray será 1111

1010
101
-----
1111

Otros Ejemplos

111000
11100
------
100100
110101010001
11010101000
------------
101111111001

Gray a Binario
Hacer el cambio contrario es simplemente invertir lo que hace el anterior, de
forma que si se encuentra un cero (siempre que no sea al principio) se debe poner la
cifra anterior; En cambio si pone un 1 es porque la cifra ha cambiado así que si había un
0 ahora se pone un 1 y viceversa.

American Standard Code for Information Interchange ASCII

El código ASCII (acrónimo inglés de American Standard Code for Information


Interchange — Código Estadounidense Estándar para el Intercambio de Información),
pronunciado generalmente [áski], es un código de caracteres basado en el alfabeto latino
tal como se usa en inglés moderno y en otras lenguas occidentales. Fue creado en 1963
por el Comité Estadounidense de Estándares (ASA, conocido desde 1969 como el
Instituto Estadounidense de Estándares Nacionales, o ANSI) como una refundición o
evolución de los conjuntos de códigos utilizados entonces en telegrafía. Más tarde, en
1967, se incluyeron las minúsculas, y se redefinieron algunos códigos de control para
formar el código conocido como US-ASCII.

El código ASCII utiliza 7 bits para representar los caracteres, aunque


inicialmente empleaba un bit adicional (bit de paridad) que se usaba para detectar
errores en la transmisión. A menudo se llama incorrectamente ASCII a otros códigos de
caracteres de 8 bits, como el estándar ISO-8859-1 que es una extensión que utiliza 8 bits
para proporcionar caracteres adicionales usados en idiomas distintos al inglés, como el
español.

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 como se procesa el texto, más otros 95 caracteres imprimibles que les
siguen en la numeración (empezando por el carácter espacio).

Casi todos los sistemas informáticos actuales utilizan el código ASCII o una
extensión compatible para representar textos y para el control de dispositivos que
manejan texto.

ASCII, como otros códigos de representación de caracteres, especifica una


correspondencia entre cadenas de bits y símbolos escritos de la lengua, permitiendo de
esta forma la comunicación entre dispositivos digitales así como su procesado y
almacenamiento. El código de caracteres ASCII[1] — o una extensión compatible (ver
más abajo) — se usa casi en todos los ordenadores, especialmente ordenadores
personales y estaciones de trabajo. El nombre más apropiado para este código de
caracteres es "US-ASCII".[2]

ASCII es, en sentido estricto, un código de siete bits, lo que significa que usa cadenas
de bits representables con siete dígitos binarios (que van de 0 a 127 en base decimal)

!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~

para representar información de caracteres. En el momento en el que se introdujo el


código ASCII muchos ordenadores trabajaban con grupos de ocho bits (bytes u octetos),
como la unidad mínima de información; donde el octavo bit se usaba habitualmente
como bit de paridad con funciones de control de errores en líneas de comunicación u
otras funciones específicas del dispositivo. Las máquinas que no usaban la
comprobación de paridad asignaban al octavo bit el valor cero en la mayoría de los
casos, aunque otros sistemas como las computadoras Prime, que ejecutaban PRIMOS
ponían el octavo bit del código ASCII a uno.

El código ASCII define una relación entre caracteres específicos y secuencias de bits;
además de reservar unos cuantos códigos de control para el procesado de textos, y no
define ningún mecanismo para describir la estructura o la apariencia del texto en un
documento; estos asuntos están especificados por otros lenguajes como los lenguajes de
etiquetas.

Historia
El código ASCII se desarrolló en el ámbito de la telegrafía, y se usó por primera vez
comercialmente como un código de teleimpresión impulsado por los servicios de datos
de Bell. Bell había planeado usar un código de seis bits, derivado de Fieldata, que
añadía puntuación y letras minúsculas al más antiguo código de teleimpresión Baudot,
pero se les convenció para que se unieran al subcomité de la Agencia de Estándares
Estadounidense (ASA), que habían empezado a desarrollar el código ASCII. Baudot
ayudó en la automatización del envío y recepción de mensajes telegráficos, y tomó
muchas características del código Morse; sin embargo, a diferencia del código Morse,
Baudot usó códigos de longitud constante. Comparado con los primeros códigos
telegráficos, el código propuesto por Bell y ASA resultó en una reorganización más
conveniente para ordenar listas (especialmente porque estaba ordenado alfabéticamente)
y añadió características como la 'secuencia de escape'.

La Agencia de Estándares Estadounidense (ASA), que se convertiría más tarde en el


Instituto Nacional Estadounidense de Estándares (ANSI), publicó por primera vez el
código ASCII en 1963. El ASCII publicado en 1963 tenía una flecha apuntando hacia
arriba (↑) en lugar del circunflejo (^) y una flecha apuntando hacia la izquierda en lugar
del guión bajo (_). La versión de 1967 añadió las letras minúsculas, cambió los nombres
de algunos códigos de control y cambió de lugar los dos códigos de control ACK y ESC
de la zona de letras minúsculas a la zona de códigos de control.
ASCII fue actualizado en consecuencia y publicado como ANSI X3.4-1968, ANSI
X3.4-1977, y finalmente ANSI X3.4-1986.

Otros órganos de estandarización han publicado códigos de caracteres que son idénticos
a ASCII. Estos códigos de caracteres reciben a menudo el nombre de ASCII, a pesar de
que ASCII se define estrictamente solamente por los estándares ASA/ANSI:

• La Asociación Europea de Fabricantes de Ordenadores (ECMA) publicó


ediciones de su clon de ASCII, ECMA-6 en 1965, 1967, 1970, 1973, 1983, y
1991. La edición de 1991 es idéntica a ANSI X3.4-1986.[3]
• La Organización Internacional de Estandarización (ISO) publicó su versión, ISO
646 (más tarde ISO/IEC 646) en 1967, 1972, 1983 y 1991. En particular, ISO
646:1972 estableció un conjunto de versiones específicas para cada país donde
los caracteres de puntuación fueron reemplazados con caracteres no ingleses.
ISO/IEC 646:1991 La International Reference Version es la misma que en el
ANSI X3.4-1986.
• La Unión Internacional de Telecomunicaciones (ITU) publicó su versión de
ANSI X3.4-1986, Recomendación ITU T.50, en 1992. A principios de la década
de 1970 publicó una versión como Recomendación CCITT V.3.
• DIN publicó una versión de ASCII como el estándar DIN 66003 en 1974.
• El Grupo de Trabajo en Ingeniería de Internet (IETF) publicó una versión en
1969 como RFC 20, y estableció la versión estándar para Internet, basada en
ANSI X3.4-1986, con la publicación de RFC 1345 en 1992.
• La versión de IBM de ANSI X3.4-1986 se publicó en la literatura técnica de
IBM como página de códigos 367.

El código ASCII también está incluido en su probable relevo, Unicode, constituyendo


los primeros 128 caracteres (o los 'más bajos'). Algunos observadores consideran el
código ASCII el estándar de software más exitoso que nunca se haya promulgado.

Los caracteres de control ASCII


El código ASCII reserva los primeros 32 códigos (numerados del 0 al 31 en decimal)
para caracteres de control: códigos no pensados originalmente para representar
información imprimible, sino para controlar dispositivos (como impresoras) que usaban
ASCII. Por ejemplo, el carácter 10 representa la función "nueva línea" (line feed), que
hace que una impresora avance el papel, y el carácter 27 representa la tecla "escape" que
a menudo se encuentra en la esquina superior izquierda de los teclados comunes.

El código 127 (los siete bits a uno), otro carácter especial, equivale a "suprimir"
("delete"). Aunque esta función se asemeja a otros caracteres de control, los diseñadores
de ASCII idearon este código para poder "borrar" una sección de papel perforado (un
medio de almacenamiento popular hasta la década de 1980) mediante la perforación de
todos los agujeros posibles de una posición de carácter concreta, reemplazando
cualquier información previa. Dado que el código 0 era ignorado, fue posible dejar
huecos (regiones de agujeros) y más tarde hacer correcciones.

Muchos de los caracteres de control ASCII servían para marcar paquetes de datos, o
para controlar protocolos de transmisión de datos (por ejemplo ENQuiry, con el
significado: ¿hay alguna estación por ahí?, ACKnowledge: recibido o "acuse de recibo",
Negative AcKnowledge: No recibido, Start Of Header: inicio de cabecera, Start of
TeXt: inicio de texto, End of TeXt: final de texto, etc.). ESCape y SUBstitute permitían
a un protocolo de comunicaciones, por ejemplo, marcar datos binarios para que
contuviesen códigos con el mismo código que el carácter de protocolo, y que el receptor
pudiese interpretarlos como datos en lugar de como caracteres propios del protocolo.

Los diseñadores del código ASCII idearon los caracteres de separación para su uso en
sistemas de cintas magnéticas.

Dos de los caracteres de control de dispositivos, comúnmente llamados XON y XOFF


generalmente ejercían funciones de caracteres de control de flujo para controlar el flujo
a hacia un dispositivo lento (como una impresora) desde un dispositivo rápido (como un
ordenador), de forma que los datos no saturasen la capacidad de recepción del
dispositivo lento y se perdiesen.

Los primeros usuarios de ASCII adoptaron algunos de los códigos de control para
representar "metainformación" como final-de-línea, principio/final de un elemento de
datos, etc. Estas asignaciones a menudo entraban en conflicto, así que parte del esfuerzo
de convertir datos de un formato a otro comporta hacer las conversiones correctas de
metainformación. Por ejemplo, el carácter que representa el final-de-línea en ficheros de
texto varía con el sistema operativo. Cuando se copian archivos de un sistema a otro, el
sistema de conversión debe reconocer estos caracteres como marcas de final-de-línea y
actuar en consecuencia.

Actualmente los usuarios de ASCII usan menos los caracteres de control, (con algunas
excepciones como "retorno de carro" o "nueva línea"). Los lenguajes modernos de
etiquetas, los protocolos modernos de comunicación, el paso de dispositivos basados en
texto a basados en gráficos, el declive de las teleimpresoras, las tarjetas perforadas y los
papeles continuos han dejado obsoleta la mayoría de caracteres de control.

Rasgos estructurales
• Los dígitos del 0 al 9 se representan con sus valores prefijados con el valor 0011
en binario (esto significa que la conversión BCD-ASCII es una simple cuestión
de tomar cada unidad bcd y prefijarla con 0011).
• Las cadenas de bits de las letras minúsculas y mayúsculas sólo difieren en un bit,
simplificando de esta forma la conversión de uno a otro grupo.

Otros nombres para ASCII


La RFC 1345 (publicada en Junio de 1992) y el registro IANA de códigos de caracteres,
reconocen los siguientes nombres alternativos para ASCII para su uso en Internet.

• ANSI_X3.4-1968 (nombre canónico)


• ANSI_X3.4-1986
• ASCII
• US-ASCII (nombre MIME recomendado)
• us
• ISO646-US
• ISO_646.irv:1991
• iso-ir-6
• IBM367
• cp367
• csASCII

De estos, sólo los nombres "US-ASCII" y "ASCII" se usan ampliamente. A menudo se


encuentran en el parámetro de "código de caracteres" opcional en la cabecera Content-
Type de algunos mensajes MIME, en el elemento equivalente "meta" de algunos
documentos HTML, y en la parte de declaración de codificación de carácter de la
cabecera de algunos documentos XML.

Variantes de ASCII
A medida que la tecnología informática se difundió a lo largo del mundo, se
desarrollaron diferentes estándares y las empresas desarrollaron muchas variaciones del
código ASCII para facilitar la escritura de lenguas diferentes al inglés que usaran
alfabetos latinos. Se pueden encontrar algunas de esas variaciones clasificadas como
"ASCII Extendido", aunque en ocasiones el término se aplica erróneamente para cubrir
todas las variantes, incluso las que no preservan el conjunto de códigos de caracteres
original ASCII de siete bits.

La ISO 646 (1972), el primer intento de remediar el sesgo pro-inglés de la codificación


de caracteres, creó problemas de compatibilidad, pues también era un código de
caracteres de 7 bits. No especificó códigos adicionales, así que reasignó algunos
específicamente para los nuevos lenguajes. De esta forma se volvió imposible saber en
qué variante se encontraba codificado el texto, y, consecuentemente, los procesadores
de texto podían tratar una sola variante.

La tecnología mejoró y aportó medios para representar la información codificada en el


octavo bit de cada byte, liberando este bit, lo que añadió otros 128 códigos de carácter
adicionales que quedaron disponibles para nuevas asignaciones. Por ejemplo, IBM
desarrolló páginas de código de 8 bits, como la página de códigos 437, que reemplazaba
los caracteres de control con símbolos gráficos como sonrisas, y asignó otros caracteres
gráficos adicionales a los 128 bytes superiores de la página de códigos. Algunos
sistemas operativos como DOS, podían trabajar con esas páginas de código, y los
fabricantes de ordenadores personales incluyeron soporte para dichas páginas en su
hardware.

Los estándares de ocho bits como ISO 8859 y Mac OS Roman fueron desarrollados
como verdaderas extensiones de ASCII, dejando los primeros 127 caracteres intactos y
añadiendo únicamente valores adicionales por encima de los 7-bits. Esto permitió la
representación de un abanico mayor de lenguajes, pero estos estándares continuaron
sufriendo incompatibilidades y limitaciones. Todavía hoy, ISO-8859-1 y su variante
Windows-1252 (a veces llamada erróneamente ISO-8859-1) y el código ASCII original
de 7 bits son los códigos de carácter más comúnmente utilizados.
Unicode y Conjunto de Caracteres Universal (UCS) ISO/IEC 10646 definen un
conjunto de caracteres mucho mayor, y sus diferentes formas de codificación han
empezado a reemplazar ISO 8859 y ASCII rápidamente en muchos entornos. Mientras
que ASCII básicamente usa códigos de 7-bits, Unicode y UCS usan "code points" o
apuntadores relativamente abstractos: números positivos (incluyendo el cero) que
asignan secuencias de 8 o más bits a caracteres. Para permitir la compatibilidad,
Unicode y UCS asignan los primeros 128 apuntadores a los mismos caracteres que el
código ASCII. De esta forma se puede pensar en ASCII como un subconjunto muy
pequeño de Unicode y UCS. La popular codificación UTF-8 recomienda el uso de uno a
cuatro valores de 8 bits para cada apuntador, donde los primeros 128 valores apuntan a
los mismos caracteres que ASCII. Otras codificaciones de caracteres como UTF-16 se
parece a ASCII en cómo representan los primeros 128 caracteres de Unicode, pero
tienden a usar 16 a 32 bits por carácter, así que requieren de una conversión adecuada
para que haya compatibilidad entre ambos códigos de carácter.

La palabra ASCIIbético (o, más habitualmente, la palabra "inglesa" ASCIIbetical)


describe la ordenación según el orden de los códigos ASCII en lugar del orden
alfabético.[4]

La abreviatura ASCIIZ o ASCIZ se refiere a una cadena de caracteres terminada en cero


(del inglés "zero").

Código de detección de errores.

Un proceso de comunicación puede tener lugar en diversas formas: por ejemplo al hacer
una llamada telefónica, al enviar un telegrama, al usar un lenguaje de signos. En tales
casos, el proceso involucra el flujo de información a través de un medio, el cual va del
remitente al receptor. El medio que lleva la información puede ir de la mímica al habla,
o la electricidad al agua, o una secuencia de dígitos binarios y puede ser tan intangible
como cualquier cosa mediante la cual una mente humana puede afectar a otra. En
cualquier caso, un proceso de comunicación involucra un flujo de información a través
de un sistema.

Un sistema de comunicación ideal se puede representar por tres partes esenciales a


saber:

• Transmisor, remitente o fuente


• Canal o medio de almacenamiento
• Receptor

En la práctica, un canal de comunicación está sujeto a una a diversidad de


perturbaciones que resultan en una distorsión del mensaje que se está trasmitiendo.
Cualquier alteración de estas se llama ruido. La forma en la cual el ruido puede aparecer
depende del canal.

Por ejemplo, en una conversación entre dos personas, el canal puede estar sujeto a
ruidos, tales como el viento, un carro que pasa, otras voces. En cualquier caso, se trata
de minimizar las pérdidas debidas al ruido y recuperar de una manera óptima el mensaje
original cuando se ha contaminado por la presencia del ruido.

Un dispositivo que se puede usar para mejorar la eficiencia del canal de comunicación
es un codificador que transforma el mensaje que llega de tal manera que se puede
detectar la presencia del ruido en el mensaje transformado. El uso de un codificador
requiere que se use un decodificador para transformar el mensaje codificado a su forma
original que el receptor pueda entender.

Es posible no sólo detectar la distorsión debida al ruido si no también corregir el


mensaje al usar un codificador apropiado y mostrar la presencia del ruido en el canal. El
modelo sería así:

Esta parte se ocupa de los canales de comunicación que manejan símbolos de un


conjunto especifico llamado alfabeto del lenguaje de comunicación. Cualquier elemento
del alfabeto se llamará un símbolo, letra o carácter. Una secuencia finita de caracteres se
llama mensaje o palabra.

La longitud de una palabra x que se denota L(x) es el número de símbolos de la palabra.

Cuando los mensajes originalmente expresados en un lenguaje, se transforman en un


mensaje en otros lenguajes, de una manera que sea comprensible para ambos, el
transmisor y el receptor, de modo que estos mensajes se puedan transformar sin
ambigüedades al regreso, entonces se puede decir que estos mensajes están codificados.

El proceso de codificación de o enciframiento es un procedimiento para asociar palabras


de un lenguaje, con ciertas palabras de otro lenguaje de una manera uno a uno. De igual
manera el proceso de decodificación o desciframiento, o es la operación inversa, o
alguna otra transformación uno a uno.

En la mayoría de las aplicaciones el canal de comunicación está limitado a un alfabeto


valuado de manera binaria cuyas señales se pueden denotar como 0 y 1. Un canal así se
llama canal binario.

Cualquier código de n bits s e puede considerar como un subconjunto de todas las


posibles cadenas de n bits.

Las cadenas incluidas en este subconjunto particular se denominan palabras código,


mientras las cadenas que no están incluidas se denominan palabras que no son del
código.

Un código se dice que es un código de detección de errores si tiene la propiedad de


que ciertos tipos de errores pueden transformar palabras del código en palabras que no
son del código.

Suponiendo que se utilizan sólo palabras del código para la transmisión de datos,
cualquier error introducido durante la transmisión se pondrá de manifiesto
inmediatamente puesto que cambiará palabras del código en palabras que no son del
código. Es decir, si la cadena recibida es una palabra del código, los datos son correctos;
si no es una palabra del código, los datos deben ser erróneos
Si en este ejemplo se cambia un mensaje transportado por un canal, debido a
alteraciones o ruido, entonces el receptor cometerá un error indetectable e incorregible
porque cualquiera intercambio de 0 y 1 en una secuencia de código en especial resulta
en una secuencia de códigos diferentes. Por ejemplo si la secuencia 000 para A se
cambia por ruido a 100 entonces se identificará como 100, entonces, se decodificará
como E.
Se modificará ahora el código al añadirle el dígito extra o redundante a cada secuencia
de 3 bits como se muestra en la siguiente tabla:

Símbolo Código original Código redundante


A 000 0000
B 001 0011
C 010 0101
D 011 0110
E 100 1001
F 101 1010
G 110 1100
H 111 1111

Este dígito de más se escoge para que sea 1 si la suma de los tres dígitos del código
original es impar; si no sucede así, se escoge para que sea 0.

Un error sencillo en una secuencia de código en particular produce otra secuencia que
no pertenece al código. Por ejemplo, la secuencia de código 0000 para A se podría
transformar por el ruido en cualquiera de las secuencias 0001, 0010, 0100, 1000.

Ninguna de estas secuencias resultantes aparece en el código y de inmediato se detecta


un error. Así la redundancia en el código permite detectar un error de un dígito por
secuencia de código.

Obsérvese que la secuencia 0001 se puede producir por un error de un solo dígito de las
secuencias para A, B, C, o E, por consiguiente, no es posible corregir el error. Al
introducir redundancias adicionales, es posible tanto detectar como corregir uno o más
errores por secuencia de códigos.

Se tendrán en cuenta las siguientes definiciones:

Un error en un dato binario se define como un valor incorrecto en uno más bits.

Un ERROR SIMPLE es un valor incorrecto en un solo bit.

Un ERROR MULTIPLE se refiere a la existencia de uno o más bits incorrectos.


Sean I y J palabras de información binaria de n bits. El peso de I, w(I), se define como
el número de bits de I igual a 1.

La DISTANCIA entre I Y J que se designa por d(I, J), es igual al número de bits en que
difieren I y J.

Ejemplo 6.

Sí I=(01101100) y J= (11000100)

w(I)=4, w(J)=3, d(I, J)=3

La tarea básica en la transmisión de información es eliminar la probabilidad de recibir


una palabra diferente a la enviada.

Esto se hace de la siguiente forma:

Se elige un entero n > m y una función uno a uno e: Bm Bn.La función e es la función
de codificación. Si a  Bm, entonces e(a)  Bn, es la palabra codificada que representa
a a. Los ceros y unos adicionales pueden proporcionar el medio para detectar o corregir
los errores producidos en el canal de transmisión así:

En general se pueden presentar errores en la transmisión. La palabra codificada ha sido


trasmitida con k o menores errores si x y xt difieren en al menos una pero no más de k
posiciones.
Sí e: Bm B n es una función de codificación, se dice que detecta k o menos errores si al
trasmitir x= e(b) con k o menos errores, entonces xt no es una palabra codificada.

Ejemplo 7. (código de verificación de paridad)

La siguiente función de codificación e: Bm Bm+1 es el código de verificación de


paridad.

Hay que observar que bm+1 es cero si y solo si el número de unos en b es par. Lo anterior
implica que cada palabra calificada e(b) tiene peso par. Un solo error en la transmisión
de la palabra codificada cambia la palabra recibida por una palabra de peso impar y por
lo tanto es posible detectarla. De la misma forma se puede detectar cualquier número
impar de errores.

Ejemplo 8.

Sea en el ejemplo anterior m = 3, Entonces:

e(000) = 0000

e(001) = 0011

e(010) = 0101

e(011) = 0110

e(100) = 1001

e(101) = 1010
e(110) = 1100

e(111) = 1111

Suponga ahora que b = 111, entonces x = e(111) = 1111. Si el canal de transmisión


transmite x como xt = 1101 sabemos que ha ocurrido un número impar de errores. Se
define la distancia mínima de una función de codificación e: Bm  Bn como la mínima
distancia entre todas las distintas parejas de palabras codificadas.

Ejemplo 9.

Considere la siguiente función de codificación:

e(00) = 00000

e(10) = 00111 Se puede verificar que la distancia mínima

e(01) = 01110 es dos.

e(11) = 11111

10.5.1 Teorema. Una función de codificación e: B m Bn puede detectar K ó menos


errores si y sólo si su distancia mínima es al menos K + 1.

Demostración.

Suponga que la distancia mínima entre dos palabras codificadas es al menos K + 1.

Sea b  Bm, y sea x = e(b)  B n la palabra codificada que representa a b. Entonces x es


transmitida y recibida como xt1. Si xt fuera una palabra codificada diferente de x,
entonces d(x, xe)  K + 1 de modo que x sería transmitida con K ó menos errores,
entonces xt no puede ser una palabra codificada. Esto significa que e puede detectar K ó
menos errores.
El recíproco se deja como ejercicio.

Ejemplo 10.

Considere la función de codificación e: B3 B8 definida por:

e(000) = 00000000 e(101) = 10001001

e(001) = 10111000 e(110) = 00011100

e(010) = 00101101 e(111) = 00110001

e(011) = 10010101

e(100) = 10100100

¿ Cuántos errores detectará e?

La distancia mínima de e es 3. Por tanto, el código detectara K o menos errores si y sólo


si su distancia mínima es al menos K + 1.

Como la distancia mínima es 3, se tiene que 3  K + 1, o K  2,

Así, el código detectará 2 o menos errores. En cursos mas avanzados se verán


procedimientos para generar ciertos códigos llamados códigos de grupo.

10.5.2 Decodificación y corrección de errores. Considérese una función de


codificación e: Bm  Bn. Una vez la palabra x = e(b)  Bn con b  Bm, es recibida
como la palabra xt, surge el problema de identificar la palabra b que era el mensaje
original.

Una función sobre d: Bn  Bm es una función de codificación asociada a e sí d(xt) = b’


 Bm. Si el canal de transmisión no tiene unido, entonces b’ = b.
La función de decodificación debe ser sobre, para que cada palabra recibida pueda
decodificarse para obtener una palabra de Bm. Esta función decodifica en forma
adecuada las palabras recibidas de manera correcta, pero la decodificación de las
palabras recibidas en forma inadecuada puede o no ser correcta.

Una función e de codificación y una función d de decodificación corrige k o menos


errores si siempre que x = e(b) se trasmite en forma correcta, o k o menos errores, y se
recibe xt, entonces d (xt) = b. así xt se decodifica como el mensaje correcto b.

Se puede demostrar que se corrigen k o menores errores sí y sólo sí la distancia mínima


de e es al menos 2k+1.

Ejemplo 11.

Considérese la función de codificación definida como e: Bm B3m definida como e(b) =
b1 b2…bmb1 b2…bmb1 b2…bm donde b= b1 b2…bm.

O sea:

E(000)= 000000000

E(001)= 001001001

E(010)= 010010010

E(011)= 011011011

E(101)= 101101101

E(110)= 110110110

E(100)= 100100100

E(111)= 111111111
Si, por ejemplo, se supone b = 011 y que el canal de transmisión recibe 011111011. Esta
no es una palabra codificada, por lo que se ha detectado un error. Así es posible detectar
un error simple y dos errores arbitrarios cualesquiera.

¿Cómo se corregiría?

Considere la función de decodificación d: B3m  Bm tal que

Y = y1y2…ymym+1y2my2m+1…y3m, donde d(y)= z1 z2…zm

Es decir la función de decodificación d examina el i-ésimo dígito en cada uno de los tres
bloques trasmitidos.

Se elige el dígito que aparece al menos dos veces en estos tres bloques como el i-esimo
dígito decodificado.

Así si m = 3 y b = 011 y el canal comete un error y se recibe x t=011111011,entonces,


como los primeros dígitos en dos de los tres bloques son cero, el primer dígito se
codifica como cero.

De manera análoga el segundo dígito se decodifica como uno, ya que los tres segundos
dígitos en los tres bloques son unos.

Por ultimo, el tercer dígito también se decodifica como uno, por una razón análoga, por
tanto d(xt)=011. Es decir, este código corrige cualquier error simple.

Hay códigos que permiten simultáneamente detectar y corregir errores; para ello basta
usar un código con una distancia mínima de 2x + y + 1, que permite corregir hasta x
errores de un solo bit y detectar hasta y errores adicionales

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy