De que se trata o artigo

Este artigo, de forma prática e objetiva, tenta demonstrar como os bytes são utilizados na fundação de tipos primitivos. Avançando um pouco, demonstra como ampliar a aplicabilidade dos tipos primitivos existentes no .NET dando novo significado às estruturas de bits e bytes por eles representadas.


Para que serve

Conhecer e saber utilizar bits e bytes permite considerar o desenvolvimento de aplicativos que “conversem” diretamente com periféricos e dispositivos conectados. Além disso, serve como referência para desenvolvimento de aplicativos de alta performance, onde velocidade e consumo reduzido de memória sejam fundamentais.


Em que situação o tema é útil

Criar aplicativos com alto volume de processamento e que exijam baixo consumo de memória. Entender dificuldades e possibilidades de integração com programas/componentes desenvolvidos em outras linguagens e/ou plataformas. Entender e desenvolver processos de comunicação com periféricos e dispositivos conectados.

Bits e Bytes

Neste artigo serão apresentados os conceitos fundamentais relacionados a Bits e Bytes. Partindo disso, apresento fundamentos da matemática binária. Serão apresentados detalhes da representação, em bits e bytes, dos tipos fundamentais ou primitivos. Serão discutidos detalhes do Int64 e UInt64 que podem ser considerados como referência para todos os outros tipos numéricos. Sobre textos, será abordada brevemente a tabela ASCII.

De forma bastante prática, será demonstrado como Bits e Bytes podem ser considerados para reduzir necessidade de processamento e memória. Para isso, será abordado enumerações em .NET, uma representação de ocupação de tabuleiro para engines de Xadrez e um procedimento de recuperação e aplicação de dados (como bytes) em imagens digitais.

Geralmente, na TV (no cinema, em revistas ou em livros), quando são abordados temas “avançados” de computação, vemos introduções mostrando sequências “animadas” de 0s (zeros) e 1s (uns). Mesmo sem indicações diretas, tudo leva a crer que sejam referências para sequências de bits. O bit é a representação mais básica de dados disponível em computadores. Logicamente, também é a que ocupa menos espaço.

Um bit pode assumir apenas dois estados: pode estar ligado ou desligado. Usamos 1s (número um) para representar bits ligados e 0s (número zero) para bits desligados. Toda representação de dados feita por computadores é, na prática, uma combinação, mais ou menos extensa, de bits.

Um bit não pode ser armazenado individualmente. A menor unidade armazenável de dados é o byte. Um byte corresponde a um conjunto organizado de 8 bits (Figura 1).

Figura 1. Um byte como conjunto de 8 bits

Bytes

Toda informação, armazenada ou processada por um computador, corresponde, em seu nível mais fundamental, a arranjos de bytes, já que essa é a menor unidade armazenável de informação disponível. Como já foi dito, um byte é arranjo de 8 bits. Como o byte é a menor unidade de informação que pode ser armazenada, se você precisa “salvar” alguma informação, precisará ocupar pelo menos um byte.

Esteja você trabalhando com textos, números, imagens, vídeos ou áudios - independente do formato ou conteúdo - estará trabalhando com sequências organizadas de bytes (de bits, na verdade).

Sendo o byte um conjunto de 8 bits, onde cada bit possui apenas dois estados possíveis, podemos inferir que um byte pode possuir apenas 256 estados diferentes (todas as combinações de ligado/desligado para cada um dos 8 bits).

Um byte geralmente é identificado pela representação decimal correspondente ao valor binário de seus bits. Por exemplo, um byte onde os bits estejam na configuração 1011 0010 equivale a 178 (Figura 2).

Figura 2. Um byte como um valor decimal

Por que programadores gostam tanto de hexadecimais?

Como ficou evidente, em baixo nível, falar em dados significa falar em bytes (conjuntos de bits). Como há apenas 256 estados diferentes para um byte, podemos pensar em representar todas as suas combinações (cada uma com oito “dígitos binários”). Se você começar agora, concluirá todas essas combinações rapidamente. Observe os primeiros 4 bytes possíveis (Figura 3).

Figura 3. Primeiros 4 bytes

Entretanto, concordemos: São muitos 0s e 1s. Não há como “ser feliz” fazendo combinações assim. Felizmente, há uma forma mais prática de “ver” bytes. Usando sua representação hexa (Figura 4)

Figura 4. Decimais, Binários e Hexas

Como um dígito hexadecimal consegue representar, sozinho, quatro dígitos binários, conseguimos representar os oito bits do byte, sempre com dois dígitos hexadecimais.

Programadores habituados a trabalhar “direto” nos bytes consideram esse um belo recurso, visto que conseguem escrever rapidamente “combinações” complexas de bits sem precisar recorrer a conversões difíceis (para decimal) ou a longas séries de 0s e 1s (Figura 5).

Figura 5. Três formas de "ver" um byte

...
Quer ler esse conteúdo completo? Tenha acesso completo