# Bit

En informática o teoría de la información, el bit corresponde a un dígito del sistema de numeración binario y representa la unidad mínima de información. El término es un acrónimo de binary digit (‘dígito binario’; en menor medida llamado bitio). La capacidad de almacenamiento de una memoria digital también se mide en bits, pues esta palabra tiene varias acepciones.
Lo usual es que un registro digital u otras memorias digitales vinculadas con la computación y con las telecomunicaciones, tengan una capacidad de representación de informaciones de por ejemplo 8 bits, 16 bits, 32 bits, 64 bits, etc; una memoria binaria tiene una capacidad efectiva de representación de un bit.
Mientras que en el sistema de numeración decimal se usan diez dígitos (diez símbolos), en binario se usan solo dos dígitos, el 0 y el 1. Un bit puede representar uno de esos dos valores: 0 o 1. Así, se puede ejemplificar un bit como una bombilla que puede estar en uno de los siguientes dos estados:
    apagada o encendida
Asimismo, un bit puede representar dos valores cualesquiera, como verdadero o falso, abierto o cerrado, blanco o negro, norte o sur, etc.

## Agrupación de bits

Hay 4 pares posibles con dos bits :
| Bit 1 | Bit 0 |
| 0 | 0 |
| 0 | 1 |
| 1 | 0 |
| 1 | 1 |
Con un bit podemos representar solamente dos valores o dos diferentes estados, que suelen representarse como 0, 1. Para representar o codificar más información en un dispositivo digital, necesitamos una mayor cantidad de bits. Si usamos dos bits, tendremos cuatro variaciones con repetición posibles:
   $VR_{2}^{2}=2^{2}$
* 0 0 - Los dos están "apagados"
* 0 1 - El primero está "apagado" y el segundo "encendido"
* 1 0 - El primero está "encendido" y el segundo "apagado"
* 1 1 - Los dos están "encendidos"
Con estas cuatro variaciones podemos representar hasta cuatro valores o estados diferentes, como por ejemplo, los colores azul, verde, rojo, y magenta.
A través de secuencias de bits, se puede codificar cualquier valor discreto como números, palabras, e imágenes. Cuatro bits forman un nibble, y pueden representar hasta 2$^4$ = 16 valores diferentes; ocho bits forman un octeto, y se pueden representar hasta 2$^8$ = 256 valores diferentes. En general, con un número n de bits pueden representarse hasta 2$^n$ valores o estados diferentes.
Nota: Un byte y un octeto no son lo mismo. Mientras que un octeto siempre tiene 8 bits, un byte contiene un número fijo de bits, que no necesariamente deben ser 8. En los computadores antiguos, el byte podría estar conformado por 6, 7, 8, o 9 bits. Hoy en día, en la inmensa mayoría de los computadores, y en la mayoría de los campos, un byte tiene 8 bits, siendo equivalente al octeto, pero hay excepciones.

## Valor de posición

En cualquier sistema de numeración posicional, el valor de los dígitos depende de la posición en que se encuentren.
En el sistema decimal, por ejemplo, el dígito 5 puede valer 5 si está en la posición de las unidades, pero vale 50 si está en la posición de las decenas, y 500 si está en la posición de las centenas. Generalizando, cada vez que nos movemos una posición hacia la izquierda el dígito vale 10 veces más, y cada vez que nos movemos una posición hacia la derecha, vale 10 veces menos. Esto también es aplicable a números con decimales.
| | Centenas | Decenas | Unidades | Décimas | Centésimas |
| Valor | 100 | 10 | 1 | $^1$⁄$_{10}$ | $^1$⁄$_{100}$ |
| Potencia | 10$^2$ | 10$^1$ | 10$^0$ | 10$^{-1}$ | 10$^{-2}$ |
Por ejemplo, el número $153{,}7$ puede representarse de la siguiente manera:
$153{,}7=1\cdot 10^{2}+5\cdot 10^{1}+3\cdot 10^{0}+7\cdot 10^{-1}=100+50+3+0{,}7$
El sistema binario funciona similarmente, excepto que cada vez que un dígito binario (bit) se desplaza una posición hacia la izquierda vale el doble (2 veces más), y hacia la derecha vale la mitad (2 veces menos).
| | Dieciséis | Ocho | Cuatro | Dos | Uno |
| Valor | 16 | 8 | 4 | 2 | 1 |
| Potencia | 2$^4$ | 2$^3$ | 2$^2$ | 2$^1$ | 2$^0$ |
Por lo tanto, el número $19$ (en binario $10011$) puede representarse de la siguiente manera:
$10011_{2}=1\cdot 2^{4}+0\cdot 2^{3}+0\cdot 2^{2}+1\cdot 2^{1}+1\cdot 2^{0}=16+2+1=19$.

