Sistemas de numeración Un bit es la cantidad mínima de

Anuncio
Sistemas de numeración
Un bit es la cantidad mínima de información que puede manejar una máquina digital (PC,
smartphone, etc). En un bit se puede guardar muy poca información, únicamente un 0 (que
representa el estado "apagado", -"no hay corriente"-) o un 1 (que representa el estado "encendido",
-"sí hay corriente"-). Por eso, los bits se agrupan para obtener conjuntos mayores con más
capacidad. En concreto, a cada conjunto de 8 bits se le da el nombre de byte. De todas maneras, el
byte también se queda corto y se suelen utilizar otros múltiplos. Así, un 1 kilobyte -o KB- son 1024
bytes, 1 megabyte -o MB- son 1024 KB (1048576 bytes), 1 gigabyte -o GB- son 1024 MB
(1073741824 bytes), 1 terabyte -o TB- son 1024 GB (1099511627776 bytes) y 1 petabyte -o PBson 1024 TB (1125899906842624 bytes).
A continuación mostramos la escalera de conversión de unidades donde se ve más
claramente lo recién explicado:
%8
---->
bit
% 1024
--------->
byte
x8
<----
% 1024
--------->
KB
x 1024
<---------
%1024
--------->
MB
x 1024
<---------
x 1024
<---------
%1024
--------->
GB
%1024
-------->
TB
x 1024
<---------
PB
x 1024
<--------
Así, por ejemplo, un ordenador con 640 kilobytes de memoria RAM es un ordenador con
640 conjuntos de 1024 bytes (o lo que es lo mismo, 640x1024x8 bits), mientras que un lápiz USB
con 2 Gigabytes de capacidad puede almacenar 2x1024x1024x1024 bytes(o lo que es lo mismo,
2x1024x1024x1024 x8 bits).
NOTA: Puede ocurrir que los prefijos mega,giga etc alguna vez se interpreten como multiplicadores decimales y no
binarios (1000 en vez de 1024), por lo que hay que estar seguro de cómo se interpretan estos prefijos en un caso
concreto. Y otra precaución: cuando se habla en términos de múltiplos de bits o de bytes, hay que vigilar; si se dice que
una memoria tiene 100 KB estamos diciendo que tiene 100 Kilobytes (es decir, 800 Kilobits): la B mayúscula indica
“bytes”. En cambio, si decimos que una memoria tiene 100Kb estamos diciendo que tiene 100 Kilobits: la b minúscula
indica “bits”. Como se puede ver, la diferencia es importante y hay que tenerla en cuenta porque, entre otras cosas,
mucha propaganda de ISPs muestran las velocidades ofrecidas en múltiplos de bits por segundo (es decir, en Kbps,
Mbps o Gbps) en vez de bytes por segundo (que sería lo más "natural") por lo que, si no nos fijamos, podemos
malinterpretar que su ancho de banda es 8 veces mayor de lo que realmente es.
Debido, pues, a que la representación de la información que una máquina digital es capaz de
reconocer es solamente la combinación de 0 y 1 –representación binaria- , y no la representación
tradicional humana –representación decimal-,deberemos conocer algunas características de esta
nueva manera de notación numérica, que ahora pasaremos a explicar.
Pasar de representación binaria a representación decimal
Un número representado en binario será una serie de dígitos, que deberán ser el 0 o el 1, por
ejemplo el 110010. Para convertir la representación binaria de este número en representación
decimal, asociaremos las potencias de dos (1, 2, 4, 8, 16, 32, 64, 128, 256, etc) consecutivamente a
cada uno de los bits que forman el número (comenzando por la derecha) y sumaremos sólo las
potencias que resulten asociadas a bits con valor 1. Es decir:
110010= 1*32 +1*16 +0*8 +0*4 +1*2 +0*1=1*32+1*16+1*2=50
Otro ejemplo:
111000011=1*256+1*128 +1*64 +1*2 +1*1 = 256+128+64+2+1=451
Pasar de representación decimal a representación binaria
Lo primero que haremos será dividir el número decimal original por 2, obteniendo sólo un
resultado determinado (entero) y un resto (el cual siempre será 0 o 1). Seguiramente repetiremos la
división, obteniendo otra vez el resultado entero y el resto. Deberemos ir repitiendo el proceso hasta
que el cociente sea 1. Una vez llegados a este punto, los dígitios binarios deseados serán este último
cociente y todos los restos de las divisiones realizadas, siendo el bit de "más a la izquierda" ese
último cociente y colocándose a su derecha el resto más cercano, seguido del resto anterior, y del
resto anterior, y así hasta llegar al primer resto obtenido de todos, que será el bit "más a la derecha".
Por ejemplo, queremos pasar el número 50 decimal.
50÷2
0 25÷2
1 12÷2
0 6÷2
0 3÷2
1 1

