Históricamente, los bytes no siempre tienen un tamaño de 8 bits (para el caso, las computadoras tampoco tienen que ser binarias, pero la informática no binaria ha visto mucha menos acción en la práctica). Es por esta razón que las normas IETF e ISO a menudo usan el término octeto - no usan byte porque no quieren suponer que significa 8 bits cuando no lo hace.
De hecho, cuando se acuñó byte se definió como una unidad de 1-6 bits. Los tamaños de bytes en uso a lo largo de la historia incluyen 7, 9, 36 y máquinas con bytes de tamaño variable.
8 fue una mezcla de éxito comercial, ya que era un número bastante conveniente para las personas que lo pensaban (que se habría alimentado) y sin duda otras razones que ignoro por completo.
El estándar ASCII que menciona supone un byte de 7 bits, y se basó en los estándares de comunicación anteriores de 6 bits.
Editar: Puede valer la pena añadir a esto, como algunos insisten en que los bytes que dicen son siempre octetos, son confusas bytes con palabras.
octeto es un nombre dado a una unidad de 8 bits (del latín para ocho). Si está usando una computadora (o en un nivel de abstracción más alto, un lenguaje de programación) donde los bytes son de 8 bits, entonces esto es fácil de hacer, de lo contrario necesita algún código de conversión (o cobertura en hardware). El concepto octet surge más en estándares de red que en informática local, porque al ser neutral en arquitectura permite la creación de estándares que pueden usarse para comunicarse entre máquinas con diferentes tamaños de bytes, de ahí su uso en IETF e ISO estándares (por cierto, ISO/IEC 10646 usa octeto donde el estándar Unicode usa byte por lo que es esencialmente - con algunas restricciones adicionales menores en la última parte - el mismo estándar, aunque el estándar Unicode detalla que significa octeto por byte aunque los bytes pueden ser de diferentes tamaños en diferentes máquinas). El concepto de octeto existe precisamente porque los bytes de 8 bits son comunes (de ahí la elección de utilizarlos como base de dichos estándares) pero no universales (de ahí la necesidad de otra palabra para evitar la ambigüedad).
Históricamente, un byte era el tamaño utilizado para almacenar un personaje, una cuestión que a su vez se basa en prácticas, normas y estándares de facto anteriores a las computadoras utilizadas para télex y otros métodos de comunicación, comenzando quizás con Baudot en 1870 (no sé de ningún anterior, pero estoy abierto a las correcciones).
Esto se refleja por el hecho de que en C y C++ la unidad para almacenar un byte se llama char
cuyo tamaño en bits está definido por CHAR_BIT
en el encabezado estándar limits.h. Diferentes máquinas usarían 5,6,7,8,9 o más bits para definir un personaje. En estos días, por supuesto, definimos caracteres como 21 bits y utilizamos diferentes codificaciones para almacenarlos en unidades de 8, 16 o 32 bits (y formas no autorizadas para Unicode, como UTF-7 para otros tamaños), pero históricamente esa era la como era.
En los idiomas que intentan ser más uniformes en todas las máquinas, en lugar de reflejar la arquitectura de la máquina, byte
tiende a corregirse en el idioma, y actualmente esto significa que se define en el lenguaje como de 8 bits. Dado el momento en la historia en el que se crearon, y que la mayoría de las máquinas ahora tienen bytes de 8 bits, la distinción es en gran parte discutible, aunque no es imposible implementar un compilador, tiempo de ejecución, etc. para dichos idiomas en máquinas con diferentes tamaños bytes, simplemente no tan fácil.
Una palabra es el tamaño "natural" para una computadora determinada. Esto está menos claramente definido, porque afecta algunas preocupaciones superpuestas que generalmente afectarían, pero que podrían no coincidir. La mayoría de los registros en una máquina tendrán este tamaño, pero otros no. El tamaño de dirección más grande sería una palabra, aunque este no sea el caso (el Z80 tenía un byte de 8 bits y una palabra de 1 byte, pero permitía duplicar los registros para dar soporte de 16 bits, incluyendo 16 bits direccionamiento).
nuevo vemos aquí una diferencia entre C y C++ donde int
se define en términos de palabra de tamaño y long
estando definida para tomar ventaja de un procesador que tiene un concepto "de largo palabra" debería tales existir, aunque posiblemente siendo idéntica en un caso dado a int
. Los valores mínimo y máximo están de nuevo en el encabezado limits.h. (De hecho, con el paso del tiempo, int
se puede definir como más pequeño que el tamaño de palabra natural, como una combinación de consistencia con lo que es común en otros lugares, reducción en el uso de memoria para una serie de ints, y probablemente otras preocupaciones que no hago t saber de).
Java y.Los lenguajes NET tienen el enfoque de definir int
y long
como corregidos en todos los architecutres, y hacer frente a las diferencias un problema para el tiempo de ejecución (particularmente el JITter). Notablemente, sin embargo, incluso en .NET, el tamaño de un puntero (en código inseguro) variará dependiendo de la arquitectura para que sea el tamaño de palabra subyacente, en lugar de un tamaño de palabra impuesto por el idioma.
Por lo tanto, octeto, byte y palabra son todos muy independientes entre sí, a pesar de la relación de octeto == byte y palabra que es un número entero de bytes (y un número completo de ronda binaria como 2, 4, 8 etc. .) siendo común hoy.
[dos bits, cuatro bits, seis bits, un dólar] (http://en.wikipedia.org/wiki/Bit_%28money%29) –