Binario (sistema de números): ¿Qué sucede si un byte tiene 16 bits en lugar de 8?

Perdóname, pero esta no es una pregunta muy inteligente. Es similar a preguntar, decir: “¿Qué pasaría si una mesa fuera un dispositivo sentado en lugar de un dispositivo para colocar cosas?” No haría ninguna diferencia. Todavía tendríamos dispositivos en los que nos sentamos (simplemente los llamaríamos mesas en lugar de sillas) y aún tendríamos dispositivos para poner las cosas (los llamaríamos de otra manera que no sean mesas). De la misma manera, nosotros ‘ d todavía tienen entidades de 8 bits, que son convenientes por varias razones, por lo que se convirtieron en una especie de estándar en la era temprana de los microprocesadores.

También debo mencionar que históricamente, el significado de la palabra “byte” no siempre se limitaba exactamente a 8 bits. Como un ejemplo un tanto extremo, en el DECSystem-10, con un tamaño de palabra de máquina de 36 bits, un “byte” podría referirse a cualquier parte de una palabra de 36 bits (por lo que el tamaño de un byte podría estar entre 1 y 36 bits)

Un byte es la unidad más pequeña direccionable por la arquitectura de su computadora (Byte). 8 bits es el tamaño más común de un byte pero no el único tamaño.

Si un byte en su arquitectura es de 16 bits, entonces, por definición, esa sería la unidad direccionable más pequeña.

En cualquier lenguaje de nivel superior (C y superior), el mayor impacto sería que char y byte serían 16 bits, lo que crearía problemas de compatibilidad cuando se comunicara a través de plataformas (archivos, red, etc.), pero casi con certeza las bibliotecas de soporte del compilador se ocultarían eso de ti.

Entonces … en resumen … a menos que usted sea el vendedor del compilador … no mucho.

En épocas anteriores había más variedad en la longitud de las palabras de máquina.

Independientemente de la longitud, era necesario trabajar con texto, almacenando múltiples caracteres por palabra.

Hubo diferentes representaciones para los caracteres de texto. Algunos mainframes usaban 6 bits, por lo que un carácter era mayúscula A..Z o uno de un rango patentado de caracteres de puntuación. Eso estaba bien cuando la gente usaba impresoras de línea rápida para generar tablas monoespaciadas e informes de datos financieros o matemáticos, pero no era bueno para la poesía (aunque he visto la producción de poesía en tales impresoras).

A medida que el procesamiento de texto se hizo más importante, 8 bits se consideraron más apropiados, ya que felizmente contenía ASCII de EE. UU. (Caracteres imprimibles con códigos decimales 32..126) más un grupo de caracteres de control (códigos decimales 0..31 y 127). En cuanto al octavo bit, a menudo se usaba como un bit de paridad cuando se comunicaba con el equipo, y una gran cantidad de hardware de comunicación, por lo tanto, solo podía comunicar datos en unidades de 7 bits como máximo. En ese momento, la informática se consideraba prácticamente un mundo inglés, con otros idiomas que tenían que abandonar el uso de los acentos, buscar ortografías alternativas o tener sus propios conjuntos de caracteres personalizados (por ejemplo, cirílico, fonético japonés, etc.).

Pero la PC de IBM (y otras máquinas antes de eso) comenzó a usar los 128 códigos superiores, es decir, 128..255, para caracteres especiales útiles para dibujar gráficos de barras y jugar juegos, así como para admitir algunos caracteres acentuados para idiomas importantes además del inglés. En ese momento, los canales de comunicación podían manejar datos de 8 bits, de una forma u otra. La elección de los caracteres para los códigos 128..255 variaba según el país en el que se vendía el hardware de la pantalla, y cada variante diferente se conocía como una página de códigos, de la cual hay muchas, y la traducción entre ellas era una molestia, aliviaba poco por el desarrollo de Unicode.

