Representação binária e de dados

Aprenda como os computadores transformam números, textos, imagens e sons em bits. Converta entre os sistemas decimal, binário e hexadecimal; armazene números inteiros sem sinal e em complemento de dois; codifique números reais em ponto flutuante IEEE 754 e entenda por que 0,1 + 0,2 não é exatamente 0,3; codifique texto com ASCII e Unicode (UTF-8); calcule quanto armazenamento imagens, vídeos e sons precisam; e veja como a compressão com e sem perdas reduz arquivos.

BásicoAula 2 de 7 do curso Curso de Introdução à ciência da computação

O que você vai aprender

  1. Explicar como grupos de bits codificam informações e converter números inteiros entre os sistemas decimal, binário e hexadecimal.
    • Explicar bits, bytes e quantos valores um grupo de bits pode representar
      Descrever bits e bytes, calcular quantos padrões uma quantidade de bits permite e ler corretamente unidades de armazenamento e velocidade.
    • Converter números inteiros entre os sistemas decimal e binário
      Usar valores posicionais para ler números binários e converter números inteiros decimais em binário com dois métodos confiáveis.
    • Usar o sistema hexadecimal como representação abreviada do binário
      Converter entre os sistemas hexadecimal, binário e decimal e explicar por que programadores escrevem bytes, cores e endereços em hexadecimal.
  2. Armazenar inteiros não negativos e negativos em uma quantidade fixa de bits, calcular suas faixas de representação e explicar o que acontece quando um valor não cabe.
    • Armazenar inteiros sem sinal e identificar sua faixa de representação
      Representar números inteiros não negativos em uma largura fixa, escolher uma largura que comporte os valores e explicar o estouro.
    • Representar inteiros negativos em complemento de dois
      Ler e escrever números inteiros negativos em complemento de dois, determinar a faixa de uma largura com sinal e compará-la com sinal e magnitude.
  3. Escrever frações em binário, codificar e decodificar números nos formatos de ponto flutuante IEEE 754 e explicar os limites de sua faixa de representação e precisão.
    • Escrever frações em binário e entender por que algumas não têm representação exata
      Converter frações entre os sistemas decimal e binário, reconhecer frações binárias periódicas como 0,1 e descrever números de ponto fixo.
    • Codificar e decodificar números de ponto flutuante no padrão IEEE 754
      Usar notação científica binária e os campos de sinal, expoente e fração dos formatos de precisão simples e dupla do IEEE 754.
    • Explicar faixa de representação, precisão e erro de arredondamento em ponto flutuante
      Explicar por que valores de ponto flutuante são aproximações, prever efeitos típicos como 0,1 + 0,2 e escolher um tipo numérico adequado.
  4. Explicar como caracteres se tornam números e bytes, usar ASCII e Unicode e prever quantos bytes um texto em UTF-8 ocupa.
    • Codificar texto usando códigos de caracteres e ASCII
      Usar uma tabela de códigos de caracteres para transformar texto em números e bits, interpretar a organização do ASCII e explicar seus limites.
    • Usar pontos de código Unicode e codificação UTF-8
      Distinguir um ponto de código Unicode de seus bytes codificados, codificar caracteres em UTF-8 e explicar texto corrompido e contagem de bytes.
  5. Descrever como imagens se tornam pixels e valores de cor, calcular o armazenamento necessário e explicar como o som é amostrado em números.
    • Representar imagens com pixels e valores de cor
      Descrever imagens matriciais, profundidade de cor, RGB e códigos de cores hexadecimais, paletas e transparência.
    • Calcular tamanhos de imagens e comparar imagens matriciais com gráficos vetoriais
      Calcular o armazenamento necessário para uma imagem ou vídeo sem compressão, explicar o que os arquivos acrescentam e descrever gráficos vetoriais.
    • Digitalizar som por amostragem e quantização
      Explicar amostragem, taxa de amostragem e profundidade de bits, aplicar a regra de amostragem e calcular o tamanho de áudio sem compressão.
  6. Explicar como a compressão reduz dados, aplicar métodos simples sem perdas e escolher entre formatos com e sem perdas.
    • Explicar a compressão sem perdas com codificação por comprimento de sequência e outros códigos
      Aplicar codificação por comprimento de sequência e códigos de comprimento variável, descrever métodos por dicionário e explicar por que nenhum método reduz todos os arquivos.
    • Explicar a compressão com perdas e escolher um formato adequado
      Descrever como a compressão com perdas descarta detalhes menos perceptíveis, avaliar qualidade e tamanho e escolher formatos para diferentes tipos de dados.

Guia de estudo de Representação binária e de dados

6 capítulos

1

Contar padrões e mudar bases numéricas

Um computador pode usar o mesmo grupo de bits para um número, uma letra ou parte de uma imagem. A interpretação dá significado ao padrão. Antes de trabalhar com essas interpretações, você precisa contar os padrões disponíveis e ler as unidades usadas para armazenamento e transferência. Os sistemas decimal, binário e hexadecimal oferecem três maneiras de escrever um número inteiro, cada uma com valores posicionais que tornam as conversões previsíveis.

1.1 Bits, bytes e unidades de armazenamento

Um bit, abreviação de dígito binário, tem um de dois valores: 0 ou 1. O hardware consegue distinguir dois estados físicos de forma confiável, como tensão alta e baixa, direções opostas de magnetização ou presença e ausência de luz. Os dígitos escritos descrevem esses estados; eles não precisam aparecer literalmente dentro de um dispositivo.

Conte os padrões

Cada novo bit dobra as possibilidades. Dois bits têm quatro padrões: 00, 01, 10 e 11. Três bits têm oito. Em geral, n bits geram 2n padrões. Um grupo de quatro bits tem 4 bits, e um byte tem 8 bits, então um byte tem 256 padrões. Um byte também é a menor unidade endereçável de memória na maioria dos computadores modernos.

Para codificar um conjunto de valores, escolha padrões suficientes para cada elemento. Para 26 letras, quatro bits geram apenas 16 padrões; cinco bits geram 32, então cinco bits são suficientes. Para 1.000 valores, nove bits geram 512 e dez geram 1.024. Padrões não utilizados são permitidos. Com 16 bits há 65.536 padrões, e com 32 há 4.294.967.296.

A quantidade de padrões é diferente do maior número sem sinal. Quatro bits fornecem 16 padrões, mas a contagem começa em zero, então os valores vão de 0 a 15. Um padrão já é usado para zero.

Para encontrar a largura mínima de forma sistemática, compare potências sucessivas de dois com a quantidade necessária de possibilidades. Pare na primeira potência que for grande o suficiente. O teste é 2n≥N para N valores distintos. A igualdade exata é permitida: oito possibilidades cabem em três bits, enquanto uma nona precisa de um quarto bit. Uma largura maior também funciona, mas deixa de ser a mínima.

Dê significado ao padrão

O byte 01000001 pode significar o inteiro 65, a letra ASCII “A” ou uma intensidade de 65 em um canal de cor, em uma escala de 0–255. Os bits sozinhos não escolhem uma dessas leituras. O tipo de dado de um programa e o formato do arquivo determinam como interpretá-los.

Leia unidades de armazenamento

Duas famílias de prefixos são comuns:

Armazenamento decimalBytesArmazenamento binárioBytes
1 kB1.0001 KiB1.024
1 MB1.000.0001 MiB1.048.576
1 GB1.000.000.0001 GiB1.073.741.824

Os prefixos decimais são prefixos do SI; os binários são prefixos da IEC. Em cada passo decimal, a unidade cresce 1.000 vezes; em cada passo binário, cresce 1.024 vezes. Para expressar bytes em uma unidade maior, divida pela quantidade de bytes nessa unidade.

Uma unidade identificada como 500 GB contém 500.000.000.000 de bytes. Dividir por 1.073.741.824 resulta em cerca de 465,66 GiB. Um programa pode identificar essa quantidade binária como “GB”, fazendo a capacidade exibida parecer menor. A mudança de unidade por si só não removeu bytes; formatação e arquivos do sistema são questões distintas.

Distinga bits de bytes

b minúsculo significa bit; B maiúsculo significa byte. Uma conexão de 100 Mbit/s transfere no máximo 100 milhões de bits por segundo. Dividir por 8 resulta em 12,5 milhões de bytes por segundo, ou 12,5 MB/s, antes da sobrecarga de controle dos protocolos. Ler essa velocidade como 100 MB/s torna o valor oito vezes maior que o correto.

Principais conclusões

  • Um byte tem 8 bits; um grupo de quatro bits tem 4.
  • Cada bit adicional dobra a quantidade de padrões.
  • Escolha a menor quantidade de bits para a qual os padrões disponíveis cubram todos os valores.
  • Um tipo de dado ou uma codificação dá significado a um padrão de bits.
  • Os prefixos de armazenamento do SI usam potências de 10; os da IEC usam potências de 2.
  • Divida uma taxa de bits por 8 para obter a taxa correspondente em bytes.

1.2 Valor posicional e conversão em binário

O binário é um sistema de numeração posicional: o valor de um dígito depende de sua posição. O decimal usa dez dígitos e potências de 10. O binário usa dois dígitos, 0 e 1, e potências de 2. Para ler um número binário, basta somar os valores das posições que contêm 1.

Leia um número inteiro binário

Da direita para a esquerda, os valores posicionais são 1, 2, 4, 8, 16, 32, 64, 128 e assim por diante. Cada um é o dobro do anterior, pois 20=1, 21=2 e 22=4.

Para 1011012, alinhe os seis bits com seus valores posicionais:

Posição32168421
Bit101101

O valor é 32+8+4+1=45. Um zero não contribui para a soma, mas mantém os outros dígitos nas posições corretas. Zeros à esquerda não alteram o valor: 00101101 também é 45.

O bit mais à esquerda é o bit mais significativo, ou MSB. O mais à direita é o bit menos significativo, ou LSB. Todos os valores posicionais, exceto o último, são pares, então um número inteiro binário é ímpar exatamente quando seu LSB é 1.

Converta por subtração de potências de dois

Para escrever 156 em binário, comece com a maior potência de dois que cabe no número: 128. Subtraia-a, restando 28. Os valores posicionais 64 e 32 não cabem, então ambos recebem 0. Use 16, restando 12; use 8, restando 4; use 4, restando 0. As posições não utilizadas de 2 e 1 recebem 0.

Na ordem das posições, o resultado é 156=100111002. Confira somando os valores posicionais escolhidos: 128+16+8+4=156. Pular uma coluna não utilizada deslocaria todos os bits seguintes e mudaria o número.

O método de subtração funciona porque cada posição binária pode ser usada no máximo uma vez. Depois de usar a maior potência que cabe, o resto é menor que essa potência. Continue descendo por todas as posições, incluindo as que recebem zero, até preencher a posição das unidades. Isso alinha os bits escolhidos a potências distintas, em vez de formar uma lista de potências sem posições.

Converta por divisões sucessivas

Outro método divide por 2 sucessivamente. Mantenha o quociente para a próxima divisão e registre o resto:

NúmeroQuocienteResto
156780
78390
39191
1991
941
420
210
101

Leia os restos de baixo para cima, obtendo 10011100. O primeiro resto pertence à posição das unidades, então lê-los de cima para baixo inverte a ordem das posições. Aqui, isso produziria 00111001, que é 57.

Mantenha a base visível

O subscrito em 102 significa base 2, então seu valor é dois. Os mesmos dígitos em 1010 significam dez. O binário geralmente é lido dígito por dígito: “um zero”. A contagem segue 0, 1, 10, 11, 100, 101, 110, 111, 1000; uma coluna gera um transporte quando chega a 2. Uma sequência de oito uns é 28−1=255. Acrescentar um zero desloca cada posição para a esquerda e dobra o valor: 101 torna-se 1010, passando de cinco para dez.

Principais conclusões

  • Some as potências de dois cujos bits são 1.
  • Zeros à esquerda preservam o valor; posições internas ausentes não.
  • Leia os restos das divisões sucessivas do último para o primeiro.
  • Um número inteiro é ímpar exatamente quando seu bit menos significativo é 1.
  • Acrescentar um zero dobra um número inteiro binário sem limite de largura.

1.3 Hexadecimal como binário mais fácil de ler

O sistema hexadecimal, ou hex, escreve números na base 16. Seus dígitos são 0–9 seguidos de A, B, C, D, E e F, que significam de 10 a 15. Um único dígito hexadecimal pode descrever qualquer grupo possível de quatro bits, facilitando a leitura de padrões binários longos.

Relacione quatro bits a um dígito

Como 16=24, cada posição hexadecimal corresponde exatamente a quatro posições binárias:

HexBinárioHexBinário
0000081000
1000191001
20010A1010
30011B1011
40100C1100
50101D1101
60110E1110
70111F1111

Para converter de binário para hexadecimal, agrupe a partir da direita. O padrão 10011100 torna-se 1001 1100, ou 0x9C. Para um último grupo mais curto à esquerda, acrescente zeros à esquerda: 101101 torna-se 0010 1101, ou 0x2D. Agrupá-lo a partir da esquerda como 1011 01 colocaria os dígitos nas posições erradas.

Para fazer a conversão inversa, expanda cada dígito em quatro bits. Assim, 0x3E8 torna-se 0011 1110 1000. Mantenha os quatro bits de cada grupo, mesmo quando um grupo começa com zeros. Somente os zeros na extremidade esquerda do número inteiro podem ser retirados sem mudar seu valor.

Use valores posicionais de base 16

Da direita para a esquerda, os valores posicionais hexadecimais são 1, 16, 256 e 4.096. Multiplique o valor de cada dígito por seu valor posicional e some. Para 0x2F, o cálculo é 2×16+15=47. Para 0x3E8:

3×256+14×16+8=768+224+8=1000

A conversão de decimal para hexadecimal também funciona por divisões sucessivas, agora por 16. Para 1.000, o primeiro quociente é 62 com resto 8. Dividir 62 resulta em quociente 3 com resto 14, escrito como E. Dividir 3 resulta em quociente 0 com resto 3. Leia os restos de baixo para cima: 3, E, 8.

O agrupamento funciona por causa do valor posicional, não apenas por uma tabela de correspondência. Em um número hexadecimal de dois dígitos, o grupo de quatro bits à esquerda contribui com seu valor multiplicado por 16, e o grupo à direita contribui com seu valor multiplicado por 1. Em binário, deslocar um grupo de quatro bits quatro posições à esquerda também multiplica seu valor por 16. Esse fator comum permite ler os dois grupos independentemente, sem primeiro converter o número inteiro para decimal.

