Qual é a diferença entre uma palavra e um byte?

93

Eu fiz algumas pesquisas. Um byte tem 8 bits e uma palavra é a menor unidade que pode ser endereçada na memória. O comprimento exato de uma palavra varia. O que não entendo é qual é o sentido de ter um byte? Por que não dizer 8 bits?

Eu fiz a um professor esta pergunta e ele disse que a maioria das máquinas hoje em dia são endereçáveis ​​por byte, mas o que isso significaria uma palavra?

Peter Cordes
fonte
12
É melhor evitar o termo "palavra" por causa de sua ambigüidade. Ou torne mais preciso dizendo palavra de 16 bits, palavra de 32 bits, ...
starblue
2
É vantajoso ter uma palavra maior ou menor?
2
@ quest4knoledge uma palavra maior permite ponteiros maiores (também conhecido como mais RAM) e permite que números maiores sejam processados ​​rapidamente. Também pode permitir que algumas operações, como o memset, sejam mais rápidas, trabalhando em blocos maiores. No entanto, os processadores com uma palavra maior requerem mais transistores no processador e podem consumir um pouco mais de energia.
VoidStar
@VoidStar e uma palavra maior significariam um espaço de endereço menor ou estou confuso?
1
Para responder à pergunta "qual é o sentido de ter um byte" - é história. CPU's não começaram sendo capazes de lidar com nada maior do que um "byte" (processadores anteriores lidavam apenas com nybbles (4 bits), mas o termo nunca realmente pegou). A primeira cpu digna de nota foi a Intel 8086/8088. Ele foi projetado para lidar com instruções construídas em torno de "bytes", é também por isso que ainda nos referimos à memória em termos de xBytes, por exemplo, GigaBytes, porque a unidade básica de memória endereçável era o byte. 'K é uma referência a KiloBytes, dos quais o primeiro PC tinha 16, expansível para 64 - woo hoo!
Fred

Respostas:

169

Byte : hoje, um byte quase sempre tem 8 bits. No entanto, nem sempre foi esse o caso e não existe um "padrão" ou algo que o determine. Como 8 bits é um número conveniente para trabalhar, ele se tornou o padrão de fato.

Word : O tamanho natural com o qual um processador está lidando com os dados (o tamanho do registro). Os tamanhos de palavra mais comuns encontrados hoje são 8, 16, 32 e 64 bits, mas outros tamanhos são possíveis. Por exemplo, havia algumas máquinas de 36 bits ou mesmo máquinas de 12 bits .

O byte é a menor unidade endereçável para uma CPU. Se você deseja definir / limpar bits únicos, primeiro você precisa buscar o byte correspondente da memória, mexer com os bits e, em seguida, escrever o byte de volta na memória.

A palavra, em contraste, é o maior pedaço de bits com o qual um processador pode fazer processamento (como adição e subtração) de uma vez. Essa definição é um pouco confusa, pois alguns processadores podem ter tamanhos de palavras diferentes para tarefas diferentes (processamento de número inteiro vs. ponto flutuante, por exemplo). O tamanho da palavra é o que funciona com a maioria das operações.

Existem também alguns processadores que têm um tamanho de ponteiro diferente : por exemplo, o 8086 é um processador de 16 bits, o que significa que seus registradores têm largura de 16 bits. Mas seus ponteiros (endereços) têm largura de 20 bits e foram calculados combinando dois registradores de 16 bits de uma certa maneira.