El conjunto de caracteres ISO 8859.1 (que incorpora ASCII de EE. UU. Y una especie de página de códigos popular de consenso llamada Latin1) se incorpora como códigos 0..255 en Unicode, con los códigos restantes 256..65535 restantes para el soporte de otros idiomas y símbolos, etc. que la mayor parte están ocupados con chino y otros idiomas con símbolos ideográficos). Entonces, Unicode requería 16 bits, que podían mantenerse en un par de bytes de 8 bits. (Más tarde, sin embargo, Unicode se extendió a 11 veces el tamaño original, con códigos especiales utilizados para indicar cuándo un carácter está más allá del rango 0..65535).

Durante mucho tiempo, Windows ha admitido Unicode de 16 bits. No estoy seguro acerca de la extensión. En cuanto a la codificación de texto Unicode, el espacio se ahorra utilizando 8 bits por carácter ASCII de EE. UU., Si se utiliza la codificación UTF-8, en la que los códigos más allá de 127 están representados por grupos de bytes. (Obviamente, esto funciona mejor en el mundo de habla inglesa y en Europa occidental. Y si te apegas al mundo de ASCII de EE. UU., No hay que codificarlo).

El procesamiento de texto es una actividad muy fundamental en las computadoras de hoy en día, por lo que el soporte para cantidades de 8 bits y 16 bits (y 32 bits para manejar la extensión de Unicode) es esencial, y también sirve para cantidades numéricas, por supuesto, donde hay efectivamente una elección de precisión. Más recientemente, con el cambio a CPU de 64 bits, las cantidades admitidas también incluyen palabras de 64 bits, lo que es ideal para las matemáticas de punto flotante, porque hay un estándar IEEE para la representación de punto flotante de 64 bits, que tienen Intel y AMD usado por décadas.

Mientras que un BYTE en los primeros días no era necesariamente de 8 bits, se supone universalmente que es de 8 bits en estos días, y se conoce de manera más inequívoca como OCTET, que es lo que se conocía en francés, dado que los franceses tienden a querer Palabras francesas correspondientes a las inglesas importantes (p. Ej. Le pâté de boeuf).

El término PALABRA también ha tenido diferentes significados dependiendo de las arquitecturas. Durante mucho tiempo podría ser cualquiera que fuera la longitud de palabra de la máquina, luego en el mundo de la PC fue durante mucho tiempo 16 bits, pero los desarrolladores de software han aprendido a su costo que son imprecisos o hacen suposiciones sobre las longitudes de bytes y palabras puede conducir a un desastre futuro al tratar de portar software a nuevas arquitecturas (incluso de X86 a X64), por lo que los lenguajes de programación modernos que permiten el control a dichos niveles tienden a proporcionar nombres de tipos definidos sin ambigüedad, o los estándares de codificación requieren el uso de nombres simbólicos como como UINT64 o INT32 o UINT8 (es decir, un byte sin signo adecuado para ASCII de EE. UU., etc.) que son intencionalmente explícitos.

Entonces, si sugiere que un byte hoy podría ser algo más que 8 bits, tardaría aproximadamente medio siglo demasiado tarde.

No mucho en realidad. Todo estaría en múltiplos de 16 en lugar de múltiplos de 8.

La mayoría de las máquinas de hoy operan con datos de 32 bits o 64 bits, de modo que continuarían haciéndolo, pero la cantidad de bytes por palabra se reduciría a la mitad.

La principal consecuencia podría ser la del costo. Como la unidad mínima de cálculo es de 16 bits, muchos de los bits de orden superior se desperdiciarían en operaciones que involucren números muy pequeños. Por ejemplo, si tuviera una matriz de varios enteros que sabía que estaban en el rango de digamos 0-50, entonces me gustaría declarar una matriz de la unidad más pequeña (byte en Java o char en C) posible, pero esto tomaría más memoria si la unidad tenía 16 bits en lugar de 8 bits.

Como el costo de la memoria física es proporcional al número de bits (no bytes), pagaría aproximadamente el mismo costo por 2 GB de RAM en una máquina de 16 bits por byte que pagaría por 4 GB de RAM en una máquina de 8 bits por byte. Por lo tanto, el número de unidades direccionables con las que puede trabajar sería menor por el mismo costo.