Reconheça usos comuns

Um byte tem dois grupos de quatro bits, então corresponde exatamente a dois dígitos hexadecimais, de 0x00 a 0xFF. Um visualizador de bytes pode mostrar um arquivo longo de forma quatro vezes mais compacta em hexadecimal que em binário, mantendo visíveis os limites dos grupos.

Cores da web como #FF8000 usam pares de dígitos hexadecimais para vermelho, verde e azul. Endereços de memória e pontos de código Unicode como U+00E9 também usam hexadecimal. Um endereço MAC como 3C:22:FB:9A:01:7E escreve seis bytes como doze dígitos hexadecimais, com separadores entre os bytes.

O prefixo 0x, um subscrito de base como 2F16 ou o # em um código de cor identifica a notação. O computador armazena os mesmos bits independentemente da notação usada por uma pessoa. Em particular, 0x10 significa dezesseis. O valor quinze é o único dígito F; escrever “15” ocupa duas posições hexadecimais e significa vinte e um.

Principais conclusões

  • O hexadecimal usa 0–9 e A–F, com A–F representando 10–15.
  • Agrupe o binário em grupos de quatro a partir da direita para converter para hexadecimal.
  • Um byte corresponde exatamente a dois dígitos hexadecimais.
  • Os valores posicionais hexadecimais são potências de 16; mudar a notação não muda os bits armazenados.
2

Armazenar números inteiros em uma largura fixa

Uma quantidade fixa de bits só pode conter um conjunto fixo de números inteiros. A interpretação escolhida determina se todos esses padrões representam valores não negativos ou se alguns representam valores negativos. Você lerá o mesmo byte das duas formas, escolherá larguras que comportem uma faixa necessária e acompanhará o que acontece nos extremos. O complemento de dois também explica como valores negativos mantêm seu significado quando sua largura aumenta.

2.1 Valores sem sinal e estouro

Um inteiro sem sinal representa um número inteiro não negativo. Todos os seus bits têm os pesos binários positivos usuais. A largura determina quantas posições estão disponíveis, então um byte não pode ganhar um nono bit só porque um resultado precisa dele.

Determine a faixa de representação

Para n bits, existem 2n padrões. Começando em zero, a faixa vai de 0 a 2n−1. O maior valor tem 1 em cada posição:

LarguraFaixa sem sinal
8 bits0–255
16 bits0–65.535
32 bits0–4.294.967.295

A quantidade de valores disponíveis e o valor máximo diferem em uma unidade. Oito bits permitem 256 possibilidades, mas o próprio 256 precisa de nove posições, 1 0000 0000.

Um valor armazenado preenche sua largura com zeros à esquerda. Por exemplo, 45 em 16 bits é 0000000000101101, ou 0x002D. Esses zeros identificam a largura sem alterar o valor. Um número negativo não tem representação sem sinal, independentemente da largura escolhida.

Escolha posições suficientes

Uma faixa de idade de 0 a 150 cabe em 8 bits porque 150 é menor que 255. Uma contagem de 0 a 100.000 contém 100.001 valores possíveis. Dezesseis bits oferecem apenas 65.536 padrões. Dezessete oferecem 131.072, então 17 é a largura matemática mínima. Um programa que usa as larguras comuns de 8, 16, 32 e 64 escolheria 32 bits.

O mesmo raciocínio vale para qualquer contador limitado: verifique o maior valor que o contador precisa realmente armazenar, incluindo os dois extremos. Uma faixa de 0 a 256 precisa de 257 padrões e, portanto, não cabe em um byte.

Uma verificação útil dos limites compara larguras adjacentes. O máximo sem sinal para 8 bits é 255 e para 9 bits é 511. Acrescentar um bit dobra a quantidade de padrões; o máximo passa a ser o dobro do máximo anterior mais um. Essa distinção importa quando um valor exigido coincide exatamente com uma potência de dois: esse extremo precisa de uma nova posição, mesmo que a largura anterior tenha essa quantidade de padrões.

Acompanhe um resultado fora da faixa

Estouro significa que um resultado não cabe na representação escolhida. Se um cálculo de 8 bits mantiver apenas os oito bits menos significativos, 255 mais 1 produz 1 0000 0000 e armazena 00000000: zero. A posição extra é descartada.

Para 200 mais 100, o resultado matemático é 300. A largura mantém o resto após um ciclo completo de 256 padrões: 300−256=44. O byte armazenado é 00101100. Esse comportamento é chamado de retorno cíclico. Ele não muda o fato aritmético de que 200 mais 100 é 300; descreve o que o armazenamento limitado retém.

O comportamento no estouro depende do sistema. Algumas operações fazem o retorno cíclico, algumas sinalizam um erro e alguns tipos numéricos crescem. Um cálculo sobre retorno cíclico deve identificar esse comportamento antes de você descartar bits mais significativos.

Veja larguras fixas nos dados

Um endereço IPv4 tem 32 bits, o que fornece cerca de 4,3 bilhões de padrões possíveis. Esse espaço finito de endereços contribuiu para a necessidade de um sistema de endereçamento maior. Um canal de cor RGB comum tem 8 bits, o que explica sua escala de intensidade de 0–255. O máximo nos dois casos decorre da largura; uma escrita decimal mais longa não acrescenta capacidade de armazenamento.

Principais conclusões

  • Um inteiro sem sinal de n bits vai de 0 a 2ⁿ − 1.
  • Conte os dois extremos ao escolher uma largura.
  • Zeros à esquerda preenchem uma largura sem mudar um valor sem sinal.
  • Estouro significa que um resultado está fora da faixa representável.
  • Quando um sistema mantém apenas os n bits menos significativos, valores sem sinal retornam ciclicamente em ciclos de 2ⁿ.

2.2 Inteiros negativos em complemento de dois

Um inteiro negativo precisa de uma regra de representação, não apenas de um sinal de menos escrito ao lado de um byte. O complemento de dois atribui um peso negativo ao bit mais significativo. As demais posições mantêm seus pesos positivos, então cada padrão tem um único valor com sinal e o zero tem um único padrão.

Compare duas leituras com sinal

Um esquema mais simples, sinal e magnitude, usa o bit mais significativo apenas para o sinal e os bits restantes para a magnitude. Em 8 bits, +5 é 00000101 e −5 é 10000101. Ele tem dois zeros, 00000000 e 10000000, e a adição de números com sinais diferentes exige regras adicionais.

Em complemento de dois de 8 bits, os pesos são −128, 64, 32, 16, 8, 4, 2 e 1. Assim, 11010011 significa −128+64+16+2+1=−45. Ler os outros sete bits como uma magnitude de 83 resultaria em −83, que pertence a outra representação.

LarguraFaixa em complemento de dois
8 bits−128–127
16 bits−32.768–32.767
32 bits−2.147.483.648–2.147.483.647

Em geral, a faixa vai de −2n−1 a 2n−1−1. Zero e valores positivos têm a mesma aparência que no binário comum com um 0 à esquerda. Apenas uns representam −1.

Escreva um valor negativo

Para negar um valor representável, inverta cada bit e some 1, mantendo a largura fixa. Para codificar −45 em 8 bits:

  1. Escreva +45 como 00101101.
  2. Inverta os oito bits: 11010010.
  3. Some 1: 11010011, ou 0xD3.

Parar após a inversão produz −46. Aplicar o processo completo a 11010011 resulta novamente em 00101101, recuperando +45.

Outra forma codifica −x como o valor sem sinal 2n−x. Aqui, 256−45=211, cuja forma binária é 11010011. O byte significa, portanto, 211 sem sinal ou −45 com sinal. Os bits não mudaram; o tipo mudou.

A inversão seguida de adição também tem uma explicação aritmética. Para um valor positivo x de n bits, a inversão o transforma no valor sem sinal 2n−1−x. Somar um resulta em 2n−x, cuja interpretação com sinal é −x. Isso relaciona o método bit a bit ao método de subtração e explica por que omitir o 1 final produz o valor negativo errado.

Preserve um valor com sinal em mais bits

A extensão de sinal copia o bit mais significativo para as novas posições à esquerda. −3 em quatro bits é 1101; em 8 bits é 11111101. Seu peso negativo mais significativo e os pesos positivos acrescentados ainda somam −3. Completá-lo com zeros resultaria em 00001101, ou +13. Valores positivos são estendidos com zeros: 0011 torna-se 00000011.

Reconheça os extremos

O complemento de dois permite a adição binária comum para resultados que cabem na faixa. Em 4 bits, 0101 mais 1101, que significa 5 mais −3, resulta em 1 0010. Manter os quatro bits menos significativos resulta em 0010, ou 2. Isso permite que o mesmo hardware básico de adição processe valores com e sem sinal.

Um resultado fora da faixa é diferente: 127 mais 1 em 8 bits deixa 10000000, que é lido como −128. Além disso, −128 não tem um correspondente positivo em 8 bits. Inverter 10000000 e somar 1 resulta novamente em 10000000 porque +128 está fora da faixa. Aumente a largura da representação antes de formar esse valor positivo.

Principais conclusões

  • O bit mais significativo tem peso −2ⁿ⁻¹ em complemento de dois com n bits.
  • O complemento de dois tem um zero e um valor negativo a mais que valores positivos.
  • Para negar, inverta cada bit e some 1 dentro da largura fixa.
  • A extensão de sinal copia o bit mais significativo para as posições acrescentadas.
  • O valor mais negativo não tem um correspondente positivo na mesma largura.
  • O mesmo padrão pode ter significados diferentes com e sem sinal.
3

Armazenar frações e valores de ponto flutuante

As posições dos números inteiros se estendem à direita do separador binário como metades, quartos e frações menores. Algumas frações decimais terminam em binário, enquanto outras exigem um padrão infinito. O ponto fixo reserva uma quantidade definida de posições fracionárias; o ponto flutuante armazena uma escala além de um significando. Ler esses formatos permite entender tanto sua ampla faixa de representação quanto seus erros de arredondamento, incluindo o conhecido resultado da soma de 0,1 e 0,2.

3.1 Frações binárias e ponto fixo

A primeira posição após o separador binário é um meio. Cada posição seguinte vale metade da anterior: um quarto, um oitavo, um dezesseis avos e assim por diante. Um 1 contribui com essa fração; um 0 a deixa de fora. As posições inteiras à esquerda mantêm suas potências de dois usuais.

Leia e construa uma fração binária

Para 101,1012, a parte inteira é 4 mais 1. A parte fracionária é um meio mais um oitavo, resultando em 4+1+0,5+0,125=5,625.

Para converter uma fração decimal, multiplique-a por 2 sucessivamente. A parte inteira de cada resultado é o próximo dígito binário; mantenha apenas a parte fracionária para a próxima multiplicação. Para 0,375:

  1. 0,375×2=0,75, então o primeiro bit é 0.
  2. 0,75×2=1,5, então o próximo bit é 1; mantenha 0,5.
  3. 0,5×2=1,0, então o próximo bit é 1 e o processo termina.

O resultado é 0,0112. Seu valor é um quarto mais um oitavo, ou 0,375. Esses bits são lidos na ordem em que foram encontrados, diferentemente dos restos na divisão de números inteiros.

Determine se a expansão termina

Reduza a fração à forma irredutível. Ela tem uma expansão binária finita exatamente quando seu denominador é uma potência de 2. Valores como 0,5, 0,25, 0,75 e 0,375 satisfazem essa condição. Por exemplo, 0,375 é 3/8, e oito é uma potência de dois.

O decimal 0,1 é 1/10. Seu denominador inclui um fator 5, então sua expansão binária se repete: 0,0001100110011…2. Assim como um terço não termina em decimal, um décimo não termina em binário. A forma escrita curta “0,1” precisa, portanto, de uma aproximação quando há apenas uma quantidade limitada de posições binárias disponíveis. O mesmo problema afeta 0,2 e 0,3.

A regra do denominador decorre das próprias posições. Uma sequência finita que termina na f-ésima posição fracionária pode ser escrita como um inteiro dividido por 2f. Reduzir essa fração pode remover fatores de dois, mas não pode introduzir outro fator primo no denominador. Um denominador reduzido que contém cinco, portanto, não pode ser igual a nenhuma soma binária finita desse tipo.

Reserve uma escala fixa

Uma representação de ponto fixo atribui uma quantidade definida de bits à parte fracionária. Com quatro bits para a parte inteira e quatro para a parte fracionária, 0110,1000 significa 6,5. O menor intervalo é 2−4=0,0625, e o maior valor sem sinal é 1111,1111, ou 15,9375.

De forma equivalente, o inteiro armazenado de oito bits é escalado por 1/16. O padrão 01101000 tem valor sem sinal 104; dividir por 16 resulta em 6,5. O separador faz parte da interpretação, então não precisa ser armazenado como um símbolo extra.

Manter oito bits no total, mas usar cinco bits para a parte inteira e três para a parte fracionária, faz o intervalo ser 0,125 e o máximo ser 31,875. Você ganha faixa de representação, mas perde espaçamento fino. O ponto fixo representa exatamente os múltiplos de seu intervalo dentro de sua faixa.

Uma contagem exata de centavos usa uma ideia de escala relacionada: 19,99 unidades monetárias tornam-se o inteiro 1999 centavos. Para medidas que abrangem magnitudes muito diferentes, o ponto flutuante armazena uma escala móvel, permitindo que a mesma largura cubra uma faixa muito maior que o ponto fixo.

Principais conclusões

  • As posições fracionárias binárias são 1/2, 1/4, 1/8 e assim por diante.
  • Multiplique uma parte fracionária por 2 e leia as partes inteiras em ordem.
  • Uma fração irredutível termina em binário exatamente quando seu denominador é uma potência de 2.
  • O ponto fixo estabelece um compromisso entre faixa de representação e resolução fracionária para uma largura total fixa.

3.2 Ler e escrever os campos do IEEE 754

O ponto flutuante escreve um valor em notação científica binária. Por exemplo, 6,25 é 110,012=1,10012×22. A parte inicial é o significando, e o expoente define sua escala. O IEEE 754 define formatos amplamente usados para armazenar essas partes.

Conheça os campos
FormatoTotalSinalExpoenteFraçãoViés
Simples, binary3232 bits1823127
Dupla, binary6464 bits111521023

Para um valor normal, a leitura é (−1)s×(1.f)2×2E−vieˊs. Aqui, s é o bit de sinal, E é o expoente armazenado sem sinal e f é o campo da fração. Um bit de sinal 0 significa positivo; 1 significa negativo. Alterar apenas o bit de sinal nega um valor de ponto flutuante.