DarkDust
fonte
9
Excelente resposta. Eu apenas questionaria " [a] palavra, ao contrário, é o maior pedaço de bits com o qual um processador pode processar ... de cada vez ". Na verdade, é o pedaço de bits mais comum, etc. Muitas arquiteturas que evoluíram ao longo do tempo têm um tamanho de palavra que não é o mais amplo, mas geralmente são limitadas no que podem fazer com seus valores mais amplos.
Ross Patterson
11
Para crédito extra, um "nibble" é um termo comum para meio byte. Ele surgiu durante o início da era da CPU do microcomputador ( por exemplo , o Intel 8080) e sempre foi entendido como sendo de 4 bits, porque nessa época o byte havia se estabelecido para 8 bits.
Ross Patterson
6
Hoje, um byte de 8 bits é um padrão; consulte IEC 80000-13: 2008.
user2431763
1
@DebanjanDhar: Sim, eles não estão relacionados. A única relação é que uma página é (AFAIK) sempre um múltiplo do tamanho da palavra.
DarkDust
4
x86 (como de costume) torna as coisas complicadas: na terminologia da Intel, a wordtem 16 bits, mesmo em CPUs x86 modernas onde o tamanho do operando padrão é 32 bits (dword) e a largura do registro inteiro é 64 bits (qword). E os registros xmm têm 128 bits de largura ( movdqamove double-quad). O barramento de memória tem pelo menos 64 bits de largura (e transferências em rajadas de 64 bytes = uma linha de cache), e os caminhos da unidade de execução para o cache têm pelo menos 128 bits de largura, ou 256 ou até 512 bits de largura. Qualquer que seja o tamanho da palavra-máquina nativa do x86 moderno, não é de 16 bits, mas o x86 moderno ainda usa a terminologia do 8086.
Peter Cordes
16

O que não entendo é qual é o sentido de ter um byte? Por que não dizer 8 bits?

Além do ponto técnico de que um byte não é necessariamente 8 bits, as razões para ter um termo são simplesmente da natureza humana:

  • economia de esforço (também conhecida como preguiça) - é mais fácil dizer "byte" do que "oito bits"

  • tribalismo - grupos de pessoas gostam de usar jargão / uma linguagem particular para separá-los dos outros.

Ir com a corrente. Você não vai mudar mais de 50 anos de terminologia de TI acumulada e bagagem cultural reclamando disso.


FWIW - o termo correto a ser usado quando você quer dizer "8 bits independentes da arquitetura de hardware" é "octeto".

Stephen C
fonte
achei que o octeto fosse apenas a tradução francesa do byte, obrigado;)
Abdelouahab Pp
8

BYTE

Estou tentando responder a essa pergunta da perspectiva do C ++.

O padrão C ++ define 'byte' como “unidade endereçável de dados grande o suficiente para conter qualquer membro do conjunto de caracteres básicos do ambiente de execução”.

O que isso significa é que o byte consiste em pelo menos bits adjacentes suficientes para acomodar o conjunto de caracteres básico para a implementação. Ou seja, o número de valores possíveis deve ser igual ou superior ao número de caracteres distintos. Nos Estados Unidos, os conjuntos de caracteres básicos são geralmente os conjuntos ASCII e EBCDIC, cada um dos quais pode ser acomodado em 8 bits. Portanto, é garantido que um byte terá pelo menos 8 bits.

Em outras palavras, um byte é a quantidade de memória necessária para armazenar um único caractere.

Se você deseja verificar o 'número de bits' em sua implementação C ++, verifique o arquivo 'limits.h'. Deve ter uma entrada como abaixo.

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

PALAVRA

Uma palavra é definida como um número específico de bits que podem ser processados ​​juntos (ou seja, em uma tentativa) pela máquina / sistema. Alternativamente, podemos dizer que o Word define a quantidade de dados que podem ser transferidos entre CPU e RAM em uma única operação.

Os registros de hardware em uma máquina de computador têm tamanho de palavra. O tamanho da palavra também define o maior endereço de memória possível (cada endereço de memória aponta para uma memória de tamanho de byte).

Nota - Em programas C ++, os endereços de memória apontam para um byte de memória e não para uma palavra.

Vaibhav Patle
fonte
6

Por que não dizer 8 bits?

Porque nem todas as máquinas têm bytes de 8 bits. Já que você marcou isso C, procure CHAR_BITem limits.h.

cnicutar
fonte
6

Uma palavra é o tamanho dos registradores no processador. Isso significa que as instruções do processador como add, mul, etc. estão em entradas de tamanho de palavra.

Mas a maioria das arquiteturas modernas possui memória endereçável em blocos de 8 bits, portanto, é conveniente usar a palavra "byte".

