¿Cuál es la diferencia entre una palabra y un byte?

93

He hecho algunas investigaciones. Un byte tiene 8 bits y una palabra es la unidad más pequeña que se puede direccionar en la memoria. La longitud exacta de una palabra varía. Lo que no entiendo es cuál es el punto de tener un byte. ¿Por qué no decir 8 bits?

Le hice esta pregunta a un profesor y me dijo que la mayoría de las máquinas en estos días son direccionables por bytes, pero ¿cómo sería eso una palabra?

Peter Cordes
fuente
12
Es mejor evitar el término "palabra" debido a su ambigüedad. O hágalo más preciso diciendo palabra de 16 bits, palabra de 32 bits, ...
starblue
2
¿Es ventajoso que una palabra sea más grande o más pequeña?
2
@ quest4knoledge una palabra más grande permite punteros más grandes (también conocidos como más RAM) y permite procesar rápidamente números más grandes. También puede permitir que algunas operaciones como memset sean más rápidas, al trabajar en bloques más grandes. Sin embargo, los procesadores con una palabra más grande requieren más transistores en el procesador y pueden consumir un poco más de energía.
VoidStar
@VoidStar y una palabra más grande significarían un espacio de direcciones más pequeño, ¿o estoy confundido?
1
Para responder a la pregunta "cuál es el punto de tener un byte", es historia. Las CPU no empezaron a ser capaces de manejar nada más grande que un "byte" (los procesadores anteriores solo manejaban nybbles (4 bits) pero el término nunca se puso de moda). La primera CPU de importancia fue la Intel 8086/8088. Fue diseñado para manejar instrucciones construidas alrededor de "bytes", por eso también nos referimos a la memoria en términos de xBytes, por ejemplo, GigaBytes, porque la unidad básica de memoria direccionable era el byte. 'K es una referencia a KiloBytes, de los cuales las primeras PC tenían 16, ampliables a 64, ¡woo hoo!
Fred

Respuestas:

169

Byte : hoy, un byte es casi siempre de 8 bits. Sin embargo, ese no fue siempre el caso y no hay un "estándar" o algo que dicte esto. Dado que 8 bits es un número conveniente para trabajar, se convirtió en el estándar de facto.

Palabra : el tamaño natural con el que un procesador maneja los datos (el tamaño del registro). Los tamaños de palabra más comunes que se encuentran en la actualidad son 8, 16, 32 y 64 bits, pero son posibles otros tamaños. Por ejemplo, había algunas máquinas de 36 bits o incluso máquinas de 12 bits .

El byte es la unidad direccionable más pequeña para una CPU. Si desea establecer / borrar bits individuales, primero debe buscar el byte correspondiente de la memoria, jugar con los bits y luego escribir el byte en la memoria.

Por el contrario, la palabra es la mayor cantidad de bits con los que un procesador puede procesar (como sumas y restas) a la vez. Esa definición es un poco confusa, ya que algunos procesadores pueden tener diferentes tamaños de palabras para diferentes tareas (por ejemplo, procesamiento de números enteros o de coma flotante). El tamaño de la palabra es con lo que funcionan la mayoría de las operaciones.

También hay algunos procesadores que tienen un tamaño de puntero diferente : por ejemplo, el 8086 es un procesador de 16 bits, lo que significa que sus registros tienen un ancho de 16 bits. Pero sus punteros (direcciones) tienen un ancho de 20 bits y se calcularon combinando dos registros de 16 bits de cierta manera.

