Como desarrollador web, entiendo muy poco los datos binarios.
Si tomo la frase "Hola mundo", la convierto a binaria y la almaceno como binaria en una base de datos SQL, parece que los 1 y 0 ocuparían más espacio que las letras. Me parece que usar letras sería como usar compresión, donde un símbolo representa múltiples.
¿Pero es así como funciona realmente?
¿El almacenamiento de datos de texto sin formato ocupa menos espacio que el almacenamiento del mensaje equivalente en binario?
Respuestas:
El texto plano es binario.
Cuando escribe un
H
disco duro, el cabezal de escritura no talla dos líneas verticales y una línea horizontal en el plato, codifica magnéticamente los bits01001000
1 en el plato.A partir de ahí, debería ser obvio que almacenar datos de texto sin formato ocupa exactamente la misma cantidad de espacio que almacenar datos binarios.
Pero el texto plano es solo un formato binario particular 2
El texto sin formato se puede transformar de forma reversible en otros formatos binarios. Una transformación común es la compresión, que generalmente da como resultado una representación más compacta, lo que significa que se utilizan menos bits para representar la misma información.
Dependiendo de lo que esté utilizando para representar el texto sin formato, es posible que pueda usar diferentes formatos binarios para representar la misma información. Esto puede usar más espacio, puede usar menos.
Por ejemplo, los números
5
y1234567
podrían representarse en texto sin formato con caracteres de dígitos, lo que da como resultado estas secuencias de bits en el disco 3 :Alternativamente, puede usar el complemento de dos de 32 bits :
Cuál es una representación menos compacta de
5
, pero una representación más compacta de1234567
.Y hay un número literalmente infinito de otras representaciones que tendrían niveles variables de compacidad y flexibilidad, aunque, en la práctica, se usan mucho menos que muchas representaciones.
1 Suponiendo UTF-8. La secuencia exacta de bits para un personaje depende de la codificación específica que esté utilizando.
2 O realmente, varios formatos, dadas las diversas codificaciones .
3 Si se pregunta cuáles son esos ocho ceros en los extremos, bueno, necesita alguna forma de saber cuánto duran los datos. Las opciones básicamente se reducen a un marcador (usé esto, a través de un byte nulo), espacio dedicado a almacenar la longitud (Pascal usó un byte para almacenar la longitud de una cadena) o un tamaño fijo (utilizado en el complemento de los dos siguientes ejemplo).
fuente
Me parece una gran cosa divertida para pensar. Binario no es 1s y 0s en la forma en que lo hablas.
Imagina que hay una cantidad, puedo decirte qué cantidad es de muchas maneras diferentes:
Nine
en inglésNeuf
en francés9
en números arábigosIX
en números romanos1001
en binario con números arábigoson off off on
en binario con encendido / apagadohigh low low high
en binario representado con voltajes o palancas o niveles de agua o carga eléctrica ... o palabras en inglés 'alto' y 'bajo'Todos representan lo mismo. El punto aquí es que el binario no es 1s y 0s, esa es solo una forma de representar un valor.
Cuando habla de convertir una H en binario, probablemente imagina ver 10101010 en la pantalla, pero eso no es "binario", es un dígito para cada bit binario.
Sí, si convertiste
H
a "binario" como la gente normalmente habla de ello, y luego lo representaste en dígitos arábigos y luego lo almacenaste, ocuparía más espacio de la misma manera que la conversiónH
aaitch
ocupa más espacio.Pero se puede ver que el binario es una forma de representar una cantidad, bien por esa lógica que dice "si convirtiera H en binario y lo representara como
high low high low high low high low
entonces, ¡tomaría 35 caracteres! ¡Eso es aún más10101010
! Pero estos dos son 'binarios' .. Entonces, ¿cómo es uno más grande que el otro?La otra cara de esto es que preguntarse cómo
H
se almacena por un ordenador, y para ver queH
es en sí mismo sólo una forma de representar una cantidad - la misma cantidad72
,01001000
oseventy two
o código de caracteres ASCIIH
. Cuál es la respuesta de 8bittree de que el texto plano es binario, pero este soy yo tratando de mostrar lo que eso significa .Entonces obtienes un patrón de bits en una computadora
01001000
y ¿qué significa? Cualquier cosa: podría hablarse como un número, como parte de un archivo zip, como un personaje, depende de la intención de la persona que lo creó. Si sabe que se supone que es texto sin formato, proviene de una codificación de caracteresH
->01001000
y lo busca en la tabla de codificación de caracteres: ASCII, UTF-8, shift-jis, etc. y encuentra la fuente correcta personaje y sale unH
o lo que sea. O sale el carácter incorrecto si utiliza una búsqueda de codificación diferente a la utilizada por la persona que la creó. Este es el enlace de @Eric Lippert.Pero mientras escribo esto, y como lo piensas,
H
es un byte y01001000
tiene 8 bytes, sí, eso es más espacio. Y sí, es (una representación de) binario. Pero está en un nivel de abstracción más alto que el que usa la computadora: binario mostrado en caracteres ASCII, donde cada personaje se representa detrás de escena con un patrón de bits binarios, cada uno tan grande como elH
único.fuente
No nunca.
Su computadora ya almacena los datos de texto sin formato en la representación binaria equivalente. Almacenar algo como texto sin formato versus binario solo indica cómo la computadora debe interpretar ese flujo binario idéntico .
Eso es un poco cierto. Un personaje representará más de un bit. El problema es que son cosas de diferentes tamaños. Solo se necesita un bit para almacenar un 1 o un 0, pero 8 bits (o más) para almacenar un carácter de texto sin formato. No ganas nada usando personajes.
En todo caso , puede comprimir las cosas de la otra manera. Después de todo, 8 bits son 256 valores posibles diferentes, sin embargo, el texto plano generalmente se limita a letras, números y algunos caracteres de puntuación. No necesita tantos bits como sea necesario.
fuente