### Representación gráfica

| 16 | 8 | 4 | 2 | 1 | ← Valor de posición |
| | | | | | Representación gráfica de los bits como bombillas encendidas y apagadas |
| 1 | 0 | 0 | 1 | 1 | ← Dígitos binarios (bits) |
También se pueden representar valores fraccionarios. Los números reales se pueden representar con formato de coma fija o de coma flotante. El número 5,25 puede representarse en binario de coma fija de la siguiente manera:
$4+1+0,25=5,25$
| 4 | 2 | 1 | 1/2 | 1/4 | ← Valor de posición |
| | | | | | Representación gráfica de los bits como bombillas encendidas y apagadas |
| 1 | 0 | 1 | 0 | 1 | ← Dígitos binarios (bits) |
La de arriba es una representación en coma fija de un número real en sistema binario. Aunque la representación de números reales en coma flotante es diferente de lo que aquí se muestra, el esquema da una idea una parte del concepto. La representación en coma flotante es similar a la notación científica en una calculadora de mano, solo que en vez números decimales se usan números binarios y el exponente no está en base 10 sino en base 2.

### Subíndices

Cuando se trabaja con varios sistemas de numeración o cuando no está claro con cuál se está trabajando, es típico usar un subíndice para indicar el sistema de numeración con el que se ha representado un número. El 10 es el subíndice para los números en el sistema decimal y el 2 para los del sistema binario. En los ejemplos de abajo se muestran dos números en el sistema decimal y su equivalente en binario. Esta igualdad se representa de la siguiente manera:
* $19_{10}=10011_{2}$
* $5{,}25_{10}=101{,}01_{2}$

## Bits más y menos significativos

Un conjunto o grupo de bits, como por ejemplo un byte, representa un conjunto de elementos ordenados. Se llama bit más significativo (MSB) al bit que tiene un mayor peso (mayor valor) dentro del conjunto. Análogamente, se llama bit menos significativo (LSB) al bit con menor peso dentro del conjunto. Por ejemplo, en un octeto el bit más significativo es el de la posición 7, y el menos significativo es el de la posición 0:
| Posición | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Valor | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Tomemos, por ejemplo, el número decimal 27 en forma de un octeto binario:
| Posición | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Valor | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| Bit | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
Aquí, el primer 0, el de la izquierda, (que corresponde con el coeficiente de 2$^7$), es el bit más significativo, siendo el último 1, el de la derecha, (que corresponde con 2$^0$), el menos significativo.
En cualquier caso, el bit más significativo es el que generalmente se representa en el extremo izquierdo y el menos significativo el del extremo derecho. Esto es análogo al sistema decimal, en donde el dígito más significativo es el de la izquierda y el menos significativo el de la derecha.

## Little endian y big endian