110010
Si, como ocurre en el ejemplo anterior, el resultado tuviera un número de bits menor a ocho
(lo que forma un byte) y necesitáramos completar el byte, basta con rellenar con ceros a la izquierda
los huecos que falten. Es decir, el resultado anterior es equivalente a 00110010.
Otro ejemplo: para pasar el 451 (decimal) a notación binaria haremos:
451÷2
1 225÷2
1
112÷2
0
56÷2
0 28÷2
0 14÷2
0 7÷2
1 3÷2
1 1

111000011 (o, en 2 bytes: 00000001 11000011)
El sistema hexadecimal
Ya que, por la naturaleza de los ordenadores digitales, los números se representan
internamente en sistema binario, muchas veces es útil representar algunos números en binario en
lugar de en decimal. Pero el sistema binario, aunque sea el más cómodo para las máquinas, suele ser
muy engorroso para los humanos. En cuanto el número alcanza los cuatro o cinco dígitos binarios,
se hace difícil de recordar y resulta muy sencillo equivocarse al escribirlo. Para evitar esta
incomodidad se usa el sistema de notación hexadecimal. Este sistema, en realidad, no es más que un
"maquillaje" del sistema binario que permite a los humanos trabajar más cómodamente, pero ha de
quedar claro que usar el sistema hexadecimal es completamente equivalente a usar el sistema
binario (pero de una forma algo más sencilla).
Cada dígito hexadecimal es equivalente a una combinación concreta de cuatro bits. Si
contáramos las combinaciones posibles de 0 y 1 que se pueden hacer con cuatro posiciones, es fácil
ver que salen 16 (de hecho, hay una fórmula para obtener ese resultado directamente sin tener que
contar "a mano": nºvaloresnºposiciones; por tanto, si nºvalores es 2 (0 y 1) y nºposiciones es 4, sale
24=16). Por tanto, deberá haber 16 dígitos hexadecimales, uno por cada combinación (de ahí,
precisamente, el nombre de "hexadecimal").A continuación se presenta la tabla de equivalencias
entre las diferentes combinaciones de grupos de cuatro bits y el dígito hexadecimal correspondiente
(tal como se puede ver, en lugar de inventar nuevos símbolos para los dígitos del 10 al 15, se usan
letras de la A a la F):
Binario
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Hexadecimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
De esta forma, resulta muy cómodo pasar números de binario a hexadecimal y a la inversa.
Lo único a tener en cuenta al pasar de un sistema a otro es que a cada cuatro bits se le corresponde
un dígito hexadecimal y viceversa. Es decir, el sistema hexadecimal simplemente es una manera de
escribir información binaria de forma mucho más compacta.
Veamos un ejemplo. Hemos visto que el número 50 en binario es 110010. Pasaremos este
número binario a hexadecimal Para ello agruparemos el 110010 en conjuntos de 4 bits comenzando
por la derecha. Si no tuviéramos grupos de cuatro exactos porque algún dígito de más a la izquierda
quedara suelto, rellenaremos con ceros por la izquierda hasta obtenerlos. Si hacemos esto,
obtenemos los grupos 0011 y 0010. Miramos en la tabla y a estos grupos les corresponde los dígitos
hexadecimales 3 y 2, respectivamente. Así, la representación hexadecimal de este byte es 32.
NOTA: Para distinguir en cada momento qué sistema de notación estamos utilizando (la representación 32 podría ser
tanto hexadecimal como decimal y puede prestar a confusión) se sigue el convenio siguiente. Los números
hexadecimales se representan acabando siempre con una “h”. Es decir que 32h es un número hexadecimal (el 50
decimal) y el 32 a secas es el 32 decimal. Y lo mismo pasa con los números binarios: el número 101 puede representar
tanto el 101 decimal como el 5 decimal. Por ello, los números binarios acaban con una “b”, de manera que 101b es,
efectivamente, el 5 decimal.
Veamos ahora el ejemplo contrario: pasar de hexadecimal a binario. Supongamos que
queremos obtener la representación binaria del número 5FA0h. Para ello cogemos de la tabla
anterior los grupos correspondientes a cada dígito hexadecimal en el mismo orden y queda: 01011111-1010-0000 (es decir, dos bytes: 01011111 10100000). Se puede apreciar aquí que es mucho
más fácil recordar una cantidad escrita en hexadecimal que en binario. También es fácil ver que un
byte siempre se representa por una pareja de símbolos hexadecimales, así que dos bytes se
representarán por dos parejas, y así.
Pasar de hexadecimal a decimal es un poco más engorroso. O bien pasamos de hexadecimal
a binario y luego de binario a decimal tal como hemos aprendido, o bien, si lo queremos hacer
directamente tendríamos que utilizar la fórmula 32h= 3*16 1 + 2*160 =48+2=50 . El paso de decimal
a hexadecimal también se podría hacer pasando primero por el binario o, si se desea hacer
directamente, mediante el método de las divisiones sucesivas, así:
24480÷16
0
1530 ÷ 16
10
95÷16
15 5
 5FA0