O expoente armazenado é igual ao expoente real mais o viés. Em precisão simples, o expoente 2 torna-se 129, ou 10000001; o expoente −3 torna-se 124, ou 01111100. Os expoentes normais armazenados vão de 1 a 254, representando de −126 a 127.

Um significando binário normal sempre começa com 1, então o formato omite esse bit implícito. Apenas os bits após o separador entram no campo da fração. Isso fornece 24 dígitos binários significativos em precisão simples e 53 em dupla.

Codifique −6,25 passo a passo

Primeiro, normalize sua magnitude: 110,012=1,10012×22. Depois, preencha os campos:

  1. Valor negativo: sinal 1.
  2. Expoente 2: some 127 para obter 129, escrito como 10000001.
  3. Fração ,1001: armazene 1001 seguido de 19 zeros.

O resultado é 1 10000001 10010000000000000000000, ou 0xC0C80000. Os zeros de preenchimento da fração vão à direita porque essas posições continuam após o separador. Armazenar o 1 inicial deslocaria o significado da fração.

Um expoente real negativo desloca a escala para abaixo de um. Para 0,15625, a forma binária é 0,001012=1,012×2−3. Seu sinal em binary32 é 0 e seu expoente armazenado é 124, ou 01111100. A fração começa com 01 e é completada à direita. O 1 implícito ainda pertence ao significando normalizado, embora o número completo seja menor que um.

Decodifique um padrão

O padrão de precisão simples 0x41200000 divide-se em 0 10000010 01000000000000000000000. O sinal é positivo. O campo do expoente é 130, então subtraia 127 para obter 3. Restaure o 1 implícito para obter 1,012=1,25. Por fim, 1,25×23=10.

Verifique primeiro os expoentes reservados

A fórmula normal não descreve todos os padrões:

Campo do expoenteCampo da fraçãoSignificado
Todos zerosZero+0 ou −0, escolhido pelo sinal
Todos zerosDiferente de zeroUm valor subnormal, com 0 inicial
Todos unsZeroInfinito positivo ou negativo
Todos unsDiferente de zeroNaN, “não é um número”

Valores subnormais representam valores muito pequenos sem o 1 implícito. NaN pode resultar de uma operação numérica inválida, como 0 dividido por 0. O IEEE 754-2019 define esses formatos.

Principais conclusões

  • A precisão simples tem campos de 1, 8 e 23 bits; a dupla tem 1, 11 e 52.
  • Subtraia o viés do expoente ao decodificar; some-o ao codificar.
  • Valores normais têm um 1 inicial que não é armazenado.
  • Complete o campo da fração com zeros à direita.
  • Campos de expoente com todos zeros ou todos uns têm significados especiais.
  • Os campos de sinal e expoente de ponto flutuante não são um inteiro em complemento de dois.

3.3 Faixa de representação, precisão e erro de arredondamento

Um formato de ponto flutuante pode cobrir uma faixa enorme sem representar todos os valores nela contidos. O expoente controla a escala; o campo da fração controla quantos bits significativos distinguem valores próximos. Faixa de representação e precisão respondem a perguntas diferentes.

Compare precisão simples e dupla

A precisão simples alcança cerca de 3,4×1038 e tem cerca de sete dígitos decimais significativos. Seu menor valor normal positivo é cerca de 1,18×10−38. A precisão dupla alcança cerca de 1,8×10308, tem cerca de 15–16 dígitos decimais significativos e tem um menor valor normal positivo de cerca de 2,2×10−308. Valores subnormais estendem a faixa abaixo do mínimo normal em cada formato.

Dígitos significativos são contados a partir do primeiro dígito significativo, não do separador decimal. Um expoente grande não cria mais bits de fração. Em precisão simples, a distância acima de 1 é 2−23≈1,19×10−7. Entre 224 e 225 a distância é 2, então o inteiro 16.777.217 não está disponível, embora esteja muito abaixo do valor finito máximo.

Arredonde para um valor que caiba

O padrão do IEEE 754 é arredondar para o mais próximo, com empates para o par. Escolha o valor representável mais próximo; em um ponto exatamente no meio, escolha aquele cujo último bit mantido do significando é par. Assim, 16.777.217 é arredondado para 16.777.216 em precisão simples.

A diferença entre o valor pretendido e o valor armazenado é o erro de arredondamento. Em precisão simples, 0,1 é armazenado como 0,100000001490116119384765625. Em precisão dupla, é aproximadamente 0,10000000000000000555. Mais precisão reduz esse erro, mas não pode fazer uma expansão periódica terminar.

Entenda um resultado conhecido

Com a aritmética comum de precisão dupla do IEEE 754, somar 0,1 e 0,2 produz um resultado armazenado comumente exibido como 0.30000000000000004. Ele difere da aproximação armazenada de 0,3, então 0.1 + 0.2 == 0.3 é falso em linguagens como Python e JavaScript. Para resultados de medições, compare a diferença com uma tolerância escolhida conforme a escala e a finalidade da tarefa.

Muitos valores são exatos. A precisão dupla representa exatamente todos os inteiros de −253 a 253. Valores como 0,5 e 0,375 também têm formas binárias curtas que cabem tanto no significando quanto na faixa do expoente.

Escolha um tipo numérico adequado

Inteiros são adequados para contagens e identificadores. Quantias financeiras exatas são adequadas para unidades menores inteiras, como centavos, ou para um tipo numérico decimal. Medidas e cálculos científicos frequentemente são adequados para ponto flutuante. Uma magnitude grande demais para o formato pode causar estouro para infinito; pela regra padrão de arredondamento, 1039 em precisão simples torna-se infinito positivo. Resultados muito pequenos podem se tornar subnormais ou ser arredondados para zero.

As convenções de apresentação são separadas do armazenamento. As escritas “3.14” e “3,14” podem representar o mesmo número em diferentes localidades. Um leitor de texto precisa conhecer essa convenção; caso contrário, pode rejeitar a vírgula ou ler o valor como 314. Mudar o separador impresso não melhora a precisão binária.

Principais conclusões

  • A faixa de representação controla a magnitude; a precisão controla o espaçamento entre valores próximos.
  • Os intervalos entre valores de ponto flutuante crescem conforme a magnitude aumenta.
  • A regra padrão arredonda para o mais próximo; em empates exatos, escolhe o último bit par.
  • Uma fração decimal curta ainda pode precisar de arredondamento em binário.
  • Escolha armazenamento inteiro, decimal ou de ponto flutuante conforme a tarefa.
4

Transformar caracteres em códigos e bytes

O texto exige um acordo entre o programa que o escreve e o que o lê. O ASCII atribui códigos numéricos a um pequeno conjunto de caracteres. O Unicode fornece um espaço de códigos compartilhado para muitos sistemas de escrita, enquanto codificações como UTF-8 determinam os bytes efetivos. Distinguir um caractere exibido de um ponto de código e de um byte ajuda você a calcular tamanhos de texto e explicar por que um arquivo salvo corretamente pode aparecer corrompido.

4.1 Códigos ASCII e seus limites

Para armazenar texto, um sistema atribui códigos numéricos aos caracteres e escreve esses números como bits. Um código de caractere só funciona quando quem lê usa o mesmo acordo de quem escreve. O byte de uma letra é um identificador codificado; ele não é uma pequena imagem dessa letra.

Leia a tabela ASCII

O ASCII, Código Padrão Americano para Intercâmbio de Informação, foi publicado pela primeira vez em 1963. Ele usa 7 bits para 128 códigos, numerados de 0 a 127. No armazenamento em bytes, um código ASCII geralmente preenche um byte com um 0 à esquerda.

CódigosSignificado
0–31 e 127Caracteres de controle
32Espaço
48–57Dígitos “0”–“9”
65–90Maiúsculas “A”–“Z”
97–122Minúsculas “a”–“z”

A pontuação ocupa os intervalos. Os códigos de 32 a 126 formam 95 caracteres imprimíveis, incluindo o espaço. Os caracteres de controle afetam o tratamento do texto sem imprimir um símbolo visível: tabulação é 9, avanço de linha é 10 e retorno de carro é 13.

Codifique uma cadeia curta

A sequência dos caracteres “H”, “i” e “!” tem três caracteres. Seus códigos decimais são 72, 105 e 33; em hexadecimal, são 0x48, 0x69 e 0x21. Como bytes completos, a sequência torna-se 01001000 01101001 00100001. O ponto de exclamação precisa de um código assim como as letras.

O código de uma letra minúscula no ASCII é 32 unidades maior que o da versão maiúscula. “A” é 65, ou 01000001, enquanto “a” é 97, ou 01100001. Um único bit alterado explica a diferença. A ordem também coloca todas as letras maiúsculas antes de todas as minúsculas. Uma ordenação simples por código coloca, portanto, “Zebra” antes de “apple”; ela não segue a ordem comum de dicionário.

Separe um dígito de um número

O caractere “7” tem código decimal 55 e byte 00110111. O inteiro 7 tem byte 00000111. Para recuperar o valor numérico de um dígito a partir de seu código ASCII, subtraia 48, o código de “0”: 55−48=7. Isso funciona porque os códigos dos dez dígitos são consecutivos.

O armazenamento depende da representação escolhida. O texto “2026” precisa de quatro bytes ASCII, um por dígito. O inteiro 2026 cabe em dois bytes como um valor sem sinal de 16 bits. O texto preserva a sequência de caracteres; um inteiro representa o valor numérico. Por exemplo, um identificador em texto pode preservar zeros à esquerda que um inteiro não distingue.

Para codificar uma cadeia mais longa, processe cada caractere em ordem, incluindo espaços, pontuação e caracteres de controle. A decodificação faz a consulta inversa, um código por vez, usando a mesma tabela. A sequência importa: trocar dois códigos válidos de posição ainda pode produzir ASCII válido, mas produz um texto diferente. Uma consulta bem-sucedida mostra que os códigos são reconhecidos, não que tenham a ordem ou o significado pretendido.

Veja por que páginas de códigos causavam problemas

O ASCII não tem letras acentuadas como “é”, “ñ” ou “ü”, nem caracteres gregos, cirílicos, árabes ou chineses. Páginas de códigos de 8 bits posteriores usavam os valores de 128 a 255 para símbolos adicionais, mas não havia acordo sobre quais símbolos acrescentar.

Por exemplo, o byte 0xE9 significa “é” em Latin-1, mas “й” em Windows-1251. Windows-1252 é outra página de códigos comum. Portanto, o valor de um byte não pode identificar um caractere fora do ASCII sem que se conheça a codificação. Usar a tabela errada pode produzir símbolos que parecem legíveis, mas ainda assim formam o texto errado.

Principais conclusões

  • O ASCII define 128 códigos usando 7 bits, geralmente armazenados um por byte.
  • Caracteres imprimíveis incluem espaços e pontuação; caracteres de controle têm outras funções.
  • Caracteres de dígitos têm códigos diferentes dos inteiros que representam.
  • Páginas de códigos antigas diferentes podem atribuir caracteres diferentes ao mesmo byte.

4.2 Pontos de código Unicode e codificações UTF

O Unicode atribui aos caracteres de sistemas de escrita do mundo todo um conjunto compartilhado de números chamados pontos de código. “A” é U+0041, “é” é U+00E9, “Ж” é U+0416, “中” é U+4E2D e “😀” é U+1F600. A notação U+ usa hexadecimal com pelo menos quatro dígitos.

Separe um ponto de código de seus bytes

O espaço de códigos vai de U+0000 a U+10FFFF, ou 1.114.112 posições, com mais de 150.000 caracteres atribuídos. Um ponto de código identifica um caractere ou uma posição reservada; uma codificação determina sua representação em bytes.

CodificaçãoArmazenamento para um ponto de código de caractere válido
UTF-81–4 bytes
UTF-162 bytes até U+FFFF; 4 bytes acima disso
UTF-324 bytes

O intervalo de substitutos U+D800–U+DFFF é reservado para o mecanismo de pares do UTF-16; substitutos isolados não são caracteres válidos para codificação nessas formas. Um par de unidades de código UTF-16 representa um ponto de código suplementar. Por exemplo, “😀” é D83D DE00 em UTF-16.

Leia as faixas de bytes do UTF-8

O UTF-8 preserva o ASCII: U+0000–U+007F usam um byte. U+0080–U+07FF usam dois; pontos de código de caracteres válidos em U+0800–U+FFFF usam três; U+10000–U+10FFFF usam quatro. Isso torna o texto ASCII em inglês compatível byte a byte com o UTF-8.

Um caractere de um byte começa com 0. Caracteres mais longos começam com 110, 1110 ou 11110 para dois, três ou quatro bytes. Cada byte de continuação começa com 10. Os bits restantes carregam o ponto de código.

Para “é”, U+00E9, o valor em 11 bits é 00011101001. Divida-o em cinco bits e seis bits: 00011 e 101001. Insira-os em 110xxxxx 10xxxxxx para obter 11000011 10101001, ou C3 A9. O ponto de código 00E9 não é, por si só, a sequência de bytes UTF-8.

A codificação e a decodificação também devem respeitar os prefixos dos bytes. Um byte de continuação UTF-8 não é um byte ASCII independente: seus dois primeiros bits são 10, então ele pertence a uma sequência de caractere mais longa. Remover parte de um caractere de vários bytes em um limite de bytes pode deixar uma sequência incompleta. O comprimento de armazenamento e os limites em que o texto pode ser dividido estão, portanto, relacionados.

Conte os elementos certos

“café” tem quatro caracteres exibidos, mas cinco bytes em UTF-8: 63 61 66 C3 A9. “€” usa E2 82 AC, três bytes; “中” usa E4 B8 AD, também três; “😀” usa F0 9F 98 80, quatro. Um limite de bytes pode, portanto, permitir menos caracteres do que seu valor numérico sugere.

Um caractere exibido também pode conter vários pontos de código. “é” pode ser U+00E9 ou “e” seguido de U+0301, um acento agudo combinante. A segunda forma usa três bytes UTF-8, 65 CC 81. A normalização converte sequências equivalentes em uma forma comum para comparação. O emoji exibido “👍🏽” contém dois pontos de código, U+1F44D e U+1F3FD, totalizando oito bytes UTF-8.

Identifique texto corrompido

“café” em UTF-8, lido como Windows-1252, torna-se “café”: C3 e A9 são tratados como caracteres separados. Isso é mojibake, causado pela decodificação com a codificação errada. A decodificação correta pode recuperar o texto enquanto os bytes originais permanecem intactos. Uma página da web pode declarar sua codificação com <meta charset="utf-8">.