Dicho esto, no es necesariamente mejor trabajar con una unidad más pequeña como bytes de 4 bits porque entonces su máquina de 64 bits tiene que soportar un nivel más de operación (por ejemplo, agregar enteros de 64 bits, enteros de 32 bits, 16- enteros de bits, enteros de 8 bits Y enteros de 4 bits). Esto provocaría que el conjunto de instrucciones y el circuito ALU sean un poco más complejos.

Al final, supongo que es solo una compensación, pero siempre es bueno tener una unidad que tenga una potencia de 2 para que el direccionamiento de los bits se vuelva eficiente.

Históricamente, existían muchas arquitecturas de este tipo, incluyendo 12, 15, 16, 18, 36, 60 y otros anchos de “byte” (múltiplos de 3 bits eran comunes), pero en realidad llamamos a estas ” palabras ” y arquitecturas con dirección de palabras . Un sistema con palabras específicas de 16 bits fue la familia DG Nova. (Como mencionan algunas otras respuestas, esta sigue siendo una característica arquitectónica de algunos procesadores, como los DSP).

El byte de 8 bits no se hizo universal hasta los años 1970 y 1980, y uno de los principales impulsores fue la popularidad del microprocesador de 8 bits, el PDP-11 en minicomputadoras y sistemas más grandes de IBM y DEC.

El octeto de ocho bits resultó ser el tamaño más conveniente para un byte. El Univac 1106, para el cual escribí programas de lenguaje de alto nivel, tenía un byte de seis bits. Err, al menos desde la perspectiva de un lenguaje de programación de alto nivel (en retrospectiva, no aprendí el lenguaje de máquina, entonces, ¿era solo direccionable por palabra?) También le dio la opción de usar bytes de nueve bits, por lo tanto, tenía Una palabra de 36 bits.

(Hizo cálculos de coma flotante de 72 bits. Esos pocos bits adicionales lo hicieron más útil para el trabajo científico, en comparación con los 64 bits ya comunes).

Debía elegir trabajar con un compilador de bytes de seis bits o un compilador de bytes de nueve bits en la máquina. No recuerdo haber podido mezclarlos.

Se desató el infierno después de que la gerencia compró un mainframe IBM de ocho bits para reemplazarlo. Tanto la gerencia como IBM dijeron con soltura que Fortran es Fortran y COBOL es COBOL. Simplemente haga algunos ajustes y recompile en la nueva máquina. Pero el código estaba tan intrincadamente enredado en el tamaño del byte que eso no funcionaría, y nadie me escucharía (solo tenía 19 años). Así que dejé de ir a la universidad. Creo que mis programas Fortran de $ 90K (costo de desarrollo) costaron alrededor de $ 100K en dólares de 1981 para traducir de un compilador de bytes de nueve bits a un compilador de bytes de ocho bits. Sé que todo el proyecto superó cuatro veces el presupuesto.

En los primeros días se experimentaron otros tamaños de bytes. Si define un byte como el elemento direccionable más pequeño, entonces una compañía holandesa construyó una computadora con un byte de un bit. Pero los holandeses son especiales.

El bit fue estandarizado de manera similar por prueba y error. Los rusos construyeron una máquina trinaria en los primeros días (me gusta imaginar que el bit se llamaba tit) y, por supuesto, las máquinas decimales se experimentaron con: máquinas reales de diez estados, no decimal codificado en binario.

Otros detalles fueron estandarizados a lo largo de los años. No he visto una máquina que no fuera el complemento de dos en décadas. Pero las máquinas complementarias de uno eran comunes alguna vez.

Como “byte” (o “char” en C / C ++) depende de la arquitectura (o incluso del compilador) (aunque para la mayoría de las arquitecturas son de 8 bits), existe (en C / C ++) “int8_t”, “uint32_t”, etc. para hacer explícito el tamaño de bits (y, por lo tanto, también el rango).

