Pesquisa · Mapa mental

Extremidade (ordenação)

Em computação, extremidade refere-se à ordem utilizada para representar determinado tipo de dado.

Fonte: Wikipédia (pt)Atualizado em 19/07/2026
01

Analogia

Imagem: Carlos Rosa PT · BY-SA · Openverse

Extremidade é a forma de ordenar dados pela sua ordem de magnitude ou ordem de grandeza. Como analogia, nas línguas europeias, os números são representados na ordem extremidade maior primeiro (big-endian), em que os primeiros dígitos a serem representados são os de maior peso. Por exemplo, o número 1234 significa 1 milhar (10³), 2 centenas (10²) 3 dezenas (101) e 4 unidade (100). Datas escritas no formato big-endian devem ser escritas como AAAA-MM-DD. O formato DD-MM-AAAA é a representação da data em little-endian, e finalmente o formato MM-DD-AAAA é a representação em middle-endian, porque o campo com a ordem de grandeza média está escrito primeiro. No entanto, os números que representam (individualmente) os dias, meses e anos estão todos no formato big-endian.

02

A ordenação de bytes e o hardware

A maioria dos processadores lê e escreve os bytes na memória principal, com os bits "dentro" dos bytes individuais quase sempre na mesma ordem (embora haja raríssimas excepções). Isto significa que um byte será lido ou escrito, da mesma forma em praticamente todos os sistemas digitais (computadores pessoais mainframes, sistemas de automação e controlo e até consoles de jogos). Os números inteiros são normalmente guardados em sequências de bytes, sendo que o valor é obtido por simples concatenação. Os dois métodos mais comuns são: Os processadores mais conhecidos que utilizam o formato little-endian são os da Intel (x86), AMD, Zilog (Z80), MOS Technology (6502), DEC (VAX e PDP-11). No caso dos processadores que utilizam o formato big-endian, os mais conhecidos são os da Motorola (famílias 6800 e 68000). O PowerPC que integrava os Apple Macintosh antes da mudança para os processadores da Intel, bem como o System/370. O SPARC historicamente usou sempre big-endian, embora a versão 9 seja bi-endian (ver abaixo).

Hardware bi-endian

Algumas arquitecturas de hardware (incluindo a ARM, PowerPC (excepto PPC970/G5), DEC Alpha, SPARC V9, MIPS, PA-RISC e IA64) implementam ordenação comutável (em inglês switchable endianness). Esta característica melhora o desempenho e simplifica a lógica dos dispositivos físicos de rede, bem como o respectivo software. A designação bi-endian, relativa ao hardware, denota a capacidade de processar ou enviar dados em qualquer dos dois formatos. Algumas destas arquitecturas podem ser alteradas via software para um formato específico (normalmente quando o computador arranca); no entanto, em alguns sistemas o formato default é seleccionado por hardware na placa-mãe e não pode ser alterado por software. (e.g., o DEC Alpha, funciona apenas no modo big-endian Cray T3E.)

03

Transferência de dados entre processador e memória

Os processadores actuais, têm todos (salvo casos pontuais) um barramento de dados de 64 bits, embora os seus registadores internos se mantenham com 32 bits e por isso, se continuem a classificar como processadores de 32 bits. Numa acesso a 64 bits, são usados internamente dois registadores de 32 bits. Por isso a transferência de dados entre o processador e a memória pode ser feita a 8, 16, 32 ou 64 bits. Neste diagrama podemos ver como essa transferência de dados se faz em ambos os modos: extremidade menor primeiro (little endian) e extremidade maior primeiro (big endian). Para ajudar a entender o diagrama, no modo extremidade menor primeiro os endereços de memória crescem da direita para a esquerda e no modo extremidade maior primeiro os endereços de memória crescem da esquerda para a direita. No entanto, para os não entendidos em hardware, deve ser salientado o seguinte: Isto é apenas uma representação gráfica, para ajudar a explicar o funcionamento da transferência de dados. Na realidade, na construção física das memórias, não existe este conceito de "direcção". As memórias têm um barramento de endereços onde se coloca um padrão de bits que define a célula da memória a que queremos ter acesso, e um barramento de dados onde se coloca um byte (8 bits) (no caso de acesso para escrita), e de onde se lê um byte (no caso de acesso para leitura).

04

Exemplos

Armazenamento do valor 0x0A0B0C0D na memoria