Principais conclusões

  • Um ponto de código identifica um caractere; uma codificação determina seus bytes.
  • O UTF-8 usa de um a quatro bytes, preservando o ASCII inalterado.
  • Bytes de continuação em UTF-8 começam com 10.
  • Um caractere exibido, um ponto de código e um byte são unidades de contagem diferentes.
  • A normalização pode colocar sequências de caracteres equivalentes em uma mesma forma.
  • Decodificar com a codificação errada pode produzir texto corrompido.
5

Medir imagens e som em bits

Imagens e gravações transformam detalhes visuais e sonoros em números. Uma imagem matricial armazena uma grade de valores de pixels; o áudio amostrado armazena medidas feitas em intervalos regulares. O armazenamento depende de quantos valores são mantidos e de quantos bits cada valor precisa. Essas escolhas também afetam os detalhes preservados. Desenhos vetoriais e MIDI adotam outra abordagem, descrevendo formas ou notas como instruções que um dispositivo transforma depois em imagem ou som.

5.1 Pixels, RGB, paletas e transparência

Uma imagem matricial é uma grade de pixels. Cada pixel contém um valor de cor. A largura e a altura fornecem a resolução da imagem: 1920 por 1080 significa 1920×1080=2.073.600 pixels. Uma contagem de pixels descreve a grade, não seu tamanho impresso em metros.

Atribua bits suficientes a cada pixel

A profundidade de cor é a quantidade de bits usados para a cor de um pixel. Uma profundidade de k bits permite 2k códigos possíveis. Um bit pode distinguir duas cores. Uma escala de cinza de oito bits pode distinguir 256 intensidades, geralmente de 0 para preto a 255 para branco.

Uma imagem simples de 3 por 3 pode usar 1 para preto e 0 para branco. Um sinal de mais preto é representado pelas linhas 010, 111 e 010. Nove pixels com um bit cada precisam de nove bits de informação de pixels. O armazenamento real do arquivo pode incluir preenchimento e outras informações além desses bits.

Misture luz com RGB

RGB armazena intensidades de luz vermelha, verde e azul. Com 8 bits por canal, cada intensidade varia de 0 a 255, e um pixel usa 24 bits. A quantidade de cores possíveis é 2563=224=16.777.216.

Valores RGBCor
(0, 0, 0)Preto
(255, 255, 255)Branco
(255, 0, 0)Vermelho
(0, 0, 255)Azul
(255, 255, 0)Amarelo

RGB é a mistura aditiva de luz. Combinar luz vermelha e verde produz amarelo. Uma previsão baseada na mistura de tintas usa um processo diferente e fornece o modelo errado para uma tela.

Leia códigos de cores hexadecimais

Uma cor da web usa #RRGGBB: dois dígitos hexadecimais para vermelho, depois verde e depois azul. #FF8000 significa (255, 128, 0), um laranja. #808080 significa (128, 128, 128), um cinza médio; valores iguais nos canais produzem um cinza. #0000FF fornece o maior valor de azul, com vermelho e verde em zero.

Cada par é um byte. Assim, FF é 255, não um par de intensidades de cor separadas. O # marca o código RGB inteiro e não ocupa um canal.

Os modelos RGB e de paleta consultam a cor do pixel de formas diferentes. No RGB direto, a leitura do pixel fornece imediatamente as intensidades dos três canais. Na cor indexada, a leitura do pixel fornece o número de uma entrada, e uma segunda consulta fornece as intensidades. Alterar uma entrada da paleta pode, portanto, mudar muitos pixels exibidos que compartilham o mesmo índice, mesmo que seus índices armazenados permaneçam inalterados.

Armazene um índice de paleta

Quando uma imagem usa poucas cores, ela pode manter uma paleta de cores, uma tabela das cores selecionadas. Um pixel armazena então um índice dessa tabela. Uma paleta de 16 cores precisa de quatro bits por pixel porque quatro bits distinguem 16 entradas. A própria paleta também ocupa espaço. O GIF usa até 256 cores na paleta, permitindo um índice de 8 bits por pixel.

Acrescente transparência

Um canal alfa descreve a opacidade. Uma escala comum de 8 bits usa 0 para totalmente transparente e 255 para totalmente opaco, com valores intermediários para transparência parcial. Acrescentar esse canal ao RGB de 24 bits resulta em RGBA de 32 bits. O alfa é separado do vermelho, verde e azul: um pixel totalmente transparente ainda pode ter valores de cor armazenados que não aparecem na imagem final.

Principais conclusões

  • Uma imagem matricial armazena uma grade de valores de pixels.
  • A profundidade de cor determina a quantidade de códigos de cor disponíveis por pixel.
  • O RGB comum usa três canais de 8 bits, totalizando 24 bits.
  • Um índice de paleta seleciona uma cor de uma tabela.
  • Um canal alfa acrescenta informações de opacidade; um alfa de 8 bits transforma RGB em RGBA de 32 bits.

5.2 Calcular o armazenamento de imagens e vídeos

Os dados de pixels de uma imagem matricial sem compressão crescem conforme a quantidade de pixels e de bits por pixel. Manter as unidades em cada etapa ajuda a separar a quantidade de informação do tamanho em bytes informado por um visualizador de arquivos.

Calcule os dados de pixels

Use bits=largura×altura×bits por pixel. Divida por 8 para obter bytes. Largura e altura devem ser multiplicadas porque cada linha contém toda a largura de pixels.

Para 1920 por 1080 com 24 bits por pixel, primeiro encontre 2.073.600 pixels. Multiplique por 24 para obter 49.766.400 bits e divida por 8 para obter 6.220.800 bytes. Isso equivale a cerca de 6,2 MB, ou 5,93 MiB. Mudar a unidade não muda os dados de pixels correspondentes.

Para 640 por 480 em escala de cinza de 8 bits, há 307.200 pixels. Oito bits cada fornecem 2.457.600 bits; dividir por 8 resulta em 307.200 bytes, cerca de 307 kB. Aqui, um byte por pixel faz a contagem final de bytes ser igual à contagem de pixels.

Preveja mudanças antes de calcular

Dobrar a largura dobra os pixels em cada linha. Dobrar a altura dobra as linhas. Dobrar as duas, portanto, multiplica por quatro a quantidade de pixels e o armazenamento. Aumentar a profundidade de 8 para 24 bits por pixel triplica o armazenamento na mesma resolução. Esses fatores se multiplicam se ambos mudarem.

O cálculo bruto fornece os dados de pixels, não necessariamente um arquivo de imagem completo. Um arquivo também armazena metadados, como largura, altura, profundidade de cor e formato. Uma foto pode registrar configurações da câmera, data e local. Tabelas de paleta, cabeçalhos, preenchimento e compressão também podem alterar o tamanho final em bytes.

Para profundidades abaixo de oito bits, calcule todos os dados em bits antes de converter. Uma imagem de 100 por 60 com um bit contém 6.000 bits de pixels, ou 750 bytes compactados. Tratar cada pixel como um byte superestimaria esses dados em oito vezes. Se um formato completar cada linha até um determinado limite, esse preenchimento deve ser acrescentado separadamente; ele não altera a profundidade de cor.

Amplie o cálculo para vídeo

Um vídeo apresenta uma sequência de imagens chamadas quadros. A 30 quadros por segundo, um vídeo RGB de 1920 por 1080 precisa de 6.220.800×30=186.624.000 bytes de dados de imagem sem compressão por segundo, cerca de 187 MB/s. Multiplicar pela duração fornece o total de dados de imagem. O som acrescenta seu próprio armazenamento.

Essa taxa elevada explica por que arquivos de vídeo comuns são comprimidos. A taxa de um vídeo comprimido é uma grandeza distinta; ela não pode ser deduzida apenas da resolução.

Compare imagens matriciais e vetoriais
MatricialVetorial
Armazena uma grade de valores de corArmazena formas e instruções de desenho
Adequada para fotografias e texturasAdequada para logotipos, diagramas e contornos de fontes
Ampliar a grade revela os pixelsAs formas podem ser redesenhadas em escala maior

Um arquivo vetorial pode descrever uma linha de (0, 0) até (100, 50), ou um círculo por seu centro, raio e preenchimento. Ele não precisa armazenar um valor de cor separado para cada ponto dentro do círculo. Desenhos simples podem, portanto, ser pequenos. SVG é um formato vetorial comum.

Uma tela ainda precisa de pixels. A rasterização transforma as formas em uma grade de pixels no tamanho solicitado. Redimensionar instruções vetoriais preserva a geometria da forma; ampliar uma imagem matricial existente não pode recuperar detalhes que sua grade original nunca registrou.

Principais conclusões

  • Os bits de uma imagem matricial sem compressão equivalem a largura × altura × bits por pixel.
  • Divida os bits por 8 antes de informar os bytes.
  • Dobrar as duas dimensões quadruplica os dados de pixels na mesma profundidade.
  • Os dados brutos de imagem de um vídeo equivalem a bytes por quadro × taxa de quadros × duração.
  • Metadados e compressão fazem o tamanho do arquivo diferir de um cálculo bruto de pixels.
  • Gráficos vetoriais armazenam formas que são rasterizadas para exibição.

5.3 Amostrar som e calcular o tamanho do áudio

O som é uma vibração da pressão do ar. Um microfone o transforma em um sinal elétrico analógico que varia continuamente. Um conversor analógico-digital faz medidas regulares, chamadas amostras, e armazena cada uma como um número.

Separe o tempo do detalhamento da medida

A taxa de amostragem, medida em hertz, é a quantidade de amostras obtidas por segundo em cada canal. Uma taxa de 44.100 Hz é 44,1 kHz. CDs usam 44,1 kHz, trilhas sonoras de vídeo geralmente usam 48 kHz e o áudio telefônico tradicional usa 8 kHz. As amostras registram valores nesses instantes; elas não são um registro contínuo de todos os instantes entre eles.

A profundidade de bits determina quantos níveis cada amostra pode usar. Oito bits fornecem 256 níveis, 16 fornecem 65.536 e 24 fornecem 16.777.216. Arredondar uma medida para um nível é a quantização. A diferença em relação à medida original produz o erro de quantização, que pode ser ouvido como ruído. Mais bits fornecem níveis mais finos e reduzem esse erro.

A taxa de amostragem controla o detalhamento no tempo; a profundidade de bits controla o detalhamento da amplitude medida. Aumentar uma não substitui aumentar a outra.

Capte a faixa de frequências

O teorema da amostragem exige uma taxa de amostragem maior que o dobro da frequência mais alta captada. Para captar 20 kHz, a taxa deve superar 40 kHz. Exatamente o dobro é insuficiente para um sinal arbitrário no limite.

A 44,1 kHz, o limite teórico fica abaixo de 22,05 kHz. O intervalo acima de cerca de 20 kHz, o limite superior aproximado da audição humana, deixa espaço para um filtro contra sobreposição espectral. Frequências acima da metade da taxa de amostragem podem aparecer como frequências mais baixas falsas, fenômeno chamado de sobreposição espectral. Um conversor filtra essas frequências altas antes da amostragem.

Uma taxa de 44.100 Hz se aplica a cada canal, não à gravação como um fluxo combinado. O estéreo, portanto, armazena 88.200 valores de amostra por segundo. O fator de canais pertence à fórmula de armazenamento porque cada instante tem um valor esquerdo e um direito. Ele não dobra a frequência mais alta que cada canal pode captar; esse limite ainda depende da própria taxa de amostragem do canal.

Calcule o áudio sem compressão

Mono tem um canal; estéreo tem dois. O tamanho dos dados é

bits=taxa de amostragem×profundidade de bits×canais×segundos

Para uma gravação estéreo de três minutos a 44.100 Hz e 16 bits, a taxa é 44.100×16×2=1.411.200 bit/s. Multiplique por 180 segundos para obter 254.016.000 bits e divida por 8: 31.752.000 bytes, cerca de 31,8 MB.

Uma gravação mono de dez segundos a 8.000 Hz e 8 bits resulta em 8.000×8×1×10=640.000 bits, ou 80.000 bytes. Uma gravação estéreo nas mesmas configurações usaria o dobro.

Escolha o que armazenar

Taxas e profundidades maiores exigem mais espaço. As configurações de CD geralmente são suficientes para ouvir; estúdios costumam usar 24 bits e 48 kHz ou mais para deixar margem para processamento e edição.

O MIDI registra instruções de notas: quais notas, quando começam, sua intensidade e as escolhas de instrumentos. Ele pode ser muito menor que uma execução amostrada, mas a reprodução depende dos sons de instrumentos disponíveis. O MIDI pode descrever a melodia de um cantor como notas; não pode conter a voz efetivamente gravada.

Principais conclusões

  • A taxa de amostragem conta medidas por segundo; a profundidade de bits conta bits por medida.
  • A quantização arredonda uma amostra para um dos níveis disponíveis.
  • A taxa de amostragem deve superar o dobro da frequência mais alta captada.
  • Filtros contra sobreposição espectral removem frequências altas antes da amostragem.
  • Os bits de áudio equivalem a taxa de amostragem × profundidade de bits × canais × segundos.
  • O MIDI armazena instruções de execução, não uma forma de onda gravada.
6

Comprimir dados e escolher um formato

A compressão reduz os bits necessários para armazenar ou enviar dados. Alguns métodos substituem informações repetidas por descrições mais curtas que podem ser revertidas exatamente. Outros removem detalhes de imagens e sons para obter arquivos menores. Você acompanhará códigos simples, considerará as informações de que um decodificador precisa e escolherá um formato conforme o que deve ser preservado. Um arquivo destinado à edição ou à recuperação exata tem necessidades diferentes de uma transmissão final para ouvir ou assistir.

6.1 Códigos sem perdas e seus limites

A compressão sem perdas permite que a descompressão reconstrua exatamente os bits originais. Textos, arquivos de programas, planilhas e outros dados exatos precisam dessa propriedade. ZIP, PNG, GIF e FLAC são formatos sem perdas conhecidos. Eles exploram a redundância: informações repetidas ou previsíveis que têm uma descrição mais curta.

Descreva sequências repetidas

A codificação por comprimento de sequência, ou RLE, substitui símbolos idênticos consecutivos por uma contagem e pelo símbolo. A cadeia de 18 caracteres “AAAAAABBBCCCCCCCCD” torna-se “6A3B8C1D”, oito caracteres nessa convenção de contagem e símbolo. A decodificação expande cada par: seis As, três Bs, oito Cs e um D.