VoidStar
fonte
Então, em certo sentido, o termo "byte" é usado apenas por conveniência?
Sim, "byte" era especialmente conveniente quando o termo foi inventado. Como muitas convenções, uma vez estabelecidas, elas persistem. Não tenho certeza se a terminologia baseada em bytes realmente torna os computadores mais fáceis de entender no quadro geral, mas é a convenção dominante e não deve mudar tão cedo.
VoidStar
Byte é o termo usado para uma unidade que foi usada como um caractere no texto. Historicamente, havia bytes com tamanhos de 6 a 9 bits.
starblue
@starblue, como é possível que um char ocupe menos espaço do que uma palavra?
1
@ quest4knoledge: porque a memória é armazenada em pedaços menores que as palavras. Uma palavra é 32bits (ou 64bits em máquinas mais novas). Em um algoritmo que processa caracteres individuais 1 por 1, eles PODEM ocupar uma palavra inteira somente quando dentro da CPU e, quando colocados de volta na RAM, são compactados de maneira mais compacta.
VoidStar
5

Nesse contexto, palavra é a unidade que uma máquina usa para trabalhar com memória. Por exemplo, em uma máquina de 32 bits, a palavra tem 32 bits e em uma de 64 bits tem 64 bits. O tamanho da palavra determina o espaço de endereço.

Na programação (C / C ++), a palavra é tipicamente representada pelo int_ptrtipo, que tem o mesmo comprimento de um ponteiro, abstraindo assim esses detalhes.

No entanto, algumas APIs podem confundi-lo, como a API Win32, porque tem tipos como WORD(16 bits) e DWORD(32 bits). O motivo é que a API inicialmente visava máquinas de 16 bits, depois foi transferida para máquinas de 32 bits e, em seguida, para máquinas de 64 bits. Para armazenar um ponteiro, você pode usar INT_PTR. Mais detalhes aqui e aqui .

npclaudiu
fonte
5

Parece que todas as respostas assumem linguagens de alto nível e principalmente C / C ++.

Mas a questão é marcada como "montagem" e em todos os montadores que conheço (para CPUs de 8 bits, 16 bits, 32 bits e 64 bits), as definições são muito mais claras:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
johnfound
fonte
3
Não, esses tamanhos são válidos apenas em uma máquina de 16 bits. Você provavelmente está acostumado com a programação do Windows, que ainda usa essas macros, pois é um legado de seus dias de 16 bits e a MS não se preocupou em corrigir isso.
DarkDust
2
BTW, porque o tamanho de uma palavra (e realmente até mesmo de um byte) pode variar, ISO-C tem os tipos int<X>_te uint<X>_t(mais mais) que devem ser usados ​​se você quiser uma variável / parâmetro de um tamanho de bit específico.
DarkDust
@DarkDust estamos falando sobre linguagem assembly aqui. Os padrões C não são relevantes. BTW, estou programando assembly de 1980 e os mesmos nomes estavam em uso. (bem, talvez exceto qword)
johnfound
No entanto, encontrei uma exceção: em GNU as, .wordpode ser de 32 bits (por exemplo, para Sparc ).
DarkDust
Desculpe, AS não é um assembler. É um feio, aleijado, miserável, mutante, criado com o único objetivo de ser um back end para os compiladores HLL.
johnfound
3

O comprimento exato de uma palavra varia. O que não entendo é qual é o sentido de ter um byte? Por que não dizer 8 bits?

Embora o comprimento de uma palavra varie, em todas as máquinas modernas e até mesmo em todas as arquiteturas mais antigas com as quais estou familiarizado, o tamanho da palavra ainda é um múltiplo do tamanho do byte. Portanto, não há nenhuma desvantagem específica em usar "byte" em "8 bits" em relação ao tamanho da palavra variável.