Representación interna de caracteres.Estándares ASCII y Unicode
Hasta ahora hemos visto cómo los ordenadores trabajan con números utilizando la notación
binaria para representarlos (aunque, de hecho, solo hemos estudiado los números enteros: faltarían
los números negativos, los números decimales...pero lo dejaremos aquí por ahora). No obstante,
¿cómo trabajan con caracteres (es decir, letras minúsculas y mayúsculas, signos de puntuación,
etc)?.
La respuesta es que existe un determinado número de caracteres predefinidos de fábrica en
el hardware de toda máquina moderna que ya están listos para poder ser utilizados por cualquier
sistema o programa. Todos estos caracteres se representan con una combinación de 7 bits
estandarizada por la organización ANSI (American Nacional Standards Institute) en un documento
llamado llamado ASCII (American Standard Code for Interchange –Código estándar para el
intercambio de información). Este documento en realidad es una tabla de correspondencia (grabada
en algún chip de cualquier máquina) que asocia una determinada combinación de 7 bits a un
determinado caracter. Esta tabla se muestra aquí: http://www.asciitable.com
NOTA: Las 32 primeras combinaciones del código ASCII, utilizadas originalmente para funciones de control de
dispositivos se denominan “códigos de control” y son códigos no imprimibles, la mayoría ya en desuso.
Ya hemos dicho que esta tabla está grabada en el hardware de cualquier PC estándar. No
obstante, cuando se trabaja con datos, es más rápido y más eficaz para la CPU utilizar 8 bits –un
byte- en lugar de utilizar 7 bits. Como resultado, cuando se almacena un dato utilizando la
codificación ASCII, ocupa ocho bits, igual que cualquier otro dato, pero con la particularidad que en
el código ASCII el bit octavo es “off”. Algunos fabricantes de hardware han aprovechado la
existencia de otras 128 combinaciones con el octavo bit “on” y han creado lo que se conoce
generalmente como conjunto de caracteres en “código ASCII extendido”, que incluye símbolos
internacionales de monedas, caracteres para dibujar líneas, alfabetos distintos del inglés y otros
caracteres que pueden imprimirse. Hay que tener en cuenta que estos caracteres no son
estrictamente ASCII y pueden variar según el creador.
Pronto se vio la necesidad de adoptar un estándar de representación de caracteres que fuera
más amplio que el ASCII extendido. Con éste sólo se tenían 2 8 caracteres diferentes posibles
(recordemos la fórmula de contar combinaciones), por lo que quedaba excluida totalmente la
representación de caracteres chinos, árabes o hebreos. Surgió entonces el estándar Unicode
realizado por un consorcio de empresas. Dentro de este estándar, hay diferentes formatos de
representación: el más habitual es el denominado UTF-16, en el cual se utilizan 2 bytes para la
representación de los caracteres. De esta manera se tienen 216 combinaciones posibles, suficientes
para todos los alfabetos del mundo. El estándar Unicode es compatible con el ASCII; es decir, los
256 primeros caracteres de Unicode coinciden con los del ASCII extendido más popular, de manera
que hay problemas de conversión con aplicaciones más antiguas. No obstante, la gestión y
reconocimiento del estándar Unicode reside en el sistema operativo y las aplicaciones software que
funcionan sobre él, de manera que si no tenemos estos elementos –actualmente, todos los SS.OO
reconocen este estándar- , el único estándar que el ordenador entenderá es el ASCII, que está
implementado a nivel de hardware.
Descargar