A mesma ideia é adequada para regiões de imagem com cores uniformes. A linha de pixels 0000000011110000 pode ser descrita como oito zeros, quatro uns e quatro zeros. Um arquivo real deve definir como contagens e símbolos são armazenados para que a decodificação seja inequívoca.

Sequências curtas podem fazer a RLE aumentar o tamanho. “ABCD” torna-se “1A1B1C1D”, dobrando a quantidade de caracteres antes de qualquer cabeçalho. A compressão só funciona quando a economia supera o custo de descrever o padrão.

Faça referência a uma sequência repetida

Um método de compressão por dicionário substitui uma sequência repetida por uma referência. Métodos da família LZ são a base de formatos como ZIP e PNG. Em “canto no mar canto”, a segunda ocorrência de “canto” pode ser substituída por uma instrução para voltar 13 caracteres e copiar cinco. Espaços contam como caracteres. O decodificador já tem o texto anterior e pode reproduzir a sequência a partir da referência.

Dê códigos mais curtos a símbolos comuns

Um código de comprimento variável usa diferentes quantidades de bits para diferentes símbolos. A codificação de Huffman constrói códigos a partir das frequências dos símbolos. Em “ABRACADABRA”, A aparece cinco vezes, B e R duas vezes cada, e C e D uma vez cada. Um código de largura fixa para cinco símbolos precisa de três bits por símbolo, ou 33 bits para onze letras.

Um código livre de prefixos adequado é A = 0, B = 10, R = 110, C = 1110 e D = 1111. Os dados codificados usam 5×1+2×2+2×3+1×4+1×4=23 bits. A tabela de códigos acrescenta sobrecarga, então 23 bits, por si só, não são o tamanho completo do arquivo.

Livre de prefixos significa que o código de nenhum símbolo é o início do código de outro símbolo. Ler 0110, portanto, fornece A seguido de R sem precisar de separadores. Essa propriedade permite que um decodificador de Huffman reconheça um símbolo assim que seu código termina.

O decodificador precisa conhecer a convenção de codificação, além dos dados. Para uma sequência no estilo de Huffman, ele precisa do mapeamento de símbolos para códigos; para RLE, precisa distinguir uma contagem de um símbolo. Uma mensagem pequena pode economizar bits nos dados e ainda assim crescer no total quando essa descrição é incluída. Compare os tamanhos completos original e codificado ao decidir se um método realmente reduziu o arquivo.

Meça a economia e reconheça os limites

A razão de compressão é o tamanho original dividido pelo tamanho comprimido. Reduzir 6 MB para 2 MB resulta em 3:1. Use a mesma unidade nos dois lados.

Nenhum método sem perdas pode reduzir todos os arquivos possíveis. Existem 2n entradas diferentes de n bits, mas apenas 2n−1 sequências de bits com menos de n bits. A recuperação exata exige que entradas diferentes continuem distinguíveis, então nem todas podem receber saídas mais curtas. Dados aleatórios e arquivos já comprimidos muitas vezes diminuem pouco ou aumentam por causa da sobrecarga acrescentada.

Principais conclusões

  • A descompressão sem perdas reproduz exatamente os bits originais.
  • A RLE descreve símbolos idênticos consecutivos com contagens.
  • Métodos por dicionário substituem sequências repetidas por referências.
  • A codificação de Huffman atribui códigos mais curtos usando as frequências dos símbolos.
  • Um código livre de prefixos identifica os limites dos símbolos sem separadores.
  • A razão de compressão compara o tamanho original com o tamanho comprimido.
  • Nenhum método sem perdas reduz todas as entradas possíveis.

6.2 Formatos com perdas e escolhas de qualidade

A compressão com perdas remove informações para reduzir o tamanho do arquivo. A descompressão cria uma versão próxima do original, com alguns detalhes permanentemente ausentes. Fotografias, música, fala e vídeo podem tolerar perdas selecionadas que textos ou dados de programas exatos não podem.

Comprima imagens conforme a importância visual

O JPEG se baseia nas diferentes sensibilidades da visão humana a brilho, cor e detalhes finos. Um JPEG típico reduz a resolução dos detalhes finos de cor e arredonda detalhes finos da imagem representados em blocos de 8 por 8. Sua configuração de qualidade controla a intensidade do descarte de informações. Uma compressão maior pode produzir blocos aparentes, desfoque ou ondulações perto de bordas nítidas.

Uma fotografia muitas vezes pode alcançar cerca de 10:1 com pouca perda visível. Nessa razão, uma imagem com 6.220.800 bytes de dados brutos de pixels usaria cerca de 622.080 bytes comprimidos, aproximadamente 0,6 MB. A razão é um exemplo, não uma propriedade fixa de todo JPEG.

Comprima o som conforme o que pode ser ouvido

MP3 e AAC usam codificação perceptual. Um som baixo pode ser encoberto por um som mais alto em uma frequência próxima, então o codificador pode dedicar menos bits a informações que uma pessoa provavelmente não ouvirá. Um arquivo menor ainda pode soar muito próximo do original.

Para uma taxa de bits constante, o tamanho em bits é igual à taxa de bits multiplicada pela duração. A 128 kbit/s, uma gravação de três minutos precisa de 128.000×180=23.040.000 bits, ou 2.880.000 bytes, cerca de 2,9 MB. Isso é cerca de um onze avos dos 1.411,2 kbit/s do áudio de CD sem compressão. A taxa comprimida já descreve o fluxo codificado; não a multiplique novamente pela profundidade de amostra original.

Explore semelhanças entre quadros de vídeo

Quadros vizinhos frequentemente mostram quase a mesma cena. Formatos de vídeo como H.264 e AV1 comprimem detalhes da imagem e descrevem muitos quadros por meio de mudanças ou previsões a partir de outros quadros. Isso remove informações repetidas ao longo do tempo e dentro de cada imagem.

Escolha o formato conforme o uso
UsoEscolha adequadaMotivo
Texto, código ou dados exatosArquivo compactado sem perdasCada bit deve ser preservado
Foto para compartilhamentoJPEG ou outro formato de imagem com perdasTamanho pequeno com perda visual aceitável
Captura de tela ou logotipoPNGPreserva bordas nítidas e cores uniformes
Música para transmissãoAAC, MP3 ou OpusEconomiza capacidade de transferência
Áudio mestre para arquivamentoFLACRecuperação exata das amostras de áudio

Guarde um original sem perdas para edições futuras. Decodificar e recodificar repetidamente com perdas pode acrescentar perda por gerações sucessivas. Converter um JPEG que já tem perdas para PNG preserva seus pixels decodificados atuais, mas não pode restaurar detalhes removidos anteriormente.

Uma compressão maior pode custar qualidade, tempo de processamento ou ambos. A escolha adequada depende do conteúdo do arquivo e de como ele será usado; o menor arquivo nem sempre é o mais útil.

Principais conclusões

  • A compressão com perdas remove permanentemente informações selecionadas.
  • O JPEG explora a sensibilidade visual; o áudio com perdas usa codificação perceptual.
  • O tamanho de um fluxo comprimido segue taxa de bits × duração.
  • Guarde um original sem perdas quando edições futuras ou recuperação exata forem importantes.
  • Mudar um arquivo com perdas para um formato sem perdas não recupera informações descartadas.

Exercícios resolvidos de Representação binária e de dados

6 Lições Interativas

1

Construir um código e depois ler seus bits

12 passos
Contar os padrões necessários para um campo, converter seus valores e relacionar grupos binários à notação hexadecimal.
  1. 1
    IntroduçãoUm padrão, várias leituras

    Um padrão armazenado tem duas características distintas: quantos bits ocupa e como quem o lê os interpreta. Os oito bits 01000001 podem significar um número, um caractere de texto ou uma intensidade de cor.

    Primeiro escolheremos bits suficientes para distinguir uma coleção de valores e depois leremos um padrão numérico usando valores posicionais binários e hexadecimal. Mudar a notação muda o que você escreve, mantendo o valor intacto.

  2. 2
    ExplicaçãoConte as possibilidades por duplicação

    Cada bit tem duas possibilidades, então cada bit acrescentado dobra a quantidade de padrões. Dois bits fornecem 00, 01, 10 e 11; três bits fornecem oito padrões. Em geral, n bits geram 2n padrões.

    Para identificar 26 letras, quatro bits não bastam porque geram apenas 16 padrões. Cinco bits geram 32 e deixam seis padrões sem uso. Um código não precisa usar todos os padrões disponíveis.

  3. 3
    DesafioEscolha um campo para categorias

    Um dispositivo deve distinguir 90 categorias. Qual é a menor quantidade de bits capaz de codificá-las? Quantos padrões permanecerão sem uso?

    ---reveal---

    Seis bits fornecem 64 padrões, uma quantidade insuficiente. Sete fornecem 128, então o campo precisa de sete bits e deixa 38 padrões sem uso. O maior identificador numérico poderia ser 89 se os identificadores começassem em zero; esse extremo é diferente da contagem de 90 categorias.

  4. 4
    ConexãoObserve se a letra da unidade é maiúscula ou minúscula

    Um byte tem oito bits. Por isso, importa se a letra da unidade é maiúscula ou minúscula: b significa bit e B significa byte. Um enlace de 40 Mbit/s tem um limite ideal de dados úteis de 5 MB/s antes da sobrecarga de controle.

    Os prefixos das unidades também importam. Um MB significa um milhão de bytes, enquanto um MiB significa 1.048.576 bytes. Converter uma quantidade armazenada de MB para MiB muda a leitura numérica sem remover dados.

  5. 5
    ExplicaçãoAlinhe as posições binárias

    A posição inteira mais à direita vale 1. Indo para a esquerda, temos 2, 4, 8, 16, 32, 64 e assim por diante. Um 1 seleciona uma posição e um 0 a deixa de fora.

    Para 101101, os valores posicionais selecionados são 32, 8, 4 e 1, totalizando 45. Zeros à esquerda podem preencher uma largura sem mudar essas posições. A ausência de um zero dentro do padrão deslocaria alguns dígitos e mudaria o valor.

  6. 6
    ExemploSelecione as potências para 156

    A maior potência de dois que não ultrapassa 156 é 128. Subtraia-a para obter 28. Os valores posicionais 64 e 32 não cabem, então atribua zeros a eles.

    Subtraia 16 de 28, restando 12. Subtraia 8, restando 4, e depois subtraia 4 para chegar a zero. As duas últimas posições, 2 e 1, recebem zeros. Nas posições de 128 a 1, os bits são 10011100. Manter cada posição não utilizada impede que as potências escolhidas sejam deslocadas.

  7. 7
    DicaInverta a ordem dos restos da divisão de inteiros

    Divisões sucessivas são outra forma de chegar ao mesmo padrão. Dividir um número inteiro por dois fornece seu último bit como resto. Dividir o quociente encontra o próximo bit à esquerda.

    Para 156, os restos aparecem como 0, 0, 1, 1, 1, 0, 0, 1. Leia do último para o primeiro para obter 10011100. A ordem inversa é necessária porque a divisão encontra primeiro a posição menos significativa.

  8. 8
    DesafioConverta e confira um novo valor

    Escreva o decimal 109 em oito posições binárias e depois use seu resultado para explicar se 109 é ímpar.

    ---reveal---

    As potências escolhidas são 64, 32, 8, 4 e 1, então o padrão é 01101101. Sua soma é 109, o que confirma a conversão. O último bit é 1; todas as outras posições contribuem com quantidades pares, resultando em um número inteiro ímpar. O zero à esquerda preenche o byte sem mudar o valor.

  9. 9
    ExplicaçãoSubstitua grupos de quatro bits por dígitos hexadecimais

    O hexadecimal tem dezesseis dígitos: 0–9 seguidos de A–F para os valores de dez a quinze. Quatro bits também distinguem dezesseis padrões, então cada dígito hexadecimal representa um grupo de quatro bits.

    Divida 10011100 em 1001 e 1100. O primeiro grupo é nove e o segundo é doze, escrito como C. O resultado é 0x9C. O hexadecimal é quatro vezes mais curto que o binário em quantidade de dígitos, mantendo uma ligação direta com os grupos dentro do byte.

  10. 10
    ExemploAgrupe um padrão curto a partir da direita

    Para converter 101101, forme grupos a partir da direita: 10 e 1101. Complete o grupo da extremidade esquerda até 0010. Os grupos agora fornecem os dígitos hexadecimais 2 e D, então o valor é 0x2D.

    Confira usando valores posicionais hexadecimais: dois grupos de dezesseis mais treze unidades resultam em 45. Agrupar a partir da esquerda colocaria o último grupo curto na posição errada. Em uma expansão hexadecimal completa, cada dígito deve manter os quatro bits.

  11. 11
    DesafioRelacione bits, largura e hexadecimal

    Um campo sem sinal de largura fixa armazena 0xB4. Quantos bits são mostrados por seus dois dígitos hexadecimais, qual é seu padrão binário e qual valor decimal ele contém?

    ---reveal---

    Dois dígitos hexadecimais representam oito bits. B se expande em 1011 e 4 em 0100, então o byte é 10110100. Seus valores posicionais selecionados somam 128 + 32 + 16 + 4 = 180. De forma equivalente, onze grupos de dezesseis mais quatro resultam em 180.

  12. 12
    RecapitulaçãoTrês verificações para um valor armazenado

    Verifique capacidade, notação e unidades separadamente. Um campo precisa de padrões suficientes para todos os seus valores possíveis. O binário seleciona potências de dois; o hexadecimal agrupa esses bits de quatro em quatro a partir da direita.

    O valor armazenado permanece o mesmo com uma mudança da base escrita ou da unidade de armazenamento. Uma mudança na interpretação dos dados pode dar aos mesmos bits um significado diferente, então o padrão e a regra para lê-lo devem ser considerados juntos.

2

Ler valores com sinal e preservar sua largura

11 passos
Trabalhar com limites sem sinal, codificação em complemento de dois e ampliação da largura de um valor negativo.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUma largura precisa de uma interpretação
  2. 2
    ExplicaçãoReserve um padrão para zero
  3. 3
    ExemploAcompanhe o retorno cíclico sem sinal
  4. 4
    DesafioEscolha espaço suficiente para uma contagem
  5. 5
    ExplicaçãoAtribua um peso negativo ao bit inicial
  6. 6
    ExemploComece o padrão para −45
  7. 7
    ExemploComplete a negação
  8. 8
    DesafioCodifique outro inteiro negativo
  9. 9
    Ideia-chaveEstenda o sinal, não apenas os zeros
  10. 10
    DesafioAumente a largura antes de obter o oposto
  11. 11
    RecapitulaçãoMantenha a regra junto ao padrão