Além disso, aqui estão alguns motivos para usar o byte (ou octeto 1 ) em "8 bits":

  1. Unidades maiores são convenientes apenas para evitar números muito grandes ou muito pequenos: você também pode perguntar "por que dizer 3 nanossegundos quando você poderia dizer 0,000000003 segundos" ou "por que dizer 1 quilograma quando você poderia dizer 1.000 gramas", etc.
  2. Além da conveniência, a unidade de um byte é de alguma forma tão fundamental quanto 1 bit, já que muitas operações normalmente não funcionam no nível do byte, mas no nível do byte: endereçamento de memória, alocação de armazenamento dinâmico, leitura de um arquivo ou socket, etc.
  3. Mesmo se você adotasse "8 bits" como um tipo de unidade, de modo que pudesse dizer "dois 8 bits" em vez de "dois bytes", muitas vezes seria muito confuso ter sua nova unidade começando com um número. Por exemplo, se alguém dissesse "cem 8 bits", isso poderia ser facilmente interpretado como 108 bits, em vez de 100 bits.

1 Embora eu considere um byte como sendo 8 bits para esta resposta, isso não é universalmente verdadeiro: em máquinas mais antigas, um byte pode ter um tamanho diferente (como 6 bits . Octeto sempre significa 8 bits, independentemente da máquina ( portanto, este termo é freqüentemente usado na definição de protocolos de rede.) No uso moderno, byte é predominantemente usado como sinônimo de 8 bits.

BeeOnRope
fonte
2

Qualquer que seja a terminologia presente nas planilhas de dados e compiladores, um 'Byte' tem oito bits. Não vamos tentar confundir enquirers e generalidades com as exceções mais obscuras, particularmente porque a palavra 'Byte' vem da expressão "By Eight". Eu trabalhei na indústria de semicondutores / eletrônicos por mais de trinta anos e nenhuma vez conhecido 'Byte' usado para expressar algo mais do que oito bits.

Brendan
fonte
Incomum sim (sabemos disso. Um exemplo é, The texas instruments c54x Google texas instruments c54x byte. Ti.com/lit/ug/spru393/spru393.pdf "As instruções 'C55x são comprimentos de bytes variáveis ​​variando em tamanho de 8 bits a 48 bits ". stackoverflow.com/questions/2098149/...
barlop
1
Não vem daí de forma alguma. O termo foi realmente cunhado por W. Buchholtz na IBM no final dos anos 1950. Fonte: bobbemer.com/BYTE.HTM . De acordo com Bob Bemer, a grafia "byte" foi escolhida em preferência a "mordida" para evitar confusão (com "bit") devido a erros de digitação. Ele saberia. Ele estava lá!
Stephen C de
(Apenas 30 anos? Você é um mero whipper-snapper. Eu aprendi a programar em sistemas onde o tamanho do "byte" natural não era de 8 bits :-))
Stephen C
1

Referência: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

A unidade básica de armazenamento do computador é o bit. Um bit pode conter um de dois valores, 0 e 1. Todos os outros armazenamentos em um computador são baseados em coleções de bits. Com bits suficientes, é incrível quantas coisas um computador pode representar: números, letras, imagens, filmes, sons, documentos e programas, para citar alguns. Um byte tem 8 bits e, na maioria dos computadores, é o menor bloco de armazenamento conveniente. Por exemplo, a maioria dos computadores não tem uma instrução para mover um bit, mas tem uma instrução para mover um byte. Um termo menos comum é palavra, que é a unidade de dados nativa de uma determinada arquitetura de computador. Uma palavra é composta por um ou mais bytes. Por exemplo, um computador que tem registros de 64 bits e endereçamento de memória de 64 bits normalmente tem palavras de 64 bits (8 bytes). Um computador executa muitas operações em seu tamanho de palavra nativo, em vez de um byte por vez. Armazenamento de computador, junto com a maior parte do rendimento do computador, geralmente é medido e manipulado em bytes e coleções de bytes. Um kilobyte, ou KB, é 1.024 bytes por megabyte, ou MB, é 1.024 2 bytes por gigabyte, ou GB, é 1.024 3 bytes por terabyte, ou TB, é 1.024 4 bytes por petabyte, ou PB, é 1.024 5 bytes Computador os fabricantes costumam arredondar esses números e dizer que um megabyte equivale a 1 milhão de bytes e um gigabyte equivale a 1 bilhão de bytes. As medições de rede são uma exceção a esta regra geral; eles são dados em bits (porque as redes movem os dados um pouco de cada vez) 024 5 bytes Os fabricantes de computadores costumam arredondar esses números e dizer que um megabyte é 1 milhão de bytes e um gigabyte é 1 bilhão de bytes. As medições de rede são uma exceção a esta regra geral; eles são dados em bits (porque as redes movem os dados um pouco de cada vez) 024 5 bytes Os fabricantes de computadores geralmente arredondam esses números e dizem que um megabyte é 1 milhão de bytes e um gigabyte é 1 bilhão de bytes. As medições de rede são uma exceção a esta regra geral; eles são dados em bits (porque as redes movem os dados um pouco de cada vez)

LiLi
fonte
-1

Se uma máquina pode ser endereçada por byte e uma palavra é a menor unidade que pode ser endereçada na memória, então acho que uma palavra seria um byte!

K-ballo
fonte
Sim. A unidade endereçável mínima de memória em TMS320C54xx (um dos DSPs da Texas Instruments) é de 16 bits, que também é o menor tamanho de seus registradores de uso geral. E o compilador TI C define char = short = int = 16 bits nele.
Alexey Frunze
Não, a maioria das máquinas RISC tem palavras de 32 bits, mas podem endereçar bytes únicos. No MIPS, por exemplo, word definitivamente significa 32 bits, mas há uma lbinstrução (load byte) que carrega 8 bits.
Peter Cordes
-1

Um grupo de 8 bits é chamado de byte (exceto onde não é :) para certas arquiteturas)