DarkDust
fuente
9
Excelente respuesta. Yo sólo discutiría con " [la] palabra en contraste es la mayor cantidad de bits con los que un procesador puede procesar ... a la vez ". De hecho, es el fragmento de bits más común, etc. Muchas arquitecturas que han evolucionado con el tiempo tienen un tamaño de palabra que no es el más amplio, pero a menudo están limitadas en lo que pueden hacer con sus valores más amplios.
Ross Patterson
11
Para crédito adicional, un "nibble" es un término común para medio byte. Surgió durante la era temprana de la CPU de microcomputadoras ( por ejemplo , la Intel 8080), y siempre se entendió que era de 4 bits, porque para entonces el byte se había establecido en 8 bits.
Ross Patterson
6
Hoy en día, un byte de 8 bits es un estándar; ver IEC 80000-13: 2008.
user2431763
1
@DebanjanDhar: Sí, no están relacionados. La única relación es que una página es (AFAIK) siempre un múltiplo del tamaño de la palabra.
DarkDust
4
x86 (como de costumbre) complica las cosas: en la terminología de Intel, a wordes de 16 bits, incluso en las CPU x86 modernas donde el tamaño predeterminado del operando es de 32 bits (dword) y el ancho del registro entero es de 64 bits (qword). Y los registros xmm tienen un ancho de 128 bits (se movdqamueven doble-cuádruple). El bus de memoria tiene al menos 64 bits de ancho (y transferencias en ráfagas de 64 bytes = una línea de caché), y las rutas de la unidad de ejecución a la caché tienen al menos 128 bits de ancho, o 256 o incluso 512 bits de ancho. Cualquiera que sea el tamaño de la palabra de máquina nativa del x86 moderno, no es de 16 bits, pero el x86 moderno todavía usa terminología 8086.
Peter Cordes
16

Lo que no entiendo es cuál es el punto de tener un byte. ¿Por qué no decir 8 bits?

Aparte del punto técnico de que un byte no es necesariamente de 8 bits, las razones para tener un término es la simple naturaleza humana:

  • economía de esfuerzo (también conocida como pereza): es más fácil decir "byte" en lugar de "ocho bits"

  • tribalismo: a los grupos de personas les gusta usar jerga / un lenguaje privado para diferenciarlos de los demás.

Sólo déjate llevar. No va a cambiar más de 50 años de terminología de TI acumulada y bagaje cultural quejándose de ello.


FWIW: el término correcto para usar cuando se refiere a "8 bits independientes de la arquitectura del hardware" es "octeto".

Stephen C
fuente
Pensé que el octeto era solo la traducción francesa del byte, gracias;)
Abdelouahab Pp
8

BYTE

Estoy tratando de responder a esta pregunta desde la perspectiva de C ++.

El estándar C ++ define 'byte' como "Unidad direccionable de datos lo suficientemente grande como para contener cualquier miembro del conjunto de caracteres básico del entorno de ejecución".

Lo que esto significa es que el byte consta de al menos suficientes bits adyacentes para acomodar el juego de caracteres básico para la implementación. Es decir, el número de valores posibles debe ser igual o superior al número de caracteres distintos. En los Estados Unidos, los juegos de caracteres básicos son generalmente los juegos ASCII y EBCDIC, cada uno de los cuales puede ser acomodado por 8 bits. Por tanto, se garantiza que un byte tendrá al menos 8 bits.

En otras palabras, un byte es la cantidad de memoria necesaria para almacenar un solo carácter.

Si desea verificar 'número de bits' en su implementación de C ++, verifique el archivo 'limits.h'. Debería tener una entrada como la siguiente.

#define CHAR_BIT      8         /* number of bits in a char */

PALABRA

Una palabra se define como un número específico de bits que la máquina / sistema puede procesar juntos (es decir, en un intento). Alternativamente, podemos decir que Word define la cantidad de datos que se pueden transferir entre CPU y RAM en una sola operación.

Los registros de hardware en una computadora tienen el tamaño de una palabra. El tamaño de Word también define la dirección de memoria más grande posible (cada dirección de memoria apunta a una memoria del tamaño de un byte).

Nota: en los programas C ++, las direcciones de memoria apuntan a un byte de memoria y no a una palabra.

Vaibhav Patle
fuente
6

¿Por qué no decir 8 bits?

Porque no todas las máquinas tienen bytes de 8 bits. Ya que etiquetó esto C, busque CHAR_BITen limits.h.

cnicutar
fuente
6

Una palabra es el tamaño de los registros en el procesador. Esto significa que las instrucciones del procesador como, agregar, mul, etc. están en entradas del tamaño de una palabra.

Pero la mayoría de las arquitecturas modernas tienen memoria direccionable en fragmentos de 8 bits, por lo que es conveniente usar la palabra "byte".