Little endian y big endian se refieren al orden que las máquinas asignan a los bytes que representan números o valores numéricos. Una máquina little endian asigna los bytes menos significativos en el extremo más bajo de la memoria, mientras que una máquina big endian asigna los bytes más significativos en el extremo más alto. En los computadores, cada byte se identifica con su posición en la memoria (dirección). Cuando se manejan números de más de un byte, estos bytes también deben estar ordenados de menor a mayor, indicando la posición del byte menos significativo y del byte más significativo. De este modo, un byte con el número decimal 27 se almacenaría en una máquina little endian igual que en una máquina big endian, ya que solo ocupa un byte. Sin embargo, para números más grandes los bytes que los representan se almacenarían en distinto orden en cada arquitectura. Este aspecto es particularmente importante en la programación en lenguaje ensamblador o en código máquina, ya que algunas máquinas consideran el byte situado en la dirección más baja de la memoria el menos significativo (arquitectura little endian, como los procesadores Intel) mientras que otras consideran que ese es el byte más significativo (arquitectura big endian, como los procesadores Motorola).
Por ejemplo, consideremos el número hexadecimal entero AABBCCDD, de 32 bits (4 bytes), localizado en la dirección 100 de la memoria. El número ocuparía las posiciones desde la 100 a la 103, pero dependiendo de si la máquina es little o big endian, los bytes se almacenarían de diferente manera:
Little endian (como Intel)
| | 100 | 101 | 102 | 103 | |
| ... | DD | CC | BB | AA | ... |
Big endian (como Motorola)
| | 100 | 101 | 102 | 103 | |
| ... | AA | BB | CC | DD | ... |
En las imágenes de arriba, en donde se representan las posiciones de memoria 100, 101, 102 y 103 creciendo de izquierda a derecha, «parece» que la representación big endian es más natural, ya que el número AABBCCDD lo podemos leer correctamente (ver figura), mientras que en la representación little endian parece que el número está al revés, o «patas arriba». Sin embargo, no hay nada que nos impida imaginar que las direcciones de memoria «crecen» de derecha a izquierda, y al observar la memoria de esta manera, la representación little endian «se ve natural» y es la big endian la que «parece» al revés, como se muestra en las figuras de abajo.
Little endian (como Intel)
| | 103 | 102 | 101 | 100 | |
| ... | AA | BB | CC | DD | ... |
Big endian (como Motorola)
| | 103 | 102 | 101 | 100 | |
| ... | DD | CC | BB | AA | ... |
Independiente de si la máquina es de arquitectura little endian o big endian, los bits dentro de cada byte siempre están en el mismo orden, con el bit más significativo a la izquierda y el menos significativo a la derecha. Los registros del procesador, que pueden ser de 4 a 64 bits, y más, también tienen sus bits en el mismo orden en ambos tipos de máquina. La diferencia entre little y big endian solo existe externamente, en el orden en que los bytes se representan en memoria.

## Arquitecturas de 4, 8, 16, 32 y 64 bits

Cuando se habla de CPUs o microprocesadores de 4, 8, 16, 32, 64 bits, se refiere al tamaño, en número de bits, que tienen los registros internos del procesador y también a la capacidad de procesamiento de la Unidad aritmético lógica (ALU). Un microprocesador de 4 bits tiene registros de 4 bits y la ALU hace operaciones con los datos en esos registros de 4 bits, mientras que un procesador de 8 bits tiene registros y procesa los datos en grupos de 8 bits.
Los procesadores de 16, 32 y 64 bits tienen registros y ALU de 16, 32 y 64 bits respectivamente, y generalmente pueden procesar los datos, tanto en el tamaño en bits de sus registros como, dependiendo de su diseño, en determinados submúltiplos de estos. Así, un procesador de 16 bits puede procesar los datos en grupos de 8 y 16 bits, comportándose como si fuera un procesador tanto de 8 como de 16 bits. Un procesador de 32 bits puede procesar los datos en grupos de 8, 16 y 32 bits, y el procesador de 64 bits puede procesar los datos en grupos de 8, 16, 32 y 64 bits. Para poder hacer esto, los procesadores de 16, 32 y 64 bits generalmente tienen sus registros divididos en otros registros más pequeños. Así, los registros de un procesador de 32 bits, por ejemplo, pueden estar divididos a su vez en registros de 16 y 8 bits y puede hacer operaciones aritméticas, lógicas, de comparaciones, y otras, con cualquiera de sus registros en cualquiera de estos tamaños.
Cuando se habla de procesadores de, digamos 32 bits, nos referimos a su capacidad de procesar datos en hasta 32 bits simultáneamente (también puede procesar datos en 8 y 16 bits). La denominación de "microprocesador de 32 bits" no se refiere al tamaño del bus de datos del CPU ni del bus de direcciones, sino a su capacidad de trabajar normalmente con los datos en el número máximo de bits (salvo alguna excepción).
Por ejemplo, los primeros procesadores de la arquitectura x86, el Intel 8086 y el Intel 8088, eran procesadores de 16 bits, porque tenían registros de 16 bits (y de 8 bits) y sus unidades aritmético lógicas podían realizar operaciones de 16 bits (y de 8 bits). Sin embargo, exteriormente, el 8086 tenía un bus de datos de 16 bits y podía mover datos desde y hacia el CPU en bloques de 8 y 16 bits, mientras que el 8088 tenía un bus de datos de solo 8 bits, y también podía mover datos de 8 y 16 bits desde y hacia el CPU, sin embargo, como su bus de datos era de solo 8 bits, para mover 16 bits de datos tenía que hacer dos operaciones de lectura o escritura, de 8 bits, por su limitado bus de datos. Esto era completamente transparente, los dos procesadores ejecutaban exactamente el mismo conjunto de instrucciones de 16 bits, solo que el 8088 era más lento cada vez que tenía que leer o escribir 16 bits de datos hacia o desde la memoria.