Por esa razón, los arquitectos de red y las personas involucradas con las aplicaciones de red comenzaron a hablar sobre “octetos” en lugar de “bytes” (y debido a las diferencias en cómo se presentan los enteros de varios bytes / octetos múltiples, “orden de red” frente a ” orden de host “.)

En realidad, el tamaño de un byte depende de la arquitectura. Es solo que estamos acostumbrados a arquitecturas donde hay 8 bits. Lee este artículo de Wikipedia. Byte

Un byte no tiene oficialmente 16 bits. Según la Organización Internacional de Normalización, tiene 8 bits.

En su lugar, la pregunta debe volverse a plantear, ya que, si un byte tuviera 16 bits en lugar de 8.

Entonces, una gran cantidad de desarrolladores tropezaron con codificaciones de caracteres sería feliz. UTF-16 (Unicode-2) sería el predeterminado en todas partes.

Para ser claros, estamos hablando de qué pasaría si la arquitectura de una computadora tuviera un valor de 16 bits como la unidad básica de memoria direccionable.

No hay nada ilógico en eso. A lo largo de los años, las computadoras han crecido en la cantidad de bits utilizados en la memoria de direccionamiento, se ha convertido en un estándar actual para máquinas no integradas de 64 bits, pero el tamaño de la unidad básica de memoria se ha estancado en 8 bits.

Existe el riesgo de mucho espacio muerto en el texto codificado ASCII o UTF-8 y esperaría que muchas API empaqueten 2 caracteres en una palabra de 16 bits detrás de escena.

El lenguaje C (y por herencia C ++) combinó ‘byte’ y ‘carácter’ desde el principio, por lo que, por un lado, estaría atascado con todo ese espacio muerto en plataformas que usaban UTF-8 como codificación nativa. Sin embargo, por otro lado, C (& C ++) definen una constante marco CHAR_BIT ( #include o #include respectivamente) que le permite codificar programas que son independientes del tamaño del byte.
Pero de nuevo, muchos códigos e interfaces populares (incluido POSIX) suponen bytes de 8 bits. Eso hace que, junto con el hecho de que mejore la interoperabilidad si las computadoras acuerdan el tamaño de una unidad básica de datos, me haga pensar que hay pocas posibilidades de que las computadoras de bytes de 16 bits se conviertan en algo común. Eso es incluso si finalmente nos dirigimos hacia el despliegue generalizado de arquitecturas de 128 bits.

Dado que el byte se define como 8 bits, es como preguntar qué pasaría si hubiera 14 en una docena en lugar de 12.

Todavía estaríamos haciendo las mismas cosas, de diferentes maneras, y probablemente tendríamos una palabra para 8 bits (la forma en que usamos ‘nybble’ para 4 bits en un mundo de 8 bits).

La razón por la que definimos un bye como 8 bits es que la computación seria comenzó con computadoras que tenían 8 bits de datos (u 8 líneas de datos, desde el punto de vista del hardware). Las CPU de 4 bits nunca llegaron más allá de las calculadoras baratas y algunos controladores integrados.

Esta es una declaración definitiva contrafactual. Es exactamente el mismo tipo de pregunta que aprendí cuando era un niño de cinco años. :
אויב מיין באָבע האט בייצים וואָלט זי זיין מיין זיידע
que traducido libremente es: si mi abuela tuviera 18 ruedas, ¿sería una camioneta PeterBilt ™? Para una traducción más precisa, vaya a translate.google.com

  • @hy

Recuerdo haber trabajado en un dsp donde fue el caso. Lo usamos como unidad principal, tuvimos que lidiar con algunos problemas peculiares como las cadenas. Para mantener pequeños los requisitos de memoria, tuvimos que empaquetar la cadena en medios bytes. Bueno, básicamente fue la única parte difícil con la que tuvimos que lidiar.

Los caracteres Char se convertirían en 16 bits, las cargas de memoria alineadas tendrían un límite de 16 bits y los requisitos de almacenamiento (tanto RAM como disco duro) aumentarían en 2 veces o más.

Un byte con 8 bits se usa comúnmente porque tiene un número mínimo de bits para usar en la arquitectura de la computadora