VoidStar
fuente
Entonces, en cierto sentido, ¿el término "byte" se usa solo por conveniencia?
Sí, "byte" fue especialmente conveniente cuando se inventó el término. Como muchas convenciones, una vez que se establecen, persisten. No estoy seguro de si la terminología basada en bytes realmente hace que las computadoras sean más fáciles de entender en el panorama general, pero es la convención dominante y no es como para cambiar pronto.
VoidStar
Byte es el término utilizado para una unidad que se utilizó como carácter en el texto. Históricamente había bytes con tamaños de 6 a 9 bits.
starblue
@starblue ¿cómo es posible que un char ocupe menos espacio que una palabra?
1
@ quest4knoledge: porque la memoria se almacena en trozos más pequeños que las palabras. Una palabra es 32 bits (o 64 bits en las máquinas más nuevas). En un algoritmo que procesa caracteres individuales 1 por 1, SÍ toman una palabra completa solo cuando están dentro de la CPU, y cuando se vuelven a colocar en la RAM, se empaquetan de forma más compacta.
VoidStar
5

En este contexto, una palabra es la unidad que utiliza una máquina cuando trabaja con memoria. Por ejemplo, en una máquina de 32 bits, la palabra tiene una longitud de 32 bits y en una de 64 bits tiene una longitud de 64 bits. El tamaño de la palabra determina el espacio de direcciones.

En programación (C / C ++), la palabra se representa típicamente por el int_ptrtipo, que tiene la misma longitud que un puntero, abstrayendo así estos detalles.

Sin embargo, algunas API pueden confundirlo, como la API de Win32, porque tiene tipos como WORD(16 bits) y DWORD(32 bits). La razón es que la API inicialmente tenía como objetivo máquinas de 16 bits, luego se transfirió a máquinas de 32 bits y luego a máquinas de 64 bits. Para almacenar un puntero, puede utilizar INT_PTR. Más detalles aquí y aquí .

npclaudiu
fuente
5

Parece que todas las respuestas asumen lenguajes de alto nivel y principalmente C / C ++.

Pero la pregunta está etiquetada como "ensamblaje" y en todos los ensambladores que conozco (para CPU de 8 bits, 16 bits, 32 bits y 64 bits), las definiciones son mucho más claras:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
John encontrado
fuente
3
No, estos tamaños solo son válidos en una máquina de 16 bits. Probablemente esté acostumbrado a la programación de Windows que todavía usa estas macros, ya que es un legado de sus días de 16 bits y MS no se ha molestado en corregir esto.
DarkDust
2
Por cierto, debido a que el tamaño de una palabra (y en realidad incluso un byte) puede variar, ISO-C tiene los tipos int<X>_ty uint<X>_t(y más) que deben usarse si desea una variable / parámetro de un tamaño de bit específico.
DarkDust
@DarkDust estamos hablando de lenguaje ensamblador aquí. Los estándares C no son relevantes. Por cierto, estoy programando el ensamblaje de 1980 y se usaban los mismos nombres. (bueno, tal vez excepto qword)
johnfound
Sin embargo, encontré una excepción: en GNU como, .wordpuede ser de 32 bits (por ejemplo, para Sparc ).
DarkDust
Lo sentimos, AS no es un ensamblador. Es un mutante feo, lisiado, miserable, creado con el único objetivo de ser un back-end para los compiladores de HLL.
John encontrado el
3

La longitud exacta de una palabra varía. Lo que no entiendo es cuál es el punto de tener un byte. ¿Por qué no decir 8 bits?

Aunque la longitud de una palabra varía, en todas las máquinas modernas e incluso en todas las arquitecturas antiguas con las que estoy familiarizado, el tamaño de la palabra sigue siendo un múltiplo del tamaño del byte. Por lo tanto, no hay ninguna desventaja en el uso de "byte" sobre "8 bits" en relación con el tamaño de palabra variable.