Uma palavra é um grupo de bits de tamanho fixo que é tratado como uma unidade pelo conjunto de instruções e / ou hardware do processador. Isso significa que o tamanho de um registro de uso geral (que geralmente é mais do que um byte) é uma palavra

No C, uma palavra é mais frequentemente chamada de inteiro =>int

Tolitius
fonte
7
Um grupo de 8 bits é denominado octeto.
cnicutar
2
correto: o termo octetfoi definido para denotar explicitamente uma sequência de 8 bits devido à ambigüidade associada ao termo byte . Mas eu gosto do som de bytemelhor :)
tolitius
2
@tolitius: +1 para "Mas eu gosto do som de bytemelhor": eu fortemente suspeito que você não está sozinho nisso e seguro para alguns sistemas de nicho, a "confusão" de um byte possivelmente sendo um tamanho diferente de 8 bits não é mais relevante hoje em dia.
Joachim Sauer,
-1

Os termos de BYTE e WORD são relativos ao tamanho do processador ao qual se refere. Os processadores mais comuns são / eram 8 bits, 16 bits, 32 bits ou 64 bits. Estes são os comprimentos de WORD do processador. Na verdade, metade de uma PALAVRA é um BYTE, qualquer que seja o comprimento numérico. Pronto para isso, metade de um BYTE é um NIBBLE.

Chris Calley
fonte
Não, em CPUs com palavras de 32 bits e bytes de 8 bits (por exemplo, MIPS ou ARM), meia palavra equivale a 2 bytes.
Peter Cordes
-3

Na verdade, no uso comum, word se tornou sinônimo de 16 bits, assim como byte com 8 bits. Pode ficar um pouco confuso, pois o "tamanho da palavra" em uma CPU de 32 bits é de 32 bits, mas ao falar sobre uma palavra de dados, significaria 16 bits. Microcontroladores com tamanho de palavra de 32 bits passaram a chamar suas instruções de "longs" (supostamente para tentar evitar a confusão palavra / palavra dupla).

Brian Knoblauch
fonte
1
Isso depende inteiramente do tipo de CPU. Como você salientou, em máquinas não IA32 de 32 bits, uma "palavra" normalmente tem 32 bits.
Ross Patterson
2
@RossPatterson Isso depende inteiramente de você estar desenvolvendo um software ou jantando.
Engenheiro
ARM / MIPS / outras arquiteturas RISC convencionais têm palavras de 32 bits. É a largura do registro (na versão de 32 bits desses ISAs) e a largura da instrução. 16 bits é meia palavra, portanto as instruções ARM gostamldrh de carregar 16 bits e estendê-los para zero em um registrador de 32 bits. Ou ldrshpara carregar e estender o sinal de 16 bits.
Peter Cordes