viernes, 1 de marzo de 2013

Datos y Variables: Bits

La gran mayoria de los lenguajes de programación permiten realizar operaciones sobre variables a nivel de Bits. Es importante saber que todos los dispositivos digitales trabajan con un lenguaje de ceros y unos. Un valor que se almacena en una variable ocupa una determinada cantidad de bits. Un bit puede tomar como valores 0 ó 1. Una cantidad que sea entera positiva, puede ser escrita a nivel de numeros bits. Como ejemplo, se tomará el número 123:

Decimal: 123

Bits: 0b1111011

El "0b" indica que es un formato de valores binarios para no confundirse con valores decimales. Un Byte, se define como una cantidad que puede ser representada con 8 bits. Para considerar las posibles combinaciones que pueden hacerse con 8 bits, primero hacemos un análisis de la siguiente manera:

1 bit -> 2 valores (0 ó 1)

2 bits -> 4 valores (00, 01, 10 11)

n bits-> 2^n valores

Por lo tanto, con 8 bits podemos expresar 256 valores. Si consideramos un valor hexadecimal, que son cantidades en base 16, es decir, son cifras que pueden tomar los valores: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F, entonces al analizar un valor representado con dos cifras hexadecimales, la cantidad de valores que se puenden obtener con ellos son:

16^2 = 256.

ASí, un Byte que es un valor de 8 bits, puede ser representado también por dos cifras hexadecimales, de este análisis podemos apreciar lo siguiente:

2 cifras hexadesimales = 8 bits = 256 valores.

Ahora, una pregunta usual es ¿Cómo se almacenan los valores negativos en bits?. Pues bien, para entender el manejo de  los números negativos (el cual es un estandar para los dispositivos digitales), partimos con observar una sucesión de algunos números impresos en formato binario a partir de un simple código en Java:

0b00000000000000000000000000000000 = 0
0b00000000000000000000000000000001 = 1
0b00000000000000000000000000000010 = 2
0b00000000000000000000000000000011 = 3
0b00000000000000000000000000000100 = 4
0b00000000000000000000000000000101 = 5

0b11111111111111111111111111111111 = -1
0b11111111111111111111111111111110 = -2
0b11111111111111111111111111111101 = -3
0b11111111111111111111111111111100 = -4
0b11111111111111111111111111111011 = -5

La cantidad de bits que se presenta, es el correspondiente a 4 Bytes. Si se hace un análisis detallado, los números positivos se identifican por tener una cantidad de 0's que rellenan los bit's hacia la izquierda para completar los 32 bits (o los 4 Bytes). Para los valores negativos, se rellenan los bits hacia la izquierda con valores de 1. Con los primeros valores (enteros positivos), se observa una secuencia de bits: los valores enteros positivos inician con el cero, despues el 1 y así sucesivamente:

bits -> valor decimal

00 -> 0
01 -> 1
10 -> 2
11 -> 3

Para los valores negativos, la secuencia, inicia con el -1, y es de una analogía inversa al caso de los números enteros positivos, es decir, para el caso anterior, se inicia con 00, y se va alternando con el primer bit a la derecha. Cuando se completa un ciclo con el primer bit de la derecha, se cambia el estado del bit consecutivo a la izquierda. Con valores negativos, la secuencia es similar, solo que inicia con 11:

11 -> -1
10 -> -2
01 -> -3
00 -> -4

De esta manera, para los valores positivos, se alterna de 0 a 1, y para valores negativos se alterna de 1 a 0. Cabe resaltar de nuevo que la máquina detecta el positivo o negativo según el bit que se emplee para competar las cifras hacia la izquierda y completar la cantidad de Bytes que almacenan el valor.

SI hay algo que no se entienda, por favor decirlo para mejorar la redacción.

No hay comentarios:

Publicar un comentario