Más allá de eso, aquí hay algunas razones para usar el byte (u octeto 1 ) en "8 bits":

  1. Las unidades más grandes son convenientes para evitar números muy grandes o muy pequeños: también puede preguntar "por qué decir 3 nanosegundos cuando podría decir 0.000000003 segundos" o "por qué decir 1 kilogramo cuando podría decir 1,000 gramos", etc.
  2. Más allá de la conveniencia, la unidad de un byte es de alguna manera tan fundamental como 1 bit, ya que muchas operaciones normalmente no funcionan a nivel de byte, sino a nivel de byte: direccionamiento de memoria, asignación de almacenamiento dinámico, lectura de un archivo o socket, etc.
  3. Incluso si adoptara "8 bits" como un tipo de unidad, por lo que podría decir "dos 8 bits" en lugar de "dos bytes", a menudo sería muy confuso que su nueva unidad comenzara con un número. Por ejemplo, si alguien dice "cien 8 bits", podría interpretarse fácilmente como 108 bits, en lugar de 100 bits.

1 Aunque consideraré que un byte tiene 8 bits para esta respuesta, esto no es universalmente cierto: en máquinas más antiguas, un byte puede tener un tamaño diferente (como 6 bits . Octeto siempre significa 8 bits, independientemente de la máquina ( por lo que este término se usa a menudo para definir protocolos de red.) En el uso moderno, byte se usa abrumadoramente como sinónimo de 8 bits.

BeeOnRope
fuente
2

Cualquiera que sea la terminología presente en las hojas de datos y los compiladores, un 'Byte' tiene ocho bits. No intentemos confundir a los indagadores y generalidades con las excepciones más oscuras, particularmente porque la palabra 'Byte' proviene de la expresión "By Eight". He trabajado en la industria de semiconductores / electrónica durante más de treinta años y ni una sola vez supe que 'Byte' solía expresar algo más de ocho bits.

Brendan
fuente
Inusual sí (lo sabemos. Un ejemplo es, The texas instruments c54x Google texas instruments c54x byte. Ti.com/lit/ug/spru393/spru393.pdf "Las instrucciones 'C55x son longitudes de bytes variables que varían en tamaño de 8 bits a 48 bits ". stackoverflow.com/questions/2098149/...
barlop
1
No viene de allí en absoluto. El término fue realmente acuñado por W. Buchholtz en IBM a finales de la década de 1950. Fuente: bobbemer.com/BYTE.HTM . Según Bob Bemer, se eligió la ortografía "byte" en lugar de "mordida" para evitar confusiones (con "bit") debido a errores tipográficos. Él lo sabría. ¡Él estaba ahí!
Stephen C
(¿Sólo 30 años? Eres un simple pargo. Aprendí a programar en sistemas donde el tamaño natural del "byte" no era de 8 bits :-))
Stephen C
1

Referencia: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

La unidad básica de almacenamiento de la computadora es el bit. Un bit puede contener uno de dos valores, 0 y 1. El resto del almacenamiento en una computadora se basa en colecciones de bits. Con suficientes bits, es sorprendente cuántas cosas puede representar una computadora: números, letras, imágenes, películas, sonidos, documentos y programas, por nombrar algunos. Un byte es de 8 bits y, en la mayoría de las computadoras, es la porción de almacenamiento más pequeña y conveniente. Por ejemplo, la mayoría de las computadoras no tienen una instrucción para moverse un poco, pero tienen una para mover un byte. Un término menos común es palabra, que es la unidad de datos nativa de una arquitectura de computadora determinada. Una palabra se compone de uno o más bytes. Por ejemplo, una computadora que tiene registros de 64 bits y direccionamiento de memoria de 64 bits normalmente tiene palabras de 64 bits (8 bytes). Una computadora ejecuta muchas operaciones en su tamaño de palabra nativa en lugar de un byte a la vez. Almacenamiento de computadora, junto con la mayor parte del rendimiento de las computadoras, generalmente se mide y manipula en bytes y colecciones de bytes. Un kilobyte o KB es 1.024 bytes un megabyte o MB es 1.024 2 bytes por gigabyte o GB es 1.024 3 bytes por terabyte o TB es 1.024 4 bytes un petabyte o PB es 1.024 5 bytes Computadora los fabricantes a menudo redondean estos números y dicen que un megabyte es 1 millón de bytes y un gigabyte es mil millones de bytes. Las mediciones de redes son una excepción a esta regla general; se dan en bits (porque las redes mueven datos un poco a la vez) 024 5 bytes Los fabricantes de computadoras a menudo redondean estos números y dicen que un megabyte es 1 millón de bytes y un gigabyte son mil millones de bytes. Las mediciones de redes son una excepción a esta regla general; se dan en bits (porque las redes mueven datos un poco a la vez) 024 5 bytes Los fabricantes de computadoras a menudo redondean estos números y dicen que un megabyte es 1 millón de bytes y un gigabyte son mil millones de bytes. Las mediciones de redes son una excepción a esta regla general; se dan en bits (porque las redes mueven datos un poco a la vez)

LiLi
fuente
-1

Si una máquina es direccionable por bytes y una palabra es la unidad más pequeña que se puede direccionar en la memoria, ¡supongo que una palabra sería un byte!

K-Ballo
fuente
Sí. La unidad de memoria mínima direccionable en TMS320C54xx (uno de los DSP de Texas Instruments) es de 16 bits, que también es el tamaño más pequeño de sus registros de uso general. Y el compilador de TI C define char = short = int = 16 bits en él.
Alexey Frunze
No, la mayoría de las máquinas RISC tienen palabras de 32 bits, pero pueden direccionar bytes individuales. En MIPS, por ejemplo, word definitivamente significa 32 bits, pero hay una lbinstrucción (byte de carga) que carga 8 bits.
Peter Cordes
-1

Un grupo de 8 bits se llama byte (con la excepción de que no lo es :) para ciertas arquitecturas)

