== Representação da informação :cap: cap2 .Objetivos do capítulo ____________________ Ao final deste capítulo você deverá ser capaz de: * Explicar o que são bit e byte e a importância do último para representação da informação * Explicar como números, textos, imagens e músicas podem ser expressos através de sequências de bits * Ser capaz de representar novas informações através de bits, com o auxílio de uma tabela ____________________ //// Ementa: A ideia é apresentar o conceito de bit/byte e suas possibilidades de representação de informação em um computador. //// Você provavelmente já ouviu alguém falar que os computadores trabalham internamente apenas com *0* e *1* (zero e um). Tudo o que você assiste, escuta ou cria no computador, é processado internamente através de sequências de zeros e uns. O computador ao ler estas sequências, consegue interpretá-las e em seguida apresentar as informações contidas nelas. Neste capítulo estudaremos o conceito e bit e byte e como eles podem ser utilizados para representar diversas informações. Vamos começar nossos estudos aprendendo sobre os *bits* e *bytes*. === Conceito de bit e byte Um *((bit))* ou dígito binário ('binary digit'), é a unidade básica que os computadores e sistemas digitais utilizam para trabalhar, ele pode assumir apenas dois valores, *0* ou *1*. Um *((byte))* é uma sequência de 8 bits. Fisicamente, um bit pode ser representado de várias formas: através de dois valores de voltagem aplicados num fio, diferentes direções de magnetização em uma fita magnética, entre outras. O importante é que seja possível identificar dois estados diferentes. [IMPORTANT] ======================================================================== *O byte é a menor unidade de armazenamento utilizada pelos computadores*. Isto quer dizer que, nós nunca conseguiremos salvar menos do que 8 bits. // Adicionar referência explicando o porquê do armazenamento mínimo de 8 bits? ======================================================================== Na próxima seção iremos estudar como os bits e bytes são utilizados na representação de dados e mídias. [[possibilidades_de_representacao]] === Possibilidades de representação Como um bit só pode assumir dois valores (*0* ou *1*), só será possível representar exatamente dois estados distintos. Na <> nós temos exemplos de como podemos associar significados aos valores do bit. Por exemplo, em um sistema com trava eletrônica, o valor *0* poderia indicar que a porta estava fechada, enquanto *1* indicaria que a porta está aberta. Em outro sistema que registra o estado civil, *0* poderia representar 'Solteiro', enquanto *1* seria 'Casado'. [[representacoes_de_bit]] .Representações com um bit. [width="100%",options="header", frame="topbot", cols="1s,3,3,3,7,6"] |====================================== | Bit | Porta | Lâmpada | Sexo | Detector de movimento | Estado civil | 0 | Fechada |Desligada | Masculino | Sem movimento | Solteiro | 1 | Aberta | Ligada | Feminino | Com movimente | Casado |====================================== Para representar mais de dois valores distintos nós precisamos de uma sequência de bits maior. Na <> nós temos exemplos de representações utilizando sequências com *2* bits, obtendo *4* possibilidades. Nesta caso, o estado civil 'Casado' passou a ser representado pela sequência `01`. [[estado_civil_estendido]] .Representações com dois bits. [width="100%",options="header", frame="topbot", cols="^2,^3,^1"] |====================================== | Sequencia de Bits | Lâmpada| Estado civil | *00* | Desligada | Solteiro | *01* | Ligada com intensidade *baixa* | Casado | *10* | Ligada com intensidade *alta* | Divorciado | *11* | 'Não utilizado' | Viúvo |====================================== As tabelas são bastante utilizadas para representar informações. Em uma coluna colocamos o que desejamos representar e na outra sua representação binária. Não há uma ordem particular, por exemplo, na <> 'Solteiro' é representado por `00`, mas poderíamos construir outra tabela em que seria *codificado* como `11` (lê-se um-um). IMPORTANT: O termo *((codificação binária))* significa traduzir um conteúdo para a sua representação binária. Percebam também que, quando todas as informações desejadas já foram representadas, podem existir sequências binárias que não possuem significado definido, que foi o caso da sequência `11` para a lâmpada (<>). [NOTE] ================================= Observe que o número de possibilidades diferentes que podemos representar depende do tamanho da sequência de bits que estamos utilizando, mais precisamente: 2^tamanho em bits^. [width="100%", frame="none", grid="none", cols="1,1,1,2"] |================================= | 2^1^ = 2 | 2^2^ = 4 | 2^3^ = 8 | 2^4^ = 16 | 2^5^ = 32 | 2^6^ = 64 | 2^7^ = 128 | 2^8^ = 256 possibilidades (um byte) | 16 bits = 65.535 2+| 32 bits = 4.294.967.295 | 64 bits = 18.446.744.073.709.551.615 |================================= ================================= [[numeros_representacao]] ==== Números (((Representação, Números))) Independente do que desejamos representar, o primeiro passo é verificar quantas informações diferentes iremos utilizar e, com base nestas informações podemos calcular quantos bits serão necessários para representar todas as possibilidades. IMPORTANT: Para representar números é necessário estabelecer o intervalo de números que desejamos utilizar, pois precisamos definir quantas possibilidades diferentes queremos representar. Já vimos que com 8 bits podemos representar 256 possibilidades (números) diferentes. Para representar números inteirosfootnote:[As representações de números negativos (<>) e reais (ponto flutuante, <>) também são possíveis utilizando estratégias que veremos mais adiante.] e positivos podemos construir uma tabela com todas estas possibilidades. Na <> temos exemplos de como alguns desses números são representados. [[tabela_numero]] .Representação de números utilizando um byte. [width="100%", frame="none", grid="all", cols="^1,^2,^1,^2,^1,^2,^1,^2,^1,^2", options="header"] |================================= | Num | Byte | Num | Byte | Num | Byte | Num | Byte | Num | Byte | 0 | 00000000 | 8 | 00001000 | 16| 00010000 | 24| 00011000 | 248| 11111000 | 1 | 00000001 | 9 | 00001001 | 17| 00010001 | 25| 00011001 | 249| 11111001 | 2 | 00000010 | 10| 00001010 | 18| 00010010 | 26| 00011010 | 250| 11111010 | 3 | 00000011 | 11| 00001011 | 19| 00010011 | 27| 00011011 | 251| 11111011 | 4 | 00000100 | 12| 00001100 | 20| 00010100 | 28| 00011100 | 252| 11111100 | 5 | 00000101 | 13| 00001101 | 21| 00010101 | 29| 00011101 | 253| 11111101 | 6 | 00000110 | 14| 00001110 | 22| 00010110 | 30| 00011110 | 254| 11111110 | 7 | 00000111 | 15| 00001111 | 23| 00010111 | 31| 00011111 | 255| 11111111 |================================= ==== Texto ==== (((Representação, Texto))) (((ASCII))) Nesta seção nós iremos aprender como o computador representa texto. Novamente, podemos utilizar uma tabela definindo os caracteres que desejamos representar e suas correspondências binárias. O ASCII é o padrão de representação de caracteres mais conhecido. Na <> é apresentado um extrato da tabela ASCII, onde cada caractere possui sua representação em bits. Este padrão também inclui outros caracteres de controle, não apresentados na tabela, como 'fim de linha' e 'final de arquivo'. A composição de um texto é realizada informando a sequência de caracteres contidos nele. [[tabela_ascii]] .Extrato da tabela ASCII [width="100%", frame="none", grid="all", cols="^1,^2,^1,^2,^1,^2,^1,^2,^1,^2", options="header"] |================================= | Char | Byte | Char| Byte | Char | Byte | Char | Byte | Char | Byte | a | 01100001 | A | 01000001 | n | 01101110 | N | 01001110 | 0 | 00110000 | b | 01100010 | B | 01000010 | o | 01101111 | O | 01001111 | 1 | 00110001 | c | 01100011 | C | 01000011 | p | 01110000 | P | 01010000 | 2 | 00110010 | d | 01100100 | D | 01000100 | q | 01110001 | Q | 01010001 | 3 | 00110011 | e | 01100101 | E | 01000101 | r | 01110010 | R | 01010010 | 4 | 00110100 | f | 01100110 | F | 01000110 | s | 01110011 | S | 01010011 | 5 | 00110101 | g | 01100111 | G | 01000111 | t | 01110100 | T | 01010100 | 6 | 00110110 | h | 01101000 | H | 01001000 | u | 01110101 | U | 01010101 | 7 | 00110111 | i | 01101001 | I | 01001001 | v | 01110110 | V | 01010110 | 8 | 00111000 | j | 01101010 | J | 01001010 | w | 01110111 | W | 01010111 | 9 | 00111001 | k | 01101011 | K | 01001011 | x | 01111000 | X | 01011000 | | | l | 01101100 | L | 01001100 | y | 01111001 | Y | 01011001 | | | m | 01101101 | M | 01001101 | z | 01111010 | Z | 01011010 | | |================================= IMPORTANT: Percebam que neste sistema os caracteres são representados por exatamente *um byte, que é o tamanho mínimo possível de ser salvo no computador*. Talvez você tenha percebido a ausência dos 'caracteres especiais', como o "ç", "ß", além dos caracteres acentuados como "ã", "ô", "é", etc. Isto porque o padrão ASCII foi criado por americanos para *codificar* as mensagens escritas no idioma inglês, que não possuem tais caracteres. Por esta razão, existem vários outros sistemas de codificação para melhor representar as mensagens do idioma que se deseja utilizar, alguns exemplos são: *Unicode*, *UTF-8* e *ISO 8859-1* (padrão latino-americano). [TIP] .Testando o tamanho do caracteres ==== Faça um teste! Abra um editor de texto como o 'bloco de notas', 'gedit' ou 'kate' (não use o 'Word'). Digite 'abc' no documento em branco e salve-o. Em seguida, verifique o tamanho do arquivo, dependendo da codificação utilizada pelo seu editor o arquivo poderá ter de 3 a 8 bytes. ==== ==== Imagem ==== (((Representação, Imagem))) Uma das formas possíveis para representar imagens é tratá-las como grades de pontos (ou 'pixels'). Ao atribuir uma cor para cada ponto, podemos então pintar a imagem. Na <> nós temos uma imagem e um recorte em destaque, mostrando a grade de pontos com suas respectivas cores. Além das cores dos pontos também é necessário definir o tamanho da grade (quantos pontos teremos na horizontal e na vertical), também conhecida como 'resolução da imagem'. Sem a resolução teríamos apenas um linha de pontos coloridos. [[foto_senna]] .Fotografia evidenciando a grade de pontos. image::images/{cap}/senna.jpg[scaledwidth="60%"] Um sistema popular de representação de cores é o *RGB*, onde é reservado um byte para os tons de cada uma das cores primárias: *vermelho, verde e azul*. Como um byte permite representar 256 tons de uma cor, ao total são possíveis representar 16 milhões (256x256x256) de cores. [NOTE] ====================================== Através do sistema *RGB* podemos representar as três cores primárias e as suas derivadas, que são as cores resultantes das misturas das cores primárias. Neste sistema, o branco é interpretado como sendo a união de todas as cores, e o preto a ausência de cor. Este sistema é utilizado pelo formato de imagem *BMP*. O sistema *RGBA* inclui também um 'canal alpha', responsável por representar a transparência do ponto, utilizado pelo formato de imagem *PNG*. ====================================== ==== Música ==== (((Representação, Música))) Para representar uma música, podemos imaginá-la como sendo apenas uma partitura e salvar todas as informações contidas nela. Depois a música poderá ser ouvida tocando a partitura salva. .Partitura da música Marcha Soldado. image::images/{cap}/partitura.eps[scaledwidth="60%"] NOTE: Os toques dos antigos celulares monofônicos utilizavam este sistema para reproduzir as músicas, salvando apenas as notas dos tons. O formato de arquivo *MID* utiliza esta estratégia. Você pode baixar esta música em: https://github.com/edusantana/introducao-a-computacao-livro/raw/master/arquivos/midias/marcha_soldado.mid Você deve está pensando, "Mas as músicas *MP3* que escuto também tem voz, como ela é representada?". Os sons também podem ser representados através das frequências de ondas (<>) que os caracterizam. Mais tarde, quando você desejar escutar as músicas, o computador será capaz de reproduzir os mesmos sons. [[musica_onda]] .Representação de uma música através de ondas. image::images/{cap}/musica-onda.eps[scaledwidth="60%"] Se possível, acessem este vídeo sobre a representação da informação. .Vídeo sobre Representação da Informação: http://youtu.be/y_eCItEibHI ifdef::livro-pdf[] ["qrcode", size=10, scaledwidth="30%"] ------------------------- http://youtu.be/y_eCItEibHI ------------------------- endif::livro-pdf[] ifdef::livro-html[] +++ +++ endif::livro-html[] === Recapitulando Neste capítulo você aprendeu o que são bits e bytes, e a importância do último para salvar dados no computador. Em seguida, vimos como dados podem ser representados através de uma tabela, e como calcular quantos bits são necessários para representar as informações que desejamos. Por último, vimos como números, textos, imagens e músicas podem ser representadas através de bits. === Atividades . Utilizando o método de representação de números estudado (<>), represente os números *32*, *64* e *128* em bytes. . Como você representaria todos os meses do ano em bits? . Quantos bits são necessários para representar 150 possibilidades diferentes? . ★ Como você representaria as horas em bits? . ★ Como você representaria o tabuleiro abaixo em binário? Quantos bytes sua estratégia utiliza? image::images/{cap}/jogo-damas.eps[scaledwidth="25%"] // Sempre manter uma linha em branco no final