Bichos de X^n cabeças (parte 3/5)
Bit, o bicho de 21 cabeças
Na computação o (0 ou 1) é chamado de bit. Podemos considerar os bits como as menores unidades da matéria dentro de um computador. De modo análogo à ideia grega de átomos, o bit é indivisível. Ele é algo que pode ser representado fisicamente como um circuito elétrico aberto ou fechado. No caso, relacionando-o com as variáveis booleanas, quando aberto tem o valor Falso e quando fechado tem o valor Verdadeiro.
Para o computador, é mais fácil representar dois símbolos do que dez símbolos. Dois símbolos podem ser representados por um circuito aberto, no qual a energia é interrompida ou o circuito está fechado, no qual a energia passa. Em computação tratamos tal situação como falsa por 0 e verdadeira por 1. Não é possível assumir os dois estados simultaneamente. Assim, ou o bit está em 0 ou está em 1.
Observe no desenho da Máquina de Turing Universal no primeiro post deste especial, a fita de zeros e uns. O que aquela sequência de zeros e uns representa? Este é o cerne da questão. Você está lendo esse texto nesse exato momento, provavelmente observa cada símbolo (letra), percebe a união ou agrupamento das letras em palavras, separa cada palavra, interpreta cada palavra e vai para a direita até o fim da linha, mas de fato, um texto é uma convenção. A disposição das palavras, os tipos de palavras, tudo é uma convenção para que você possa “dar chance” ao seu cérebro atribuir um significado. Uma sequência de texto como “adsdasds ererere gggffdgfdgd errtrtrtr dgfdgdfgfd gfdgfhgfhfghgf cccxcvxvxccv”, embora siga algumas regras como uso de símbolos do alfabeto e espaço em branco como separador, não quer dizer nada. Não há significado para nós como leitores.
De maneira análoga, a linguagem que o computador recebe é similar às sequências de bit abaixo:
0110000101110000011100100110010101101110011001000110010101110010
01100101011011100111001101101001011011100110000101110010
011001010110010001110101011000110110000101110010
Deve haver uma convenção (uma regra) de como isto deve ser interpretado. O que será discutido na seção seguinte.
Byte, o bicho de 28 cabeças
Já ouvimos em várias ocasiões o discurso sobre o bicho de 2¹ cabeças (o bit), porém realmente não o vemos quando usamos os computadores. Ainda que exista todo este encanto sobre os benditos 0’s e 1’s do computador, estes não são visíveis para a maioria de nós (pode até ser visível para alguns loucos por computação). Por outro lado, existe um bicho um pouco mais complexo com o qual já é possível trabalhar diretamente em seu formato na máquina. O bicho de 2⁸ cabeças, conhecido na computação como byte.
A sequência de 0’s e 1’s mostrada no final da última seção, para você não representava nada, você não percebe uma regra de formação ou ordem, absolutamente são apenas números. Entretanto para o computador, tal sequência tem “significado”, basta haver uma convenção ou regra sobre a escrita do código na sequência acima. Poderíamos começar agrupando e separando os bits em grupos de 8 bits para formar bytes.
01100001 01110000 01110010 01100101 01101110 01100100 01100101 01110010
01100101 01101110 01110011 01101001 01101110 01100001 01110010
01100101 01100100 01110101 01100011 01100001 01110010
Cada byte pode ser lido pelo computador com o auxílio do código ASCII (não se preocupe, falaremos sobre isto um pouco mais a frente no texto), como um caractere específico. A mensagem decodificada para um ser humano seria:
aprender
ensinar
educar
De maneira análoga ao bit como sendo um interruptor elétrico, o byte pode ser percebido como 8 interruptores elétricos ligados em paralelo. Contudo, enquanto o bit somente podia representar duas opções (0 ou 1), o byte pode representar até 256 opções.
Exemplo de circuito para um byte.
Na figura acima, apesar de termos cores diferentes para as lâmpadas, o que nos importa é que cada uma das 8 pode estar acesa ou apagada (no caso da figura acima, todas estão apagadas pois seus interruptores estão em aberto). Mas com isto, há 256 maneiras de representar estas 8 lâmpadas como acesas ou apagadas. Podemos dizer que a lâmpada apagada seja 0 e acesa seja 1. Assim, da esquerda para a direita temos:
00000000 | nenhuma lâmpada está acesa |
Lembrando um pouco de análise combinatória:
1. Para uma fase com 2 opções, temos 2 formas de ocupá-la, ou seja, 21.
2. Para duas fases com 2 opções, temos 2 formas de ocupar a primeira, e para cada escolha tomada, temos mais duas formas de ocupar a segunda fase. Assim, temos 2(2¹) possibilidades, ou seja, 2².
3. De modo análogo, para três fases com 2 opções, temos 2 formas de ocupar a primeira, e para cada escolha tomada, temos 2² formas de ocupar as outras duas fases. Assim, temos 2(2²) possibilidades, ou seja, 2³.
4. Para um número n de fases com 2 opções, temos 2 formas de ocupar a primeira fase, e para cada escolha tomada, temos 2n-1 formas de ocupar as outras n-1 fases. Assim, temos 2(2(n-1)) possibilidades, ou seja, 2n.
No caso dos bytes, temos 8 fases possíveis de serem ocupadas com 2 opções cada, o que dá 2⁸ possibilidades, ou seja, 256. Um exemplo prático do uso destes números é o sistema de cores utilizado pelo computador. Muitos sistemas utilizam o formato RGB, referente à Red (tradução do inglês: Vermelho), Green (tradução do inglês: Verde) e Blue (tradução do inglês: Azul). Para cada variável R, G, B há o espaço para um byte. Cada byte representa uma intensidade de R, G ou B. Sendo representada como {0,0,0} e {255,255,255} as cores extremas (preto e branco respectivamente).