3

Construir uma codificação em ponto flutuante

17 passos
Converter uma fração binária, montar campos IEEE 754 e raciocinar sobre arredondamento e espaçamento.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUm valor e uma escala
  2. 2
    ExplicaçãoLeia as posições fracionárias
  3. 3
    ExemploGere uma fração finita
  4. 4
    Ideia-chavePreveja se os dígitos terminam
  5. 5
    DesafioEncontre a escala em ponto fixo
  6. 6
    ExplicaçãoReconheça os campos
  7. 7
    ExemploEscreva 6,25 em binário
  8. 8
    ExemploCodifique o expoente
  9. 9
    ExemploArmazene apenas a fração
  10. 10
    ExemploJunte os três campos
  11. 11
    DesafioDecodifique outro valor normal
  12. 12
    DicaClassifique primeiro os padrões reservados
  13. 13
    ExplicaçãoSepare faixa de representação de espaçamento
  14. 14
    Ideia-chaveObserve o intervalo crescer
  15. 15
    DesafioArredonde um inteiro no ponto médio
  16. 16
    DesafioEscolha um tipo para uma quantia exata
  17. 17
    RecapitulaçãoLeia o formato antes do valor
4

Acompanhar o texto dos caracteres aos bytes

12 passos
Distinguir códigos ASCII, pontos de código Unicode e bytes codificados e identificar uma incompatibilidade de decodificação.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoO texto precisa de um acordo
  2. 2
    ExplicaçãoEncontre o código de caractere ASCII
  3. 3
    ExemploCodifique letras e pontuação
  4. 4
    DesafioRecupere um dígito numérico
  5. 5
    ConexãoPor que um único byte não era suficiente
  6. 6
    ExplicaçãoIdentifique antes de codificar
  7. 7
    ExemploDivida os bits de é
  8. 8
    ExemploComplete os dois bytes codificados
  9. 9
    DesafioConte uma cadeia com sistemas de escrita diferentes
  10. 10
    Ideia-chaveUma aparência pode ter duas formas
  11. 11
    DesafioIdentifique a palavra corrompida
  12. 12
    RecapitulaçãoMantenha três contagens separadas
5

Estimar o armazenamento de imagens e gravações

15 passos
Usar contagens de pixels e amostras, separar profundidade de bits de resolução e comparar armazenamento bruto com formatos baseados em instruções.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoConte os valores e depois os bits por valor
  2. 2
    ExplicaçãoConstrua um pixel RGB
  3. 3
    ConexãoAcrescente transparência ou use uma paleta
  4. 4
    DesafioLeia uma cor e sua profundidade
  5. 5
    ExemploComece pela grade de pixels
  6. 6
    ExemploConverta a imagem em bytes
  7. 7
    DesafioRedimensione a grade e acrescente quadros
  8. 8
    Ideia-chaveUm desenho pode armazenar instruções
  9. 9
    ExplicaçãoAmostre o tempo e a amplitude separadamente
  10. 10
    ExplicaçãoFiltre antes de amostrar
  11. 11
    ExemploEncontre primeiro a taxa de áudio
  12. 12
    DesafioCalcule uma gravação diferente
  13. 13
    ConexãoNotas podem substituir uma forma de onda
  14. 14
    DesafioCompare duas mudanças de armazenamento
  15. 15
    RecapitulaçãoMantenha os fatores e as unidades visíveis
6

Comprimir sem confundir tamanho e fidelidade

12 passos
Aplicar códigos de comprimento de sequência e de comprimento variável, considerar a sobrecarga e decidir quando informações podem ser descartadas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDuas maneiras de obter um arquivo menor
  2. 2
    ExplicaçãoSubstitua sequências por contagens
  3. 3
    DesafioExperimente sequências longas e curtas
  4. 4
    ConexãoAponte para uma sequência já vista
  5. 5
    ExemploAtribua códigos curtos a símbolos frequentes
  6. 6
    DesafioDecodifique o fluxo em ordem
  7. 7
    Ideia-chaveAlgumas entradas precisam continuar grandes
  8. 8
    ExplicaçãoRemova detalhes de mídia menos perceptíveis
  9. 9
    ExemploUse diretamente uma taxa de bits comprimida
  10. 10
    DesafioProteja um original mestre ao compartilhar uma cópia
  11. 11
    DesafioCompare uma razão com um limite de transferência
  12. 12
    RecapitulaçãoAjuste a garantia à finalidade

Questões de Representação binária e de dados

50 Questões de Prática em 5 conjuntos

Conjunto 1: Ler padrões e estimar armazenamento10 Questões de Prática

Questão 1 de 10

Um campo de estado deve distinguir 70 estados diferentes. Qual é a menor quantidade de bits necessária?
  1. 6 bits
  2. 8 bits
  3. 7 bits
  4. 70 bits
Mostrar respostaOcultar resposta
Resposta: C
Seis bits fornecem 64 padrões, que não cobrem 70 estados. Sete bits fornecem 128 padrões, então sete é a menor largura que funciona. Escolher seis porque 64 está próximo deixaria alguns estados sem um padrão próprio.

Questão 2 de 10

Qual valor decimal o número binário 1010110 representa?
  1. 86
  2. 84
  3. 106
  4. 43
Mostrar respostaOcultar resposta
Resposta: A
Os bits 1 ocupam as posições 64, 16, 4 e 2, totalizando 86. O zero na posição das unidades não contribui para a soma. Ler 101011 como 43 descarta o zero final, removendo uma posição e reduzindo o valor à metade em vez de preservá-lo.

Questão 3 de 10

Como o número inteiro binário 1110101 é escrito em hexadecimal?
  1. 0xE5
  2. 0x7A
  3. 0xD1
  4. 0x75
Mostrar respostaOcultar resposta
Resposta: D
Agrupe a partir da direita para obter 0111 0101. Esses grupos de quatro bits são 7 e 5, resultando em 0x75. Agrupar a partir da esquerda como 1110 101 e completar o segundo grupo mudaria os valores posicionais e produziria incorretamente 0xE5.

Questão 4 de 10

Qual é o maior inteiro sem sinal que cabe em 12 bits?
  1. 4.096
  2. 4.095
  3. 2.047
  4. 4.097
Mostrar respostaOcultar resposta
Resposta: B
Doze bits fornecem 4.096 padrões, e o primeiro padrão representa zero. O maior valor sem sinal é, portanto, 4.095. Usar 4.096 como máximo confunde a quantidade de padrões disponíveis com o valor final de uma contagem que começa em zero.

Questão 5 de 10

Qual valor 11101010 representa como inteiro de 8 bits em complemento de dois?
  1. −106
  2. −22
  3. 234
  4. −21
Mostrar respostaOcultar resposta
Resposta: B
O bit mais significativo com sinal contribui com −128, e os outros bits iguais a 1 contribuem com 64 + 32 + 8 + 2 = 106, resultando em −22. Ler 106 como magnitude e acrescentar um sinal de menos resulta em −106, mas essa é a interpretação de sinal e magnitude, não de complemento de dois.

Questão 6 de 10

Qual valor decimal é representado pela fração binária 10,011?
  1. 2,75
  2. 2,3
  3. 2,625
  4. 2,375
Mostrar respostaOcultar resposta
Resposta: D
A parte inteira é 2, e a fração seleciona um quarto mais um oitavo. A soma é 0,375, então o valor completo é 2,375. Usar 2,75 trata o primeiro 1 fracionário como um meio e desloca as duas posições fracionárias selecionadas uma posição para a esquerda.

Questão 7 de 10

No ASCII, “0” tem código 48. Qual é o código do caractere “8”?
  1. 56
  2. 8
  3. 55
  4. 64
Mostrar respostaOcultar resposta
Resposta: A
Os caracteres de dígitos ASCII ocupam códigos consecutivos, começando com 48 para “0”. Avançar oito posições resulta em 56 para “8”. O valor inteiro 8 tem outra representação; armazenar o caractere exige o código de caractere, não o valor que sua forma representa.

Questão 8 de 10

Quais valores de canais RGB a cor da web #4080C0 especifica?
  1. (40, 80, 120)
  2. (192, 128, 64)
  3. (64, 128, 192)
  4. (4, 8, 12)
Mostrar respostaOcultar resposta
Resposta: C
Divida o código de cor nos pares hexadecimais 40, 80 e C0. Seus valores decimais são 64, 128 e 192 na ordem vermelho, verde e azul. Tratar os pares como números decimais ignora os valores posicionais de base 16, enquanto inverter os pares troca vermelho e azul.

Questão 9 de 10

Quantos bytes de dados de amostras sem compressão são necessários para 6 segundos de áudio mono a 12.000 Hz e 16 bits?
  1. 72.000 bytes
  2. 288.000 bytes
  3. 1.152.000 bytes
  4. 144.000 bytes
Mostrar respostaOcultar resposta
Resposta: D
Há 12.000 × 6 = 72.000 amostras no único canal, cada uma usando dois bytes. O total é 144.000 bytes. Informar 1.152.000 equivale a apresentar a quantidade de bits como bytes; o estéreo dobraria o tamanho, mas essa gravação é mono.

Questão 10 de 10

Um código sem perdas usa A = 0, B = 10, C = 110 e D = 111. Uma mensagem tem 40 As, 5 Bs, 2 Cs e 1 D. Uma tabela necessária acrescenta 16 bits. Quantos bits são economizados em comparação com um código fixo de 2 bits sem tabela?
  1. 21 bits
  2. 37 bits
  3. 16 bits
  4. 5 bits
Mostrar respostaOcultar resposta
Resposta: A
Os dados de comprimento variável usam 40 + 10 + 6 + 3 = 59 bits, e sua tabela eleva o total a 75. O código fixo usa 48 × 2 = 96 bits, então a economia é de 21 bits. Afirmar que foram economizados 37 bits ignora a tabela necessária de 16 bits.
Conjunto 2: Aplicar formatos e calcular tamanhos de dados10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um enlace transfere dados a 48 Mbit/s. Ignorando a sobrecarga de controle, quantos megabytes decimais ele pode transferir em 5 segundos?
  1. 6 MB
  2. 30 MB
  3. 240 MB
  4. 3 MB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Como 74 é escrito como um valor binário sem sinal de 8 bits?
  1. 01010010
  2. 10010100
  3. 01001001
  4. 01001010
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Como −19 é representado em complemento de dois de 8 bits?
  1. 11101101
  2. 11101100
  3. 10010011
  4. 00010011
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um valor normal binary32 tem sinal 0, expoente armazenado 125 e bits de fração 100 seguidos de zeros. Qual é seu valor decimal?
  1. 1,5
  2. 0,25
  3. 0,375
  4. 0,1875
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um valor positivo é finito em binary64, mas causa estouro em binary32 sob o arredondamento padrão. Qual aspecto do binary32 foi excedido?
  1. Sua contagem exata de inteiros
  2. Suas casas decimais exibidas
  3. Sua faixa de representação finita
  4. Seu limite de codificação de texto
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Quantos bytes UTF-8 ocupa “AЖ中😀” se Ж é U+0416, 中 é U+4E2D e 😀 é U+1F600?
  1. 10 bytes
  2. 4 bytes
  3. 8 bytes
  4. 12 bytes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma imagem matricial usa uma paleta de exatamente 32 cores. Qual é a menor quantidade fixa de bits necessária para cada índice de pixel?
  1. 4 bits
  2. 6 bits
  3. 32 bits
  4. 5 bits
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma imagem RGB sem compressão de 300 × 200 usa 24 bits por pixel. As duas dimensões são dobradas e um canal alfa de 8 bits é acrescentado. Qual é o novo tamanho dos dados de pixels?
  1. 720.000 bytes
  2. 960.000 bytes
  3. 480.000 bytes
  4. 240.000 bytes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma gravação mono dura 4 segundos a 30.000 Hz com amostras de 12 bits. Após filtragem passa-baixas, sua frequência mais alta é 14 kHz. Qual é o tamanho dos dados brutos e a conclusão sobre a amostragem?
  1. 180.000 bytes; a taxa é insuficiente
  2. 180.000 bytes; a taxa é suficiente
  3. 360.000 bytes; a taxa é suficiente
  4. 120.000 bytes; a taxa é insuficiente
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um fluxo de áudio de taxa constante usa 96 kbit/s durante 50 segundos. Ignorando os cabeçalhos, qual é seu tamanho em bytes decimais?
  1. 600.000 bytes
  2. 4.800.000 bytes
  3. 6.000.000 bytes
  4. 300.000 bytes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Interpretar os mesmos bits de maneiras diferentes10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Qual valor decimal 0x2B6 representa?
  1. 678
  2. 710
  3. 438
  4. 694
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um contador sem sinal de 8 bits usa retorno cíclico. Ele começa em 247 e aumenta em 28. Qual valor é armazenado?
  1. 19
  2. 20
  3. 255
  4. 275
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um campo de 6 bits em complemento de dois contém 101101. Sua largura é aumentada para 8 bits sem mudar seu valor. Quais são o padrão ampliado e o valor decimal?
  1. 00101101; −19
  2. 11101101; −45
  3. 11101101; −19
  4. 10101101; −19
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Qual é o intervalo entre valores adjacentes quando um formato de ponto fixo sem sinal tem seis bits de fração?
  1. 1/6
  2. 1/64
  3. 1/32
  4. 1/128
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Quais são o sinal, o expoente armazenado e o início do campo da fração quando −13,5 é codificado como binary32 normal?
  1. 1; 130; 11011…
  2. 1; 130; 1011…
  3. 1; 124; 1011…
  4. 1; 131; 1011…
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

O texto “0064” é armazenado com um byte ASCII por caractere. Quantos bytes ele ocupa?
  1. 4 bytes
  2. 1 byte
  3. 2 bytes
  4. 8 bytes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Os bytes de “é” em UTF-8 são C3 A9. Um leitor os interpreta como dois caracteres Windows-1252. Qual é a causa direta da exibição corrompida?
  1. Quem escreveu usou poucos pontos de código.
  2. O texto ultrapassou um byte por arquivo.
  3. Quem leu usou a codificação errada.
  4. Quem leu alterou o número Unicode.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