Una palabra es un grupo de bits de tamaño fijo que son manejados como una unidad por el conjunto de instrucciones y / o el hardware del procesador. Eso significa que el tamaño de un registro de propósito general (que generalmente es más de un byte) es una palabra

En la C, una palabra se suele llamar un número entero =>int

tolicio
fuente
7
Un grupo de 8 bits se denomina octeto.
cnicutar
2
correcto: el término octetse definió para denotar explícitamente una secuencia de 8 bits debido a la ambigüedad asociada con el término byte . Pero me gusta el sonido de bytemejor :)
Tolitius
2
@tolitius: +1 para "Pero me gusta el sonido de bytemejor": Sospecho firmemente que no estás solo en esto y seguro para algunos sistemas de nicho, la "confusión" de un byte posiblemente sea de un tamaño diferente al de 8 bits ya no es relevante en estos días.
Joachim Sauer
-1

Los términos de BYTE y WORD están relacionados con el tamaño del procesador al que se hace referencia. Los procesadores más comunes son / fueron de 8 bits, 16 bits, 32 bits o 64 bits. Estas son las longitudes de PALABRAS del procesador. En realidad, la mitad de una PALABRA es un BYTE, sea cual sea la longitud numérica. Listo para esto, la mitad de un BYTE es un NIBBLE.

Chris Calley
fuente
No, en CPU con palabras de 32 bits y bytes de 8 bits (por ejemplo, MIPS o ARM), la mitad de una palabra son 2 bytes.
Peter Cordes
-3

De hecho, en el uso común, palabra se ha convertido en sinónimo de 16 bits, al igual que byte con 8 bits. Puede resultar un poco confuso ya que el "tamaño de palabra" en una CPU de 32 bits es de 32 bits, pero cuando se habla de una palabra de datos, uno significaría 16 bits. Los microcontroladores con un tamaño de palabra de 32 bits han comenzado a llamar a sus instrucciones "largas" (supuestamente para tratar de evitar la confusión palabra / doble palabra).

Brian Knoblauch
fuente
1
Eso depende completamente del tipo de CPU. Como señala, en máquinas de 32 bits que no son IA32, una "palabra" suele ser de 32 bits.
Ross Patterson
2
@RossPatterson Eso depende completamente de si está desarrollando software o cenando.
Ingeniero
ARM / MIPS / otras arquitecturas RISC convencionales tienen palabras de 32 bits. Es el ancho del registro (en la versión de 32 bits de esos ISA) y el ancho de la instrucción. 16 bits es media palabra, por lo que a las instrucciones ARM les gustaldrh cargar 16 bits y extenderlos a cero en un registro de 32 bits. O ldrshpara cargar y firmar y extender 16 bits.
Peter Cordes