Para ilustrar ainda melhor, mostram-se exemplos de um número inteiro de 32 bits, guardado na memória, nos tipos de ordenação de bytes mais comuns. Nem todas as plataformas usam os formatos representados mas, na prática, são muito poucas as excepções. Os exemplos referem-se ao armazenamento em memória RAM do valor 0x0A0B0C0D. A razão porque se salienta o facto da memória ser do tipo RAM, é porque as acções representadas, referem-se a escrita de dados. No caso das memórias do tipo ROM (e similares), só se podem efectuar acções de leitura (da memória para o processador). No entanto, em qualquer dos casos (leitura ou escrita), os diagramas aplicam-se, tendo apenas em conta que no caso de leitura de dados, as setas devem ser desenhadas na direcção contrária. Exceptuando isto, tudo o resto é igual.

Verificação do formato de ordenação de bytes

A linguagem assembly, é de longe, a mais poderosa, mais rápida, mais flexível e que permite tirar partido de todas as características de um microprocessador. No entanto, todo este poder de controle sobre o processador tem um preço: Para a maioria das aplicações, programar em assembly seria uma tarefa "titânica", razão pela qual foram criadas linguagens designadas de alto nível (porque estão mais próximas do raciocínio do programador), que facilitam muito a tarefa ao programador para a maioria das tarefas. De qualquer forma, existem sempre casos em que não podemos prescindir da Linguagem Assembly, nomeadamente: Além disso (apesar de em muitos casos não ser preciso), só quem tenha sólidos conhecimentos de Electrónica Digital, tem acesso a todas as funcionalidades dos microprocessadores. Sem entrar em demasiados detalhes, apresenta-se a seguir um segmento de código escrito em Linguagem Assembly, que mostra bem o modo como o processador manipula números inteiros em 64 bits.

05

Uso em diferentes meios

Máquinas virtuais

As máquinas virtuais mais conhecidas são (por ordem cronológica de aparecimento) a JVM (também conhecida por JRE) e o .NET. Como o objectivo de uma máquina virtual é tornar o código independente de plataforma, a ordenação é feita de acordo com o critério da empresa que a implementou. Para JVM, a ordenação de bytes segue a extremidade maior primeiro, enquanto para .NET a ordenação segue a extremidade menor primeiro. Um pormenor que deve ser esclarecido, é que a ordenação de bytes pode ser diferente na máquina virtual e no processador em que ela corre. É este o caso de um programa escrito em linguagem Java a correr numa máquina com um processador Intel. O programa em Java utiliza a ordenação big-endian da máquina virtual, que por sua vez corre em little-endian no processador. A acção oposta também se pode verificar, desde que se utilize outra máquina virtual a correr sobre outro processador.

Redes de comunicação

Nas redes de comunicação de dados (termo genérico que abarca sob a mesma designação, redes de computadores e redes de telecomando - utilizadas em controlo remoto e automação), os controladores de comunicações existem em três tipos diferentes: USRT, UART e USART. Posteriormente apareceram os controladores de rede. Na camada física do modelo OSI, todo o controlo da comunicação é feito por hardware e os bits são sempre transmitidos no formato little-endian. Nos três primeiros tipos de controladores de comunicações, é muito utilizada a norma EIA RS-232C, e no caso dos controladores de redes, utiliza-se sistemas mais sofisticados de comunicação. Entre eles, a utilização de códigos auto-sincronizáveis. Para situações específicas, alguns fabricantes utilizam um ASIC, e neste caso, a ordem pela qual os bits são enviados (entre outros parâmetros) é própria do fabricante do ASIC.

Ficheiros

Todas as linguagens de programação (inclusive assembly) podem, se necessário, utilizar ficheiros para guardar de forma permanente, dados que na memória central seriam perdidos ao desligar o sistema. No que diz respeito ao seu conteúdo, os ficheiros podem ser de texto ou binários. Nos ficheiros de texto, como o objectivo é escrever os dados de forma legível para o utilizador caso queira processar os dados num editor de texto, os dados são sempre gravados no formato big-endian. No que diz respeito aos ficheiros binários, a ordenação de bytes segue sempre a ordenação do processador utilizado. Aliás, não fazia sentido ser de outra forma, já que seria necessário haver inversão de bytes antes da acção de escrita e depois da acção de leitura.

06

Casos específicos

Ordenação de bytes com vírgula flutuante

Tal como acontece com os números inteiros, os números em vírgula flutuante (reais) também podem estar representados em little-endian ou big-endian.

Ordenação de bits

No que diz respeito à ordenação de bits, a questão quase não se coloca, dado que, os microprocessadores não conseguem aceder a submúltiplos do byte. Apenas os microcontroladores conseguem aceder a bits individuais, e neste caso particular, a posição dos bits é irrelevante. Só faz sentido falar em ordenação de bits em comunicação serial.

Vídeos recomendados

Fontes consultadas

Continue pesquisando