A largura de uma imagem matricial é triplicada e sua altura é dobrada, enquanto a profundidade de cor permanece fixa. Por qual fator o tamanho de seus dados brutos de pixels cresce?
  1. 5
  2. 3
  3. 12
  4. 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um código livre de prefixos é A = 0, B = 10, C = 110, D = 111. Qual mensagem é codificada por 1011001110?
  1. BCDAA
  2. BACDA
  3. BCADA
  4. CBADA
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma pessoa que fotografa converte um JPEG existente para PNG sem alterar seus pixels decodificados. O que acontece com os detalhes descartados anteriormente pelo JPEG?
  1. Eles retornam quando o PNG é reaberto.
  2. Eles retornam se o PNG for maior.
  3. Eles retornam como novos campos de metadados.
  4. Eles continuam ausentes da imagem.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Identificar erros e relacionar representações10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um arquivo tem 3.145.728 bytes. Qual é seu tamanho em MiB?
  1. 3 MiB
  2. 3,145728 MiB
  3. 3.072 MiB
  4. 24 MiB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma pessoa divide 90 por 2 sucessivamente e escreve os restos na ordem obtida como 0101101. Qual é o valor binário correto de 90?
  1. 0101101
  2. 1010110
  3. 1011010
  4. 1101010
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um visualizador de arquivos mostra os três bytes 0x07, 0xB2 e 0xF0. Quantos bits esses bytes contêm?
  1. 12 bits
  2. 6 bits
  3. 48 bits
  4. 24 bits
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um sensor registra contagens inteiras de 0 a 8.192, inclusive. Cada contagem usa a menor largura sem sinal possível e os campos são compactados sem preenchimento. Quantos bytes armazenam 40 contagens?
  1. 65 bytes
  2. 70 bytes
  3. 80 bytes
  4. 560 bytes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um padrão binary32 tem sinal 1, expoente composto apenas de uns e fração diferente de zero. Qual é sua categoria e mudar apenas o bit de sinal pode torná-lo um número finito?
  1. Infinito negativo; mudar o sinal produz infinito positivo
  2. Subnormal; mudar o sinal o torna normal
  3. Negativo finito; mudar o sinal produz um positivo finito
  4. NaN; mudar o sinal o mantém como NaN
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Dois valores positivos normais adjacentes em binary32 no intervalo de 2²⁵ a 2²⁶ diferem em 4. O que o arredondamento padrão faz com o inteiro exato 33.554.435?
  1. Armazena 33.554.432.
  2. Armazena 33.554.435 exatamente.
  3. Armazena 33.554.436.
  4. Produz estouro para infinito positivo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um limite de armazenamento permite 18 bytes UTF-8. Uma cadeia contém apenas o caractere “中” (U+4E2D), sem contar outros dados. Quantas cópias cabem?
  1. 6
  2. 18
  3. 9
  4. 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma imagem de 20 × 10 usa 16 entradas de paleta, cada uma armazenada como RGB de 24 bits, e índices de pixel compactados de 4 bits. Ignorando tudo o mais, quantos bytes são necessários?
  1. 100 bytes
  2. 148 bytes
  3. 600 bytes
  4. 196 bytes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um sinal filtrado contém frequências de até 17 kHz. Qual é a menor taxa de amostragem em um número inteiro de kHz que atende à regra estrita de amostragem?
  1. 17 kHz
  2. 35 kHz
  3. 34 kHz
  4. 33 kHz
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um decodificador deve recuperar exatamente todas as entradas possíveis de 10 bits. Há 1.024 entradas desse tipo. Por que um esquema sem perdas não pode codificar todas elas em menos de 10 bits?
  1. Apenas 1.023 sequências de bits têm menos de 10 bits.
  2. Exatamente 1.024 sequências de bits têm menos de 10 bits.
  3. Toda sequência de bits mais curta deve terminar em um bit 1.
  4. Toda entrada deve manter suas posições de bits originais.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Combinar limites, codificações e escolhas de tamanho10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um número inteiro binário é escrito como 110011. Qual valor decimal resulta quando um zero é acrescentado à sua direita, sem limite de largura?
  1. 51
  2. 52
  3. 102
  4. 204
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Qual é o menor valor de um inteiro de 10 bits em complemento de dois?
  1. −511
  2. −512
  3. −1.024
  4. −1.023
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um formato de ponto fixo sem sinal de 8 bits tem cinco bits para a parte inteira e três para a fração. Um valor de 6,375 é armazenado exatamente. Qual inteiro sem sinal o padrão bruto de 8 bits representa quando a escala de ponto fixo é ignorada?
  1. 51
  2. 6
  3. 48
  4. 102
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um valor de 8 bits em complemento de dois é 10000000. Ele recebe extensão de sinal para 16 bits e depois é negado em 16 bits. Qual padrão resulta?
  1. 1111111110000000
  2. 0000000001111111
  3. 1000000000000000
  4. 0000000010000000
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Em binary32, valores representáveis adjacentes próximos de 2²⁴ são 16.777.216 e 16.777.218. Qual é o resultado armazenado da conversão do inteiro exato 16.777.217 com arredondamento para o mais próximo, com empates para o par?
  1. 16.777.216
  2. 16.777.217
  3. 16.777.218
  4. 16.777.220
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um campo de texto contém “09” como os bytes ASCII 0x30 0x39. Qual valor numérico resulta da interpretação desses caracteres como um inteiro decimal?
  1. 57
  2. 9
  3. 3.039
  4. 48
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um gravador armazena amostras estéreo de 16 bits a 24 kHz. Ele deve captar um sinal filtrado cuja frequência mais alta é 10 kHz e permanecer dentro de 6.000.000 de bytes de dados brutos de amostras. Qual é a maior duração inteira em segundos?
  1. 63 segundos
  2. 125 segundos
  3. 31 segundos
  4. 62 segundos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um clipe silencioso sem compressão tem 160 × 120 pixels, 24 bits por pixel e 25 quadros/s. Ignorando os cabeçalhos, quantos segundos completos cabem em 7,2 MB de armazenamento decimal?
  1. 4 segundos
  2. 10 segundos
  3. 5 segundos
  4. 40 segundos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma gravação mantém sua taxa de amostragem e duração, mas passa de estéreo de 16 bits para mono de 24 bits. Que fração do tamanho original dos dados brutos de amostras permanece?
  1. 3/4
  2. 3/2
  3. 1/2
  4. 4/3
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um projeto precisa recuperar exatamente um áudio mestre editado e ter uma cópia de distribuição de 90 segundos com no máximo 1,8 MB de dados codificados. Qual par de escolhas atende às duas necessidades?
  1. Mestre MP3; distribuição constante a 160 kbit/s
  2. Mestre FLAC; distribuição constante a 192 kbit/s
  3. Mestre FLAC; distribuição constante a 160 kbit/s
  4. Mestre AAC; distribuição constante a 128 kbit/s
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

81 Termos-Chave, cada um com sua definição

A

Amostra
Uma amostra de áudio é uma medida da amplitude de um sinal em um instante específico, armazenada como um número na profundidade de bits da gravação.
Um instante de amostragem estéreo produz uma medida para cada um dos dois canais, aumentando os dados armazenados.
Arredondamento de empates para o par
O arredondamento de empates para o par resolve um caso de arredondamento exatamente no meio escolhendo o valor representável cujo último bit mantido do significando é par.
Um inteiro em precisão simples exatamente no meio de dois valores próximos de 2²⁴ pode ser arredondado para baixo, embora outro valor no meio seja arredondado para cima.
Artefato de compressão
Um artefato de compressão é uma alteração visual ou sonora indesejada causada por aproximações introduzidas durante a codificação com perdas.
Em uma configuração forte de JPEG, a borda nítida de uma letra pode adquirir desfoque ou alterações em forma de blocos nos pixels próximos.
ASCII
O ASCII é um código de caracteres de sete bits com 128 entradas para letras do inglês, dígitos, pontuação, espaço e caracteres de controle.
O ponto de exclamação tem código ASCII 33 e é comumente armazenado como o byte 00100001.

B

Base
A base de um sistema numérico determina a quantidade de valores de dígitos e o fator entre valores posicionais inteiros vizinhos.
Um “10” escrito significa dois na base 2, dez na base 10 e dezesseis na base 16.
Bit
Um bit é um dígito binário com um de dois valores, 0 ou 1, representado por dois estados físicos que o hardware consegue distinguir.
Um indicador de estado pode armazenar uma escolha de ligado ou desligado em um bit, com um programa definindo qual estado significa “ligado”.
Bit de sinal
Um bit de sinal é um bit que indica se um valor com sinal é negativo, sendo sua interpretação determinada pelo formato numérico.
Em complemento de dois, um 1 inicial indica um valor negativo e também tem um peso posicional negativo.
Bit implícito
O bit implícito é o 1 inicial subentendido em um significando binário normal de ponto flutuante, que aumenta a precisão sem ocupar um bit armazenado da fração.
O binary32 armazena 23 bits de fração, mas tem 24 bits significativos para valores normais porque o 1 inicial está implícito.
Bit mais significativo
O bit mais significativo é o bit mais à esquerda de um padrão escrito de largura fixa, ocupando a posição de maior ordem.
Em um byte sem sinal, mudar o bit mais significativo altera o valor em 128 enquanto os outros bits permanecem fixos.
Bit menos significativo
O bit menos significativo é o bit mais à direita de um número inteiro binário, que contribui com o valor da posição das unidades.
O bit menos significativo de 10110 é 0, então o número inteiro é par independentemente dos outros bits.
Byte
Um byte é um grupo de oito bits, que fornece 256 padrões possíveis e geralmente forma a menor unidade endereçável de memória.
O byte 01000001 pode representar o número 65 ou a letra “A”, dependendo de como é interpretado.

C

Canal alfa
Um canal alfa armazena a opacidade de um pixel separadamente de sua cor, geralmente usando 0 para transparente e 255 para opaco.
Um pixel RGBA usa quatro valores de oito bits, então seu armazenamento bruto é de quatro bytes em vez dos três do RGB.
Caractere de controle
Um caractere de controle é um código de texto que orienta o tratamento do texto sem imprimir um símbolo visível comum, como tabulação ou avanço de linha.
O código ASCII 10 é um avanço de linha, então um arquivo pode usá-lo para marcar uma quebra de linha entre os bytes de texto.
Codificação
Uma codificação de caracteres especifica como valores de caracteres válidos se tornam uma sequência de unidades de código ou bytes para armazenamento e transmissão.
O UTF-8 codifica “é” como C3 A9, enquanto um identificador de ponto de código identifica o caractere sem fornecer essa sequência de bytes.
Codificação de Huffman
A codificação de Huffman constrói um código de comprimento variável livre de prefixos a partir das frequências dos símbolos, atribuindo códigos mais curtos a símbolos frequentes para reduzir o tamanho dos dados.
Uma letra frequente pode receber um código de um bit, mas o arquivo também precisa de informações que permitam a decodificação.
Codificação perceptual
A codificação perceptual reduz dados de mídia conforme a sensibilidade humana, dedicando menos espaço a detalhes que as pessoas provavelmente não perceberão.
Um codificador de áudio pode remover um tom baixo encoberto por um som mais alto de frequência próxima em uma cópia MP3 para audição.
Codificação por comprimento de sequência (RLE)
A codificação por comprimento de sequência substitui uma sequência consecutiva de um símbolo por sua contagem e pelo símbolo, funcionando melhor quando sequências idênticas são longas.
Em uma convenção de contagem e símbolo, “MMMMMMNN” torna-se “6M2N”, enquanto símbolos alternados podem aumentar de tamanho.
Código de caractere
Um código de caractere é o número atribuído a um caractere por uma tabela acordada, permitindo que símbolos de texto sejam armazenados como padrões de bits.
O caractere “3” tem código ASCII 51, embora seu valor numérico de dígito seja três.
Código livre de prefixos
Um código livre de prefixos não tem nenhuma palavra de código que seja o início de outra, permitindo que um decodificador reconheça símbolos sem separadores adicionais.
Com A = 0, B = 10 e C = 11, os bits 011 são decodificados imediatamente como A seguido de C.
Complemento de dois
O complemento de dois é uma representação de inteiros com sinal cujo bit mais significativo tem peso negativo e cujos demais bits mantêm pesos binários positivos.
O padrão 11111010 representa −6 em um campo com sinal de oito bits, mas 250 se for interpretado sem sinal.
Compressão
A compressão reduz as necessidades de armazenamento ou transferência codificando dados em menos bits, com a recuperação exata dependendo de o método ser sem perdas.
Uma imagem codificada menor é transferida mais rapidamente pelo mesmo enlace porque menos bits precisam ser enviados.
Compressão com perdas
A compressão com perdas descarta permanentemente informações selecionadas, produzindo uma representação menor que reconstrói uma aproximação do original.
Um JPEG de alta qualidade pode parecer próximo da foto e ainda assim ser incapaz de reproduzir exatamente seus pixels originais.
Compressão sem perdas
A compressão sem perdas produz uma codificação a partir da qual os bits originais podem ser reconstruídos exatamente, incluindo cada valor de texto ou amostra.
Um arquivo FLAC pode restaurar exatamente as amostras de áudio mesmo que sua contagem de bytes armazenados seja menor.

D

Dígito hexadecimal
Um dígito hexadecimal é um símbolo de 0–9 ou A–F que fornece um valor de zero a quinze em uma única posição de base 16.
O dígito hexadecimal E significa quatorze, enquanto o valor de dois dígitos 0x14 significa vinte em decimal.

E

Erro de arredondamento
O erro de arredondamento é a diferença entre um valor exato pretendido e o valor representável escolhido para armazená-lo ou calculá-lo.
A expansão binária periódica de 0,1 é arredondada quando armazenada em precisão simples ou dupla finita.
Estouro (overflow)
O estouro ocorre quando um resultado calculado está fora dos valores que o formato numérico escolhido pode representar.
Para um contador sem sinal de oito bits, um resultado de 260 está fora da faixa de 0–255 e exige tratamento de estouro.
Expansão binária finita
Uma expansão binária finita termina após uma quantidade limitada de posições binárias; uma fração irredutível tem essa expansão exatamente quando seu denominador é uma potência de dois.
A fração 5/8 termina como 0,101₂, enquanto 1/10 precisa de uma sequência periódica de dígitos binários.
Extensão de sinal
A extensão de sinal aumenta a largura de um inteiro com sinal copiando seu bit de sinal para cada nova posição à esquerda, preservando o valor.
O valor com sinal de quatro bits 1010 é ampliado para 11111010, preservando −6 em complemento de dois de oito bits.

F

Faixa de representação
A faixa de representação de um formato numérico descreve as magnitudes que ele pode representar; em ponto flutuante, os bits do expoente determinam seus limites gerais de escala.
Um valor pode estar dentro da faixa finita do binary32 e ainda assim ficar entre dois valores representáveis vizinhos.

G

Gráficos vetoriais
Os gráficos vetoriais descrevem formas por meio de instruções geométricas, permitindo redesenhá-las em tamanhos diferentes sem ampliar uma grade de pixels armazenada.
Um logotipo SVG pode descrever o centro e o raio de um círculo e depois redesenhá-lo para uma tela maior.
Grupo de quatro bits (nibble)
Um grupo de quatro bits fornece dezesseis padrões possíveis e corresponde exatamente a um dígito hexadecimal.
O byte 10100111 se divide nos grupos de quatro bits 1010 e 0111, que são os dígitos hexadecimais A e 7.

I

IEEE 754
O IEEE 754 é o padrão que define formatos de ponto flutuante amplamente usados e seu comportamento, incluindo valores normais, arredondamento e valores especiais.
Binary32 e binary64 seguem o IEEE 754, então a organização de seus campos pode ser decodificada usando um conjunto compartilhado de regras.
Imagem matricial (bitmap)
Uma imagem matricial representa uma imagem como uma grade retangular de valores de pixels, com largura, altura e profundidade de cor.
Uma fotografia digital é armazenada como imagem matricial porque cada parte de sua imagem detalhada precisa de um valor de pixel.
Inteiro sem sinal
Um inteiro sem sinal representa um número inteiro não negativo usando pesos binários positivos em todas as posições de uma largura fixa.
O byte 11111111 representa 255 quando seu tipo de dado especifica um inteiro sem sinal de oito bits.

L

Largura fixa
Uma largura fixa é uma quantidade definida de bits reservada para cada valor, que limita quantos padrões distintos podem ser armazenados.
Um contador de oito bits não pode ganhar um nono bit armazenado quando um resultado chega a 256; sua regra de estouro importa.

M

Metadados de imagem
Os metadados de imagem descrevem uma imagem ou seu armazenamento, incluindo dimensões e profundidade, e também podem incluir detalhes da câmera, data ou local.
Um arquivo de fotografia pode conter informações da câmera mesmo que esses bytes não façam parte da grade visível de pixels.
Método de compressão por dicionário
Um método de compressão por dicionário comprime dados substituindo sequências repetidas por referências a sequências conhecidas ou reconstruídas pelo decodificador.
Uma frase repetida pode ser representada por uma distância de retorno no texto decodificado e por um comprimento a copiar.
MIDI
O MIDI armazena ou comunica instruções de execução musical, como notas e tempos, em vez da forma de onda sonora de uma gravação.
Uma melodia MIDI pode ser reproduzida com sons de instrumentos diferentes, mas não preserva a voz gravada de um cantor.

N

NaN (não é um número)
NaN, ou “não é um número”, é uma categoria especial de ponto flutuante com campo de expoente composto apenas de uns e fração diferente de zero.
Uma operação numérica inválida, como zero dividido por zero, pode produzir NaN em vez de um número comum.
Negação aritmética
A negação aritmética transforma um número em seu oposto aditivo; em complemento de dois, ela é feita invertendo todos os bits e somando um.
Negar o padrão de oito bits para +6 fornece o padrão para −6, enquanto o valor mínimo não tem correspondente positivo.
Normalização
A normalização Unicode converte sequências de caracteres equivalentes em uma forma comum para que cadeias com sequências diferentes de pontos de código possam ser comparadas.
Uma letra acentuada pré-composta e sua sequência de letra básica mais acento podem ser normalizadas antes da comparação de cadeias.
Notação posicional
A notação posicional atribui a cada dígito um valor determinado pelo próprio dígito e por sua posição no número escrito.
Mover um 1 da posição das unidades para a posição dos oitos muda sua contribuição de um para oito.

P

Página de códigos
Uma página de códigos é um mapeamento de caracteres para códigos, muitas vezes uma tabela antiga de oito bits cujos significados dos valores superiores diferem dos de outras tabelas.
O byte 0xE9 fornece “é” em Latin-1 e “й” em Windows-1251, então quem lê precisa conhecer a página de códigos.
Paleta de cores
Uma paleta de cores é uma tabela armazenada de cores selecionadas, que permite a cada pixel indicar uma entrada da tabela com um valor de índice menor.
Um ícone de dezesseis cores pode usar índices de pixel de quatro bits, mantendo suas cores RGB reais na paleta.
Perda por gerações sucessivas
A perda por gerações sucessivas é a perda adicional de informações que pode se acumular quando uma mídia é repetidamente decodificada e codificada com um método com perdas.
Salvar uma foto editada por meio de recodificações JPEG repetidas pode acrescentar perdas, mesmo que cada salvamento pareça semelhante.
Pixel
Um pixel é uma posição na grade de uma imagem matricial, que contém um valor de cor ou um índice que seleciona uma cor de uma paleta.
Uma imagem matricial de 400 × 300 contém 120.000 pixels, independentemente do tamanho em que é exibida.
Ponto de código
Um ponto de código é uma posição numerada no espaço de códigos Unicode, escrita como U+ seguido de dígitos hexadecimais, como U+00E9.
O ponto de código de “é” permanece U+00E9 quer seus bytes sejam armazenados usando UTF-8, UTF-16 ou UTF-32.
Ponto fixo
O ponto fixo interpreta bits armazenados com uma quantidade acordada de posições fracionárias, produzindo valores igualmente espaçados em uma escala fixa.
Com quatro bits de fração, um valor inteiro bruto de 40 representa 40/16, ou 2,5, em ponto fixo sem sinal.
Ponto flutuante
O ponto flutuante armazena um sinal, um significando e uma escala dada por um expoente, abrangendo magnitudes muito diferentes em um único formato.
O mesmo formato pode representar um pequeno comprimento medido e uma distância muito maior alterando seu expoente.
Precisão
A precisão de um formato numérico descreve quanto detalhamento significativo ele mantém; em ponto flutuante, os bits de fração controlam o espaçamento em uma determinada escala.
O binary64 mantém mais bits significativos que o binary32, o que geralmente reduz o erro de arredondamento para a mesma entrada.
Prefixo 0x
O prefixo 0x marca os dígitos seguintes como notação hexadecimal; ele é um marcador de notação e não acrescenta uma posição numérica.
Em 0x3A, os dígitos 3 e A contribuem com três grupos de dezesseis e dez unidades; o prefixo identifica a base.
Prefixo binário da IEC
Um prefixo binário da IEC multiplica uma unidade de dados por uma potência de 1.024, usando nomes como kibi, mebi e gibi.
Um MiB contém 1.048.576 bytes, então um arquivo de um milhão de bytes ocupa um pouco menos de um MiB.
Prefixo do SI para unidades de armazenamento
Um prefixo do SI para unidades de armazenamento multiplica uma unidade de armazenamento por uma potência decimal, como mil para quilo ou um milhão para mega.
Dados de 2 MB contêm 2.000.000 de bytes, mesmo quando um sistema também informa seu tamanho em MiB.
Profundidade de bits do áudio
A profundidade de bits do áudio é a quantidade de bits usados por amostra, que determina a quantidade de níveis de amplitude disponíveis e sua granularidade.
Dezesseis bits permitem 65.536 níveis de amostra, enquanto oito bits permitem apenas 256 e uma quantização menos fina.
Profundidade de cor
A profundidade de cor é a quantidade de bits usados para representar o código de cor de um pixel, determinando quantos códigos de cor distintos ele pode ter.
Um índice de paleta de quatro bits pode selecionar entre dezesseis cores, enquanto RGB de 24 bits oferece muito mais combinações.

Q

Quadro
Um quadro de vídeo é uma imagem em uma sequência temporizada; a taxa de quadros informa quantas dessas imagens são exibidas por segundo.
A 25 quadros por segundo, um segundo de vídeo bruto contém vinte e cinco imagens completas antes de considerar o áudio.
Quantização
A quantização arredonda a amplitude medida de uma amostra para um dos níveis armazenados disponíveis, introduzindo um erro que pode aparecer como ruído.
Aumentar a profundidade de bits aproxima os níveis de quantização sem mudar os momentos em que as amostras são obtidas.

R

Rasterização
A rasterização transforma instruções de formas em uma grade de pixels em uma resolução escolhida para que uma tela possa mostrar a imagem resultante.
O contorno de uma fonte vetorial é rasterizado em pixels de tela quando um documento exibe suas letras.
Razão de compressão
A razão de compressão é o tamanho original dos dados dividido pelo tamanho comprimido, com ambas as quantidades expressas na mesma unidade.
Reduzir um arquivo de 15 MB para 5 MB fornece uma razão de compressão de 3:1, não uma economia de 3 MB.
Redundância
A redundância é uma informação repetida ou previsível que pode permitir descrever dados de forma mais breve sem perder seu conteúdo original.
Uma longa linha de uma única cor tem redundância que a codificação por comprimento de sequência pode substituir por uma contagem curta.
Resolução
A resolução de uma representação é o menor intervalo distinguível em sua escala escolhida; o ponto fixo a determina pela quantidade de bits de fração.
Cinco bits de fração binária fornecem um intervalo de 1/32, então um valor exatamente entre dois desses passos precisa de arredondamento.
Retorno cíclico (wraparound)
O retorno cíclico é o comportamento que mantém apenas uma quantidade fixa de bits menos significativos, fazendo os valores inteiros armazenados percorrerem os padrões disponíveis em ciclos.
Com retorno cíclico sem sinal de oito bits, aumentar 254 em três armazena 1 após um ciclo completo de 256.
RGB
O RGB representa uma cor por meio de intensidades de luz vermelha, verde e azul, geralmente com oito bits para cada canal em um pixel.
Vermelho e verde em intensidade máxima, sem azul, produzem a luz amarela de RGB (255, 255, 0).

S

Separador binário
O separador binário separa as potências inteiras de dois das potências fracionárias, que começam com um meio imediatamente à sua direita.
O primeiro 1 após o separador em 0,101₂ contribui com um meio, e o último 1 contribui com um oitavo.
Significando (mantissa)
Um significando é a sequência de dígitos significativos escalada por uma potência da base; um significando binário normal começa com 1.
Em 1,011₂ × 2⁴, o significando é 1,011₂, enquanto o expoente controla sua escala geral.
Sinal analógico
Um sinal analógico varia continuamente, como a tensão de um microfone que acompanha mudanças na pressão do ar produzidas pelo som.
Um conversor de áudio mede o sinal analógico de um microfone antes de armazenar amostras digitais dele.
Sinal e magnitude
A representação por sinal e magnitude armazena um bit de sinal separado dos bits de magnitude positiva, produzindo padrões distintos para zero positivo e zero negativo.
Em sinal e magnitude de oito bits, 10000110 significa −6; os sete bits menos significativos fornecem diretamente a magnitude.
Sistema binário
O sistema binário é o sistema numérico de base 2, que usa os dígitos 0 e 1 com valores posicionais que são potências de dois.
O número inteiro binário 10010 seleciona as posições de dezesseis e dois, então seu valor decimal é dezoito.
Sistema hexadecimal
O sistema hexadecimal é de base 16, usa os dígitos 0–9 e A–F, e cada dígito corresponde a quatro bits binários.
O byte 11001010 é mais curto de escrever como 0xCA, mantendo um dígito claro para cada grupo de quatro bits.
Sobreposição espectral (aliasing)
A sobreposição espectral ocorre quando frequências amostradas acima da metade da taxa de amostragem aparecem como frequências mais baixas falsas na gravação digital.
Um filtro contra sobreposição espectral remove frequências altas de entrada antes da amostragem para que elas não criem tons falsos.
Subfluxo (underflow)
O subfluxo diz respeito a resultados que se tornam pequenos demais para a representação normal em ponto flutuante e podem ser armazenados como valores subnormais ou zero.
Um cálculo que se aproxima de zero pode perder precisão relativa quando seus resultados entram na faixa subnormal.

T

Taxa de amostragem
A taxa de amostragem é a quantidade de medidas por segundo em cada canal de áudio, medida em hertz, que determina seu espaçamento no tempo.
A 48 kHz, o gravador faz 48.000 medidas por segundo para cada canal da gravação.
Taxa de bits
Uma taxa de bits é a quantidade de bits codificados ou transferidos por segundo, comumente escrita em bit/s, kbit/s ou Mbit/s.
Uma taxa de transferência de 16 Mbit/s corresponde a 2 MB/s antes de considerar qualquer sobrecarga de controle da comunicação.
Teorema da amostragem
O teorema da amostragem exige uma taxa maior que o dobro da frequência mais alta mantida no sinal para amostrar fielmente um sinal de banda limitada.
Um sinal mantido até 18 kHz precisa de uma taxa acima de 36 kHz, com filtragem para remover frequências mais altas.
Texto corrompido por erro de codificação (mojibake)
O texto corrompido por erro de codificação é produzido quando alguém decodifica bytes armazenados usando uma codificação diferente da usada para escrevê-los.
“café” em UTF-8 pode aparecer como “café” quando seus bytes são decodificados como Windows-1252.
Tipo de dado
Um tipo de dado especifica o tipo de valor com que um programa lida e ajuda a determinar como seus padrões de bits armazenados são interpretados.
Um byte interpretado como inteiro com sinal pode ter um valor diferente do mesmo byte interpretado sem sinal.

U

Unicode
O Unicode é um padrão de caracteres compartilhado que atribui pontos de código a sistemas de escrita e define codificações para armazenar valores de caracteres válidos.
As letras “A”, “Ж” e “中” têm pontos de código Unicode distintos dentro do mesmo espaço de códigos.
UTF-8
O UTF-8 é uma codificação Unicode de comprimento variável que usa de um a quatro bytes por ponto de código de caractere válido e preserva os bytes ASCII.
A palavra “café” usa cinco bytes UTF-8 porque sua última letra precisa de uma sequência de dois bytes.
UTF-16
O UTF-16 codifica valores de caracteres válidos em uma ou duas unidades de código de 16 bits, usando um par substituto para valores acima de U+FFFF.
O emoji “😀” ocupa duas unidades de código UTF-16, D83D e DE00, embora seja um ponto de código.

V

Valor subnormal
Um valor subnormal é um valor de ponto flutuante muito pequeno com campo de expoente composto apenas de zeros, fração diferente de zero e sem o 1 inicial implícito.
Padrões subnormais preenchem parte do intervalo entre o menor valor normal positivo e zero.
Viés do expoente
Um viés do expoente é um deslocamento fixo somado ao expoente real para que o expoente armazenado possa ser um campo de bits sem sinal.
Um expoente armazenado binary32 de 126 fornece um expoente real de −1 após a subtração de seu